你要放到“死循袭备环”中不断扫描。他的原理图一般是这样的
以第一个按键为例,当你按下时I/O口读到的数据就不是0x0f了。好吧你最开始的赋值错了。你要用0xee,0xde检测的话你应该给0xfe。拍梁毁每四个按键是一组。我这有一个我做密码锁的程序你参考一下。
void key()
{
P3=0xfe
if(P3!=0xfe)
{
time(50)
if(P3!=0xfe)
{
switch(P3)
{
case 0xee:num=1,cs++
break
case 0xde:num=2,cs++
break
case 0xbe:num=3,cs++
break
case 0x7e:num=4,cs++
break
}
渣悉 }
while(P3!=0xfe)
}
P3=0xfd
if(P3!=0xfd)
{
time(50)
if(P3!=0xfd)
{
switch(P3)
{
case 0xed:num=5,cs++
break
case 0xdd:num=6,cs++
break
case 0xbd:num=7,cs++
break
case 0x7d:num=8,cs++
break
}
}
while(P3!=0xfd)
}
P3=0xfb
if(P3!=0xfb)
{
time(50)
if(P3!=0xfb)
{
switch(P3)
{
case 0xeb:num=9,cs++
break
case 0xdb:num=0,cs++
break
case 0xbb:cs++
break
case 0x7b:num=10,cs=0,a=b=c=d=e=f=10,ply=1
break
}
}
while(P3!=0xfb)
}
}
unsignedchar
KeyScan(void)
//键盘扫描函数,使用行列逐级扫描法{
unsigned
char
Val
KeyPort=0xf0//这句其实就是整体看看是否有键按下,四行全送0,有键按下,高四位肯定含简则不为全1
if(KeyPort!=0xf0)//表示有按键按下
{
DelayMs(10)
//去抖
if(KeyPort!=0xf0)
{
//表谈棚示有按键按下
KeyPort=0xfe
//检测第一行
if(KeyPort!=0xfe)
{
Val=KeyPort&0xf0
Val+=0x0e
//相当于检测到第一行有键按下,键值=列(高四位)咐姿+行(低四位)
while(KeyPort!=0xfe)
DelayMs(10)
//去抖
while(KeyPort!=0xfe)
return
Val
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)