數碼管動態顯示加矩陣按鍵掃描
實現4位一體數碼管的動態顯示以及4*4矩陣鍵盤的掃描
其中0~F共16個按鍵,A,B分別為按下清楚所有輸入和清楚最后一位輸入,其余按鍵按下顯示鍵值。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.81 KB, 下載次數: 72)
下載附件
2018-5-3 17:58 上傳
0.jpg (29.63 KB, 下載次數: 51)
下載附件
2018-5-3 17:57 上傳
單片機源程序如下:
- #include<reg51.h>
- #define KEYP P2
- #define SEG7P P0
- unsigned char code TAB[17]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
- unsigned char disp[4]= {0x40,0x40,0x40,0x40};
- unsigned char scan[4]= {0xef,0xdf,0xbf,0x7f};
- void delay(int);//1ms
- void scanner(void);
- main() {
- while(1) {
- scanner();
- }
- }
- void delay(int x) {
- int i,j;
- for(i=0; i<x; i++)
- for(j=0;j<120;j++);
- }
- void scanner(void) {
- unsigned char col,row,dig;
- unsigned char rowkey,kcode;
- for(col=0; col<4; col++)
- {
- KEYP=scan[col];
- SEG7P=disp[col];
- rowkey=~KEYP&0x0f;
- if(rowkey!=0)
- {
- if(rowkey==0x01) row=0;
- else if(rowkey==0x02) row=1;
- else if(rowkey==0x04) row=2;
- else if(rowkey==0x08) row=3;
- kcode=4*col+row;
-
-
- if(kcode!=10&&kcode!=11){
- for(dig=3; dig>0; dig--)
- disp[dig]=disp[dig-1];
- disp[0]=TAB[kcode];
- }
-
- if(kcode==11){
- for(dig=0; dig<3; dig++)
- disp[dig]=disp[dig++];
- disp[0]=0x40;
- }
-
- while(rowkey!=0)
- rowkey=~KEYP&0x0f;
- }
-
- if(kcode==10){
- int k;
- for(k=0;k<4;k++){
- disp[k]=0x40;
- }
- }
-
-
-
- delay(4);
- }
- }
復制代碼
所有資料51hei提供下載:
數碼管動態顯示加矩陣按鍵掃描.zip
(17.2 KB, 下載次數: 36)
2018-5-3 12:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|