|
矩陣鍵盤(pán)1-F,使用2位數(shù)碼管,實(shí)現(xiàn)連續(xù)的2位數(shù)的輸入,即按下第一個(gè)按鍵個(gè)位數(shù),按下第二個(gè)按鍵為十位數(shù)。
附件里面包含源代碼和proteus仿真工程文件,請(qǐng)大家多多指教!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (112.49 KB, 下載次數(shù): 24)
下載附件
2022-12-7 23:51 上傳
51hei圖片20221207222941.png (185.49 KB, 下載次數(shù): 30)
下載附件
2022-12-7 22:30 上傳
單片機(jī)源程序如下:
- #include "reg52.h"
- typedef unsigned int u16; //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
- typedef unsigned char u8;
- #define KEY_MATRIX_PORT P2 //使用宏定義矩陣按鍵控制口
- #define SMG_A_DP_PORT P1 //使用宏定義數(shù)碼管段碼口
- void Dispaly();
- void delay(u16 ms);
- u8 key_matrix_ranks_scan(void);
- u8 DATE[2];
- //共陰極數(shù)碼管顯示0~F的段碼數(shù)據(jù)
- u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
-
- void main()
- {
- u8 key;
- while(1)
- {
- key=key_matrix_ranks_scan(); //判斷按鍵是否按下
- if(key!=0) //若按鍵按下,數(shù)組中每一位數(shù)字向前移動(dòng)一位
- {
- DATE[1]=DATE[0];
- DATE[0]=key-1;
- }
- Dispaly(); //數(shù)碼管顯示
- }
-
- }
- void Dispaly()
- {
- P3=0xFd;SMG_A_DP_PORT=gsmg_code[DATE[0]];delay(1); SMG_A_DP_PORT=0x00;
- P3=0xFe;SMG_A_DP_PORT=gsmg_code[DATE[1]];delay(1); SMG_A_DP_PORT=0x00;
-
- }
- u8 key_matrix_ranks_scan(void)
- {
- u8 key_value=0;
- KEY_MATRIX_PORT=0xf7;//給第一列賦值0,其余全為1
- if(KEY_MATRIX_PORT!=0xf7)//判斷第一列按鍵是否按下
- {
- delay(10);//消抖
- switch(KEY_MATRIX_PORT)//保存第一列按鍵按下后的鍵值
- {
- case 0x77: key_value=1;break;
- case 0xb7: key_value=5;break;
- case 0xd7: key_value=9;break;
- case 0xe7: key_value=13;break;
- }
- }
- while(KEY_MATRIX_PORT!=0xf7);//等待按鍵松開(kāi)
-
- KEY_MATRIX_PORT=0xfb;
- if(KEY_MATRIX_PORT!=0xfb)
- {
- delay(10);//消抖
- switch(KEY_MATRIX_PORT)
- {
- case 0x7b: key_value=2;break;
- case 0xbb: key_value=6;break;
- case 0xdb: key_value=10;break;
- case 0xeb: key_value=14;break;
- }
- }
- while(KEY_MATRIX_PORT!=0xfb);
-
- KEY_MATRIX_PORT=0xfd;
- if(KEY_MATRIX_PORT!=0xfd)
- {
- delay(10);//消抖
- switch(KEY_MATRIX_PORT)
- {
- case 0x7d: key_value=3;break;
- case 0xbd: key_value=7;break;
- case 0xdd: key_value=11;break;
- case 0xed: key_value=15;break;
- }
- }
- while(KEY_MATRIX_PORT!=0xfd);
-
- KEY_MATRIX_PORT=0xfe;
- if(KEY_MATRIX_PORT!=0xfe)
- {
- delay(10);//消抖
- switch(KEY_MATRIX_PORT)
- {
- case 0x7e: key_value=4;break;
- case 0xbe: key_value=8;break;
- case 0xde: key_value=12;break;
- case 0xee: key_value=16;break;
- }
- }
- while(KEY_MATRIX_PORT!=0xfe);
-
- return key_value;
- }
- void delay(u16 ms)//延時(shí)函數(shù)1=1ms
- {
- int p,j;
- for(p=0;p<ms;p++)
- {
- for(j=0;j<110;j++);
- }
- }
復(fù)制代碼
Keil代碼與Proteus7.5 8.13版本的仿真下載(注意:可能不能兼容其他版本 建議用7.5 ;8.13版本打開(kāi)):
矩陣鍵盤(pán)滾動(dòng)顯示.7z
(55.32 KB, 下載次數(shù): 43)
2022-12-7 23:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|