1. 程式人生 > >51微控制器鍵盤行列反轉掃描

51微控制器鍵盤行列反轉掃描

今天一天了,一直在研究鍵盤,好不容易看完教程打算自己動手的時候又發現了這個更好的掃描鍵盤的方法,後半天把這個搞懂了,自己寫出來了

uchar KeyScan()
{
 P3=0xf0;
 if(P3!=0xf0)
 {
  delay(3);
  if(P3!=0xf0)
   key_l=P3&0xf0;
  P3=key_l|0x0f;
  key_h=P3&0x0f;
  return(key_l+key_h);
 }
 return 0xff;
}

微控制器4*4矩陣鍵盤是在P3口上的,這個不用說,是用邏輯與電路控制的,不過,是兩個都為0才通,當按鍵按下時變為0;P3=0xf0;令P3口的低四位為0,即行控制位為0,這樣便遮蔽了行控制,對於列控制,即使全置位,由於某一按鍵按下,該按鍵對應的列控制位還是會變為0;所以這一句是不會改變P3口高四位原來的值的;

if句判斷有無按鍵按下,delay()是去抖動函式,key_l=P3&0x0f;別人的解釋是把列控制訊號儲存,我不認為這句話的作用在這裡,因為列控制訊號已經儲存到key_l中了,我認為這句話的作用是,遮蔽列控制訊號,開啟行控制訊號以便於下面的提取,key _h=P3&0x0f;這句話便是提取行控制訊號了;我認為這裡去不去抖動無所謂,return(key_l+key_h);這句話便是把提取到的控制訊號組合起來返回,return 0xff;這句是在沒有按下任何鍵的情況下返回0xff,使這個函式能夠正確結束……整個函式缺少確認鬆手的程式碼沒寫,對於現在的我,還無所謂,需要的時候再補上……

這是我個人的學習心得,以備不時之需,大神勿噴……

相關推薦

51微控制器鍵盤行列反轉掃描

