單片機(jī)--矩陣鍵盤模塊(C51)
#include <
intrins.h>//包含crol移位子函數(shù)的頭文件本文引用地址:http://m.butianyuan.cn/article/201611/319593.htm#define uchar unsigned char
#defind uintunsigned int
uchar key_value=0x19;
uchar temp,a;
uchar keyboard()
{
uchari,t=4;
P2=0xFF;//P2口寫1
a=0x7F;//p_value賦初始值
i=1;
while(t--)
{
a=_crol_(a,1);//循環(huán)左移一位,檢測下一行
key_scan();
i++;
if(i==5){ i=1; a=0x7f;}
}
returnkey_value;
}
void key_scan()
{
P2=a;//P2.0置零
temp=P2; //讀P2口的值
temp=temp&0xF0;//取高四位,都得用temp,即temp=p2,temp=temp&0xf0;
while(temp!=0xF0)//如果高四位不全為0,則有鍵下
{
delay(5);//延時(shí)消抖
while(temp!=0xF0)//再讀一次,如果高四位還是不全為0,真的有鍵按下了
{
temp=P2;//讀P2口的值給temp
switch(temp)
{
case0xEE:key_value=0; break;
case0xDE:key_value=1;break;
case0xBE:key_value=2;break;
case0x7E:key_value=3;break;
case0xED:key_value=4;break;
case0xDD:key_value=5;break;
case0xBD:key_value=6;break;
case0x7D:key_value=7;break;
case0xEB:key_value=8;break;
case0xDB:key_value=9;break;
case0xBB:key_value=10; break;
case0x7B:key_value=11; break;
case0xE7:key_value=12; break;
case0xD7:key_value=13; break;
case0xB7:key_value=14; break;
case0x77:key_value=15; break;
}
while(temp!=0xf0)//松手檢測
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
void delay(uint z)
{
uintm,n;
for(m=z;m>0;m--)
for(n=78;n>0;n--);
}?
評論