temp=P3//读回P3口的状态
temp=temp&0xf0//temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5)
temp=P3
temp=temp&0xf0//这三句跟上面重复,功能是软件消抖
while(temp!=0xf0) //延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3
switch(temp).....
我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。
有独立键盘和距阵键盘的 独立键盘的很简单我就不写了 距阵的我给你写一个//键盘扫描
uchar Keys_Scan()
{
uchar sCode,kCode,i,k
//低4 位置0,放入4 行
P1=0xf0
//若高4 位出现0,则有键按下
if((P1&0xf0)!=0xf0)
{
DelayMS(2)
if((P1&0xf0)!=0xf0)
{
sCode=0xfe//行扫描码初值
for(k=0k<4k++) //对4 行分别进行扫描
{
P1=sCode
if((P1&0xf0)!=0xf0)
{
kCode=~P1
for(i=0i<16i++) //查表得到按键序号并返回
if(kCode==KeyCodeTable[i])
return(i)
}
else
sCode=_crol_(sCode,1)
}
}
}
return(-1)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)