|
摁鍵掃描是很基礎(chǔ)的知識點,摁鍵掃描通俗的來說就是在串口輸出高低電平,然后當(dāng)有摁鍵摁下時便會引起電平的變化,我們只需將變化的電平進行記錄和組合便可以知曉具體是那一格摁鍵摁下。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include <reg52.H>
- #define u8 unsigned char
- #define KEY P3 //定義變量,方便以后鍵盤接到其他的端口后,修改這里就行了,下面的程序不用再修改
- 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肯定不是原來的0x0f
- {
- delay(2000);//延時20毫秒,以防按鍵的彈簧上下振蕩,造成按下的假象
- if(KEY!=0x0f)num1=KEY;//的確是按下了,獲取此時狀態(tài),高位均為0,低位有1位不是1
- KEY=0xf0;//KEY輸出0xf0
- delay(2000);//延時20毫秒,以防按鍵的彈簧上下振蕩,造成按下的假象
- if(KEY!=0xf0)num2=KEY;
- //for循環(huán)keycode數(shù)組檢測 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解壓):
矩陣鍵盤程序.rar
(66.73 KB, 下載次數(shù): 60)
2021-7-16 15:29 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|