今天一天了,一直在研究鍵盤,好不容易看完教程打算自己動手的時候又發現了這個更好的掃描鍵盤的方法,後半天把這個搞懂了,自己寫出來了 uchar KeyScan() {  P3=0xf0;  if(P3!=0xf0)  {   delay(3);   if(P3!=0xf0)

51微控制器應用行列反轉法操縱矩陣鍵盤

應用行列反轉法操縱矩陣鍵盤   行列反轉法的簡單實用,我自己整理了一下,分享給大家。根據開發板原理圖可知,P3口接為矩陣鍵盤,其中P3.0~P3.3接行線,P3.4~P3.7接列線,P0口接共陰極6段數碼管。                   圖 1 反轉法的原理:反

疑問----單片機矩陣鍵盤行列反轉掃描

inux png src 網上 target nbsp 檢測 開發板 col 學到矩陣鍵盤這一塊對網上別人寫的C代碼有些疑問,希望有能看到的大牛幫助解答。 矩陣鍵盤和獨立鍵盤原理圖: 原理:對於圖右側的矩陣鍵盤,把P3口的低四位(P3.0 ~ P3.3)和高四位(P3

51微控制器——控制步進電機加速、減速及反轉

加速: #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 uchar phasecw[4] =

51微控制器——矩陣鍵盤的檢測

4x4鍵盤檢測程式,按下鍵後相應的程式碼顯示在數碼管上 #include<reg51.h> sbit dula=P2^6; sbit wela=P2^7; unsigned char i=100; unsigned char j,k,temp,key; void del

51微控制器按鍵控制步進電機加減速及正反轉

    之前嘗試用微控制器控制42步進電機正反轉,電機連線導軌實現滑臺前進後退,在這裡分享一下測試程式及接線圖,程式部分參考網上找到的,已經實際測試過,可以實現控制功能。     所用硬體:步進電機及驅動器、STC89C52微控制器、直流電源 1、硬體連線圖      

利用51微控制器,矩陣鍵盤按鍵顯示0--F在數碼管

程式碼如下:       #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7; sbit du = P2^

51微控制器獨立鍵盤原理

我這按鍵是機械彈性按鍵,所以具有彈性,按鍵在按下和鬆開的瞬間均伴隨有一連串的抖動,鍵抖動會引起一次按鍵被誤讀多次,然後為了保證cpu對鍵的一次閉合僅作一次處理,所以我們必須去除抖動。去除抖動有2種,硬體消抖和軟體消抖。其中一軟體消抖最方便。所以我就以軟體消抖為例。     獨

51微控制器之獨立按鍵和矩陣鍵盤(概念及原理)

一、基本知識         1.按鍵分類與輸入原理         按鍵按照結構原理科分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關燈;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。

51微控制器獨立鍵盤

我們以S2鍵為例子。按一次按鈕,數碼管數字增加1. 首先,定義鍵盤上S2鍵和數碼管的段選和位選。 sbit s2=P3^4; sbit dula=P2^6; sbit wela=P2^7; 但是按鍵的過程中需要防抖動,因此需要一個延時函式。大約10ms。 void dela

51微控制器控制電動機正反轉和調速

      經過不斷地摸索和參考高手的設計,最終完成了微控制器的步進電機控制,可以實現步進電機的實時正反轉,加速,減速。     至於步進電機的工作原理,相信很多人都已經知道,本次採用的是四相步進電機,採用四相八拍的工作方式,即:A-AB-B-BC-C-CD-D-DA-A 

51微控制器第二彈---獨立鍵盤

今天學獨立鍵盤模組。。 原理圖如下:            可以看到微控制器上有4個按鍵,分別命名為K1,K2,K3,K4。。對應的IO分別為 P3.1,P3.0,P3.2,P3.3  對應圖如下。。   工作原理: 以K1為例,按下K1後,p3^1 接地(為0),反之鬆開

51微控制器(AT89C52)矩陣鍵盤檢測程式

矩陣鍵盤檢測思路:行線設為輸出、列線設為輸入獲得列碼,行線設為輸入、列線設為輸出獲得行碼,由行列碼確定鍵值。 本程式可改進的地方:按鍵狀態機中,將等待按鍵釋放語句移到第三個狀態中,可進一步提高按鍵掃描程式效率。 #include<reg52.h> #define

51微控制器矩陣鍵盤編碼方法

搬運到CSDN的舊文件 眾所周知,51微控制器一般的鍵盤檢測原理為非編碼鍵盤檢測,沒有專門用來產生鍵編碼號或鍵值的電路晶片;而我們使用的電腦鍵盤為編碼鍵盤,通過編碼電路晶片為每個按鍵產生一個編碼號,可以通過序列匯流排把鍵值傳輸給電腦。在進行矩陣鍵盤檢測時,

51微控制器初瞭解(9)

跑馬燈效果的實現------8顆LED,7亮1滅,滅的移動 0x7f(01111111) 0xbf(10111111) 0xdf(11011111)   C語言按位取反:~表示對一個數字按位取反。01111111~10000000   #include <reg51.h

51微控制器----基礎知識

基礎: 1. 點亮二極體的壓降為 1.6–1.7V,工作電流為3–10 mA;低電平點亮 2.線與指的是它們任意一開關只要對地導通,這根線就一定是低電平。 3.微控制器I/O預設輸入高電平; LED 燈點亮 電路圖: # include<reg5

51微控制器自學--完美的單擊、雙擊、長按、中斷消抖

完整的單擊、雙擊、長按程式碼。 工作原理:當有按鈕第一次按下時,設定第一個標誌An,當按鈕第一次釋放後,進入中斷消抖延時計數,假如在計數範圍內第二次按鈕按下,設定第二標誌Aa,這樣就把單擊和雙擊區分開,而且是可靠的邏輯標誌,長按為大於1秒的判斷. 中斷消抖及按鈕單擊、雙擊、長按處理

51微控制器入門_使用keil新建工程以及串列埠驅動下載和程式燒寫教程

        51微控制器是很簡單的一款微控制器,適合於新手的入門學習,但是也只能作為初學者繼續往上學習的一個墊腳石。這篇部落格我主要的目的是寫給我們學校社團的萌新閱覽的,方便他們入門51,繼續堅持學習下去。假如你有一個51微控

51微控制器學習筆記()

一、關於標頭檔案 在輸入標頭檔案時,新手容易出錯 比如: #include "reg52.h" 由於不仔細以及對標頭檔案不夠了解,會出現錯誤,如: #include "reg.52“ #include "reg.52.h" 此情況下編譯會出錯,顯示打不開該檔案,如下圖

51微控制器之忽略的東西

P0口將作為匯流排的低8位地址線和8位資料線使用 P2口將作為匯流排的高8位地址線使用 如果十六進位制數以字母ABCDEF中的某一個開頭,必須在前面加一個0.譬如,MOV P1, #0BFH ORG 00H 表示的是偽指令,作用幫助彙編器彙編指令,並不是微控制器指令的一部分,因此