導航:首頁 > 操作系統 > 單片機的鍵盤檢測程序的主要步驟

單片機的鍵盤檢測程序的主要步驟

發布時間:2022-09-14 22:08:18

單片機的獨立鍵盤掃描程序

這是keil 的語法規定的,在程序中不能有類似的P3^4的寫法的。必須在主程序之前用sbit 命令定義成符號,所以,
if(P3^4==0)的寫法是錯誤的,只有if(key==0)的寫法才是正確的。
雖然編譯是通過的,也沒有報錯,但是編譯後的代碼卻是錯誤的。
如果懂得匯編代碼,是可以查編譯後的匯編代碼,就知道是錯的。

Ⅱ 51單片機怎麼編寫檢測多個按鍵按下順序是否與自己設置的順序一致

例如A B C鍵,每個按鍵用一個數字代碼表示,如51,52,53。每次有按鍵按下時,將按下鍵的代碼存入數組變數,每次存在遞增一位變數里。然後再比較數組里的每一個數和你想要的順序是否一樣 如果你想按下的順序是BCA,那麼最後的判斷是否符合的語句就是if( (i[0]==52)&&(i[1]==53)&&(i[2]==51) )
{
//添加符合要求順序時執行的代碼
}

else
{
//添加不符合時執行的代碼
}

Ⅲ 單片機鍵盤掃描C程序

uchar code act[4]={0xfe,0xfd,0xfb,0xf7};
char scan_key(void)
{
uchar i,j,in,ini,inj;
bit find=0;
for(i=0;i<4;i++)
{ //額 ,先給你解釋下4*4
P1=act[i]; //開通讀取,並輸出高電平
delay(10); //延時
in=P1; //讀取單片機值並賦值給in,四種情況4個按鍵,
in=in>>4; //右移四位,去掉低位
in=in|0xf0; //位或運算,高四位補1,
for(j=0;j<4;j++)
{
if(act[j]==in) //判斷具體哪個按鍵
{
find=1;
inj=j;ini=i;
}
}
}
if(find==0)return-1; //返回值 -1,return 1是正常返回,return -1是非正常返回 程序寫法標准而已,即沒按鍵
return(ini*4+inj); //i是判斷高四位,j判斷低4位
}

0 1 2 3 p1.0 p1.0為零 可判斷0,1,2,3 如果開關0導通 p4即為0,即為1110 1110

4 5 6 7 p1.1 右移補1,得 1111 1110,及j為0

8 9 a b p1.2 開關1導通 p5為0, 即 1101 1110, 右移補1111 1101

c d e f p1.3 可判斷j為1 同理可類推

p4 5 6 7

按這種思路4個埠只能實現4個開關4*4=16,2*2=4 得換思路,如果是因為埠緊張的話,可以用P3口,或者採用分壓讀取AD判斷按鍵(AD鍵盤)

Ⅳ 簡述單片機反轉法識別矩陣按鍵過程

行反轉法的基本概念是:行列線的交叉位置布置按鍵。所有行和列加上拉電阻。
所有行作輸出先送低電平,然後讀入列值。 如果有任意鍵按下,那麼一定對應列值有0出現,也就知道了按下的鍵所在列。
反過來驅動這一列為0,其他列為1。把行作輸入。就可以判斷按下的鍵所在行。矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,列線通過電阻接正電源,並將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。<1>確定矩陣式鍵盤上何鍵被按下介紹一種「行掃描法」。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。1、判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然後檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位於低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置 在確認有鍵按下後,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。

Ⅳ 單片機按鍵掃描程序

KEY: MOV A,P1
CLR C
SUBB A,#1
MOV 20H,A
RET
這樣得不到鍵值呀
改:
KEY: MOV A,P1
SETB C
MOV R7,#8
LPKEY:
RRC A
JNC OUTK1
DJNZ R7,LPKEY

OUTK1: DEC R7
MOV 20H,R7 //如果20H=255則表無鍵
RET

Ⅵ 單片機按鍵檢測程序

