|
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
- 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
- void delay1ms(uchar x)
- {
- uint i,j;
- for(i = x;i > 0;i --)
- for(j = 110;j > 0;j --);
- }
- void display(uchar num)
- {
- P0 = ~table[num];
- }
- /*
- *鍵盤掃描程序
- */
- void keyscanf()
- {
- uchar temp, key;
- P2 = 0Xef;
- temp = P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- delay1ms(5);//去抖動
- temp=P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- temp = P2;
- switch(temp)//此時按鍵已經定位到第一行了
- {
- case 0xe7: key = 0; break;//此時代表第一行的第一個按鍵按下,即11101110
- case 0xeb: key = 1; break;
- case 0xed: key = 2; break;
- case 0xee: key = 3; break;
- }
- while(temp != 0x0f)//按鍵松開
- {
- temp = P2;
- temp = temp & 0x0f;
- }
- display(key);
- }
- }
- P2 = 0Xdf;
- temp = P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- delay1ms(5);//去抖動
- temp = P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- temp = P2;
- switch(temp)//此時按鍵已經定位到第er行了
- {
- case 0xd7: key = 4; break;//此時代表第一行的第一個按鍵按下,即11011110
- case 0xdb: key = 5; break;
- case 0xdd: key = 6; break;
- case 0xde: key = 7; break;
- }
- while(temp != 0x0f)//按鍵松開
- {
- temp = P2;
- temp = temp & 0x0f;
- }
- display(key);
- }
- }
- P2 = 0Xbf;
- temp = P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- delay1ms(5);//去抖動
- temp=P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- temp = P2;
- switch(temp)//此時按鍵已經定位到第san行了
- {
- case 0xb7: key = 8; break;//此時代表第一行的第一個按鍵按下,即10111110
- case 0xbb: key = 9; break;
- case 0xbd: key = 10; break;
- case 0xbe: key = 11; break;
- }
- while(temp != 0x0f)//按鍵松開
- {
- temp = P2;
- temp = temp & 0x0f;
- }
- display(key);
- }
- }
- P2 = 0X7f;
- temp = P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- delay1ms(5);//去抖動
- temp=P2;
- temp = temp & 0x0f;
- if(temp != 0x0f)
- {
- temp = P2;
- switch(temp)//
- {
- case 0x77: key = 12; break;//此時代表第一行的第一個按鍵按下,即01111110
- case 0x7b: key = 13; break;
- case 0x7d: key = 14; break;
- case 0x7f: key = 15; break;
- }
- while(temp != 0x0f)//按鍵松開
- {
- temp = P2;
- temp = temp & 0x0f;
- }
- display(key);
- }
- }
- }
- void main()
- {
- P0 = 0xff;
- while(1)
- {
- keyscanf();
- }
- }
復制代碼
|
-
-
數碼管顯示字.zip
2017-4-17 11:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
39.64 KB, 下載次數: 8, 下載積分: 黑幣 -5
|