|
摁鍵掃描是很基礎(chǔ)的知識(shí)點(diǎn),摁鍵掃描通俗的來(lái)說(shuō)就是在串口輸出高低電平,然后當(dāng)有摁鍵摁下時(shí)便會(huì)引起電平的變化,我們只需將變化的電平進(jìn)行記錄和組合便可以知曉具體是那一格摁鍵摁下。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (25.39 KB, 下載次數(shù): 79)
下載附件
2021-7-16 17:10 上傳
單片機(jī)源程序如下:
- #include <reg52.H>
- #define u8 unsigned char
- #define KEY P3 //定義變量,方便以后鍵盤(pán)接到其他的端口后,修改這里就行了,下面的程序不用再修改
- u8 num1,i,num2;
- u8 code keycode[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
- void delay(long i){while(i--);}
-
- void main(void)
- {
- KEY=0x0f;//初始狀態(tài),高位列,低電平;低位行,高電平
- while(1)
- {
- if(KEY!=0x0f)//如果有按鍵按下,則KEY肯定不是原來(lái)的0x0f
- {
- delay(2000);//延時(shí)20毫秒,以防按鍵的彈簧上下振蕩,造成按下的假象
- if(KEY!=0x0f)num1=KEY;//的確是按下了,獲取此時(shí)狀態(tài),高位均為0,低位有1位不是1
- KEY=0xf0;//KEY輸出0xf0
- delay(2000);//延時(shí)20毫秒,以防按鍵的彈簧上下振蕩,造成按下的假象
- if(KEY!=0xf0)num2=KEY;
- //for循環(huán)keycode數(shù)組檢測(cè) break
- for(i=0;;i++)
- {
- if((num1|num2)==keycode[i]) break;
- }
- KEY=0x0f;//KEY輸出0x0f,恢復(fù)初始狀態(tài)
- while(KEY!=0x0f);//如果還在按下,等待放手
- P2=i;//P2口輸出給BCD數(shù)碼管
- }
- }
- }
復(fù)制代碼
仿真代碼資料51hei提供下載(用winrar解壓):
矩陣鍵盤(pán)程序.rar
(66.73 KB, 下載次數(shù): 60)
2021-7-16 15:29 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|