|
給你一個(gè)4*4矩陣按鍵示例,端口設(shè)置為準(zhǔn)雙向模式。有無(wú)外置上拉電阻無(wú)所謂。程序放在主函數(shù)里查詢。key初值為0,鍵值輸出1~16,使用后可以清0.
void keyscan() //按鍵掃描程序
{
static bit sign=0; //按鍵狀態(tài)標(biāo)志
static int count=0; //消抖計(jì)數(shù)變量
unsigned char temp=0; //臨時(shí)變量
P1=0xf0; //賦值P1 1111 0000
if(P1!=0xf0) //檢測(cè)有按鍵按下
{
count++; //消抖計(jì)數(shù)
if(count>=100 && sign==0)//根據(jù)主程序查詢周期調(diào)整count大小,約10~20ms防抖即可
{
sign=1; //按鍵狀態(tài)標(biāo)志置1
temp=P1; //保存P1值xxxx 0000,x為0或1
temp|=0x0f; //保存temp按位或0x0f值xxxx 1111
P1=temp; //賦值P1 xxxx 1111
switch(P1)
{
case 0xee: key= 1; break;
case 0xde: key= 2; break;
case 0xbe: key= 3; break;
case 0x7e: key= 4; break;
case 0xed: key= 5; break;
case 0xdd: key= 6; break;
case 0xbd: key= 7; break;
case 0x7d: key= 8; break;
case 0xeb: key= 9; break;
case 0xdb: key=10; break;
case 0xbb: key=11; break;
case 0x7b: key=12; break;
case 0xe7: key=13; break;
case 0xd7: key=14; break;
case 0xb7: key=15; break;
case 0x77: key=16; break;
}
}
}
else //鍵抬起
{
sign=0; //按鍵狀態(tài)標(biāo)志清0
count=0; //消抖計(jì)數(shù)清0
}
} |
|