P3=0xfe; //P3=0b1111 1110,令P3.0=0,同時令高四位為高電平,作好讀埠准備(51IO特點)
temp=P3; //讀回P3口的狀態
temp=temp&0xf0; //temp&1111 0000,0與任何數結果為0,把temp變數的低四位屏蔽了,高四位因為任何數與1等於它本身,所以把高四位對應的埠狀態讀進來。
while(temp!=0xf0) //上步處理後,高四為不全為1,說明有按鍵按下(結合矩陣鍵盤的電路結構才能理解,這里不方便上圖)
{
delay(5);
temp=P3;
temp=temp&0xf0;//這三句跟上面重復,功能是軟體消抖
while(temp!=0xf0) //延時一段時間後判斷還有按鍵按下,說明是真有按鍵按下,進入按鍵掃描與鍵值的判斷,否則可能是意外抖動引起的,就不進行按鍵掃描。
{
temp=P3;
switch(temp).....

我想注釋完應該能讀懂,關鍵是要理解矩陣鍵盤的掃描原理。

Ⅶ 單片機4*4鍵盤掃描程序

//你要看得懂代碼首先你要了解按鍵掃描的原理
//k_input是Px8個IO(x=0/1/2/3)
ucharkeys()
{
uchari,j,k_in,k_out=0xfe,jm;
k_input=0x0f//步驟1:Px7~Px4為低,Px3~Px0為高
if(k_input!=0x0f)//步驟2:是否有按鍵按下,如果有,Px的值將發生變化
yanshi(10);//軟體消除抖動
else
return16;//如果沒有,返回空鍵值

for(jm=0;jm<4;jm++)//掃描是哪個按鍵按下
{
k_input=k_out;//步驟3:從Px0這一列開始掃描
k_int=k_input;//這里應該是k_in
j=0x01;
for(i=0;i<4;i++)//步驟4:逐個掃描這一列上面的4個按鍵
{
if(~(k_in>>4)&j)//如果有按鍵按下,返回被按下的按鍵值
return(jm*4+i);
j=_crol_(j,1);//如果沒有按鍵按下,依次掃描這一列的其他按鍵
}
k_out=crol_(k_out,1);//步驟5:移位,依次掃描另一列,直到檢測到按鍵按下
}
return16;//如果沒有掃描到按鍵,認為是誤觸發,返回空鍵值
}

Ⅷ 單片機應用系統的鍵盤處理程序主要包括哪幾部分內容

輸出,輸入,復位。
1、單片系統的鍵盤程序包括輸出,由鍵盤進行敲擊字母輸出。
2、輸入是通過打完的字通過顯示器進行輸入。
3、復位是將錯誤的地方進行刪除復位。

Ⅸ 單片機鍵盤掃描程序

2*3的鍵盤,太簡單了,不值得用循環,特別是雙重循環。

最簡明、高效的程序如下:

sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;

char scan_key(void)
{
P13 = 0;
if (!P10) return 0;
if (!P11) return 1;
if (!P12) return 2;
P13 = 1;

P14 = 0;
if (!P10) return 3;
if (!P11) return 4;
if (!P12) return 5;
}

本程序,使用的變數最少,也不涉及其它介面。
代碼最少,執行效率最高。

Ⅹ 單片機鍵盤自檢程序

rans()流程
掃描碼鍵值轉換程序流程第一類按鍵的掃描碼鍵值轉換程序代碼:

if (F0_FLAG) {//接收掃描碼為斷碼

switch (mcu_revchar){//處理控制鍵
case 0x11: agcs_status&=0xF7;break;//左alt釋放

case 0x12: agcs_status&=0xFE;break;//左shift釋放

case 0x14: agcs_status&=0xFD;break;//左ctrl釋放

case 0x58: if(led_status&0x04)

led_status&=0x03;//caps lock鍵

else led_status =0x04;

ps2_ledchange();

break;

case 0x59: agcs_status&=0xEF;break;//右shift釋放

case 0x77: if(led_status&0x02)

led_status&=0x05;//num lock鍵

else led_status =0x02;

ps2_ledchange();

break;

case 0x7E: if(led_status&0x01)

led_status&=0x06;//scroll lock鍵

else led_status =0x01;

ps2_ledchange();

break;

default:break;

}

F0_FLAG = 0;

}

else {//接收掃描碼為通碼

if (led_status & 0x04) caps_flag = 1; else caps_flag = 0;

if (led_status & 0x02) num_flag = 1; else num_flag = 0;

if (scga_status & 0x11) shift_flag = 1; else shift_flag = 0;

file://掃描碼鍵值轉換

if ((caps_flag == shift_flag) (!num_flag))
KeyVal=kb_plain_map\[mcu_revchar\];

else KeyVal=kb_shift_map\[mcu_revchar\];

switch(mcu_revchar){//處理控制鍵或狀態鍵

case 0x11: agcs_status = 0x08;//左alt按下

case 0x12: agcs_status = 0x01;//左shift按下

case 0x14: agcs_status = 0x02;//左ctrl按下

case 0x59: agcs_status = 0x10;//右shift按下

default: break;

}

}第二類按鍵的掃描碼鍵值轉換程序與上相似。要注意的是在退出該程序段時對
E0_FLAG和F0_FLAG標志的清0。

PAUSE鍵的處理程序:如果接收到0xE1,置E1_FLAG=1,然後順次將後續接收到的7
個位元組數據和PAUSE的通碼後7個位元組比較,一致則返回KeyVal=KB_PAUSE。在比較
完所有7個位元組後清除E1_FLAG標志。

鍵盤初始化程序kb_init()流程:

① 上電後,接收鍵盤上電自檢通過信號0xAA,或者自檢出錯信號0xFC。單片機接
收為0xAA,進入下一步,否則,進行出錯處理。

② 關LED指示,單片機發送0xED,然後接收鍵盤回應0xFA,接著發送送0x00接收
0xFA。

③ 設置機打延時和速率。 單片機發送0xF3,接收0xFA,發送0x00
(250ms,2.0cps),接收0xFA。

④ 檢查LED,發送0xED,接收0xFA,發送0x07(開所有LED),接收0xFA。發送0xED,
接收0xFA,發送0x00(關LED),接收0xFA。

⑤ 允許鍵盤發送0xF4,接收0xFA。

鍵盤LED改變ps2_ledchange()函數流程:發送0xED→接收0xFA→發送led_status→接收0xFA。
結語
該驅動程序經Keil uVision2編譯,在AT89C51單片機上運行通過,實現了對PS/2 104鍵盤的支持,以及對字元按鍵大小寫切換,num lock切換,控制鍵及組合按鍵的支持。該程序對其他嵌入式或單片機系統中PS/2鍵盤的應用也有借鑒意義。

閱讀全文

與單片機的鍵盤檢測程序的主要步驟相關的資料

熱點內容
雲伺服器登不上qq 瀏覽:417
程序員四級工程師 瀏覽:715
薄荷app怎麼把體重清零 瀏覽:644
草料二維碼加密怎麼製作 瀏覽:851
04s519隔油池圖集pdf 瀏覽:242
程序員搞測試 瀏覽:552
蘋果app應用隱藏了怎麼辦 瀏覽:660
PDF調取 瀏覽:199
獨立柱加密需要什麼條件 瀏覽:814
php培訓出來找不到工作 瀏覽:106
小程序克隆源碼 瀏覽:448
python整數整除負數 瀏覽:880
遮天用什麼小說app看 瀏覽:645
什麼可以發類似朋友圈的app 瀏覽:495
cmd查找命令行 瀏覽:661
如何申請域名需要虛擬伺服器 瀏覽:497
氣體流量的演算法 瀏覽:634
大族加密狗滑鼠 瀏覽:23
php資料庫登錄界面 瀏覽:657
加密資產巨鯨市場 瀏覽:835