
//=========按键扫描================//
void keyscan()
{ P2=0XFF //读口先置1
row0=0 //扫描第0行
kbuf=P2
kbuf=(kbuf&0X0F)^0X0F //读k3~0,并取正逻辑
lastkey1=kbuf
P2=0XFF//。。。。。。。。。。
row1=0 //扫描第1行
kbuf=P2
kbuf=(kbuf&0X0F)^0X0F
lastkey1=(kbuf<<4)+lastkey1//读k4~7,取正逻辑,lastkey1高四位k7~4,低四位k3~0
P2=0XFF //。。。。。。。。
row2=0 //扫描第2行
kbuf=P2
kbuf=(kbuf&0X0F)^0X0F
lastkey2=kbuf
P2=0XFF //。。。。。。。。
P1=P1|0XC0 //读独立按键,先置1
kbuf=P1
kbuf=(kbuf&0XC0)^0XC0 //独立按键取正逻辑
lastkey2=kbuf+lastkey2 //lastkey2高两位sw1,sw2,低四位K11~8
if((lastkey2!=key2)||(lastkey1!=key1)) //若键状态变化
{if(keycnt--!=0) //没到延时时间
{lastkey1=key1 //放弃不稳定键
lastkey2=key2
}
}
else //键状态没变
keycnt=0X05 //去抖延时器加载初值
ekey1=(key1^lastkey1)&lastkey1//键前沿提取 这边是键刚按下去的,可以改成键后沿,就是键松开的。
key1=lastkey1 //用新键状态
ekey2=(key2^lastkey2)&lastkey2
key2=lastkey2
} /**/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)