|
都是Delay惹的禍,你把按鍵掃描函數(shù)改一下就能解決。示例如下:
- #include <reg52.h>
- unsigned char KeyNumber;
- unsigned char MatrixKey()
- {
- static bit sign=0;//按鍵狀態(tài)標(biāo)志
- static unsigned int count;//消抖計(jì)數(shù)
- P1=0x0f;
- if(P1!=0x0f)
- {
- if(++count>=380 && sign==0)//count計(jì)數(shù)值約等于10ms/查詢(xún)周期
- {
- sign=1;
- switch(P1)
- {
- case 0x07: KeyNumber=1;break;
- case 0x0b: KeyNumber=5;break;
- case 0x0d: KeyNumber=9;break;
- case 0x0e: KeyNumber=13;break;
- }
- P1=0xF0;
- switch(P1)
- {
- case 0x70: KeyNumber=KeyNumber+3;break;
- case 0xb0: KeyNumber=KeyNumber+2;break;
- case 0xd0: KeyNumber=KeyNumber+1;break;
- case 0xe0: KeyNumber=KeyNumber+0;break;
- }
- return KeyNumber;
- }
- }
- else
- {
- count=0;
- sign=0;
- return 0;
- }
- }
- void key_service(unsigned char k)
- {
- switch(k)
- {
- case 1: /*任務(wù)1*/ KeyNumber=0;break;
- case 2: /*任務(wù)2*/ KeyNumber=0;break;
- case 3: /*任務(wù)3*/ KeyNumber=0;break;
- case 4: /*任務(wù)4*/ KeyNumber=0;break;
- case 5: /*任務(wù)5*/ KeyNumber=0;break;
- case 6: /*任務(wù)6*/ KeyNumber=0;break;
- case 7: /*任務(wù)7*/ KeyNumber=0;break;
- case 8: /*任務(wù)8*/ KeyNumber=0;break;
- case 9: /*任務(wù)9*/ KeyNumber=0;break;
- case 10: /*任務(wù)10*/ KeyNumber=0;break;
- case 11: /*任務(wù)11*/ KeyNumber=0;break;
- case 12: /*任務(wù)12*/ KeyNumber=0;break;
- case 13: /*任務(wù)13*/ KeyNumber=0;break;
- case 14: /*任務(wù)14*/ KeyNumber=0;break;
- case 15: /*任務(wù)15*/ KeyNumber=0;break;
- case 16: /*任務(wù)16*/ KeyNumber=0;break;
- }
- }
- void main()
- {
- while(1)
- {
- key_service(MatrixKey());
- }
- }
復(fù)制代碼 |
|