|
- #include"reg52.h"
- #define ur unsigned char
- #define ut unsigned int
-
- #include"Seg.h" /* 數(shù)碼管顯示程序 */
- /* 矩陣鍵盤接P2口 */
- ur zhi; /* 按鍵返回的值 */
- void ms(ut x) /* 延時(shí)函數(shù) */
- {
- ur i;
- while(x--)
- for(i=0;i<123;i++);
- }
- void show() /* 顯示新數(shù)字,并左移 */
- {
- ur i;
- for(i=0;i<7;i++)G[i]=G[i+1];
- G[7]=zhi;
- }
-
- void clean() /* 清屏 */
- {
- ur i;
- for(i=0;i<8;i++)G[i]=10;
- }
- ur key() /* 按鍵掃描 */
- {
- ur jz;
- P2=0xf0;
- if(P2!=0xf0)
- {
- jz=P2;ms(5); //消抖
- P2=0x0f;jz=jz|P2; //數(shù)據(jù)合成
- switch(jz) //掃描合成值
- {
- case 0xee:zhi=0;break;
- case 0xde:zhi=1;break;
- case 0xbe:zhi=2;break;
- case 0x7e:zhi=3;break;
- case 0xed:zhi=4;break;
- case 0xdd:zhi=5;break;
- case 0xbd:zhi=6;break;
- case 0x7d:zhi=7;break;
- case 0xeb:zhi=8;break;
- case 0xdb:zhi=9;break;
- case 0xbb:zhi=10;break;
- case 0x7b:zhi=11;break;
- case 0xe7:zhi=12;break;
- case 0xd7:zhi=13;break;
- case 0xb7:zhi=14;break;
- case 0x77:zhi=15;break;
- default:return 16; //按鍵按下超過兩個(gè)則跳出
- }
- if(zhi<15)return 1; //按下數(shù)字鍵
- else if(zhi==15)return 2; //按下清屏鍵
- }
- return 16;
- }
- void main()
- {
- Init();
- while(1)
- {
- switch(key())
- {
- case 1: show();
- while(P2!=0x0f); //當(dāng)按下松開則跳出
- break;
- case 2: clean();
- while(P2!=0x0f); //當(dāng)按下松開則跳出
- break;
- }
- }
- }
復(fù)制代碼
|
|