
{ // while(P0 != f7) 不就可以了么?
m = P0 //这不就表示已经回到初始值,按键已经起来了么?
m = m &0xf0
}
----
while(P0 != f7)//这仅仅是检测一个按键。
如果还有其它按键按下,还是应该等待一下。
最好是:
while(P0 &0xf0 != 0xf0)//这就可以代替上面的四行,还能节省一个变量。
----
原来的程序,共有四个部分,连续的、依次执行。
其实,如果在第一个部分,就检测到了按键,后面的三个部分,就不应该再执行了。
判断按键释放的程序段,在每个部分都有。
其实,在最后,用上一个,即可。
他的这个程序,在逻辑上,是有错的,不用细看了。
推荐使用线反转法:#include<reg52.h>
#include<intrins.h> //反转法控制按键
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6
sbit wela=P2^7
uchar a,b,c,d,keya,keyb
uint e
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}
void delay(uint x) //延时
{
uint i,j
for(i=xi>0i--)
for(j=110j>0j--)
}
void shumaguan(uchar a) //数码管
{
wela=1
P0=0xc0
wela=0
dula=1
P0=table[a] //a在键盘函数引用
dula=0
delay(10)
}
void liushuideng() //流水灯
{
b=0xc9
while(e>=0&&e<=80)
{
P1=b
delay(50)
b=_crol_(b,1)
e++
if(e==80)
b=0xff
}
}
uchar key() //有返回值的按键函数
{
P3=0x0f //定行
P3=P3&0x0f //判断哪一行有被按下的键
if(P3!=0x0f)
{
delay(10)
P3=0x0f
P3=P3&0x0f
if(P3!=0x0f)
{
c=P3&0x0f
P3=0xf0
d=P3&0xf0 //判断列 ,行反转
return(c+d)
}
}
return 0xff
}
void main()
{
while(1)
{
keyb=key()
switch(keyb)
{
case 0xee:keya=0while(key()!=0xff)shumaguan(keya)break //判断按键
case 0xed:keya=1while(key()!=0xff)shumaguan(keya)break
case 0xeb:keya=2while(key()!=0xff)shumaguan(keya)break
case 0xe7:keya=3while(key()!=0xff)shumaguan(keya)break
case 0xde:keya=4while(key()!=0xff)shumaguan(keya)break
case 0xdd:keya=5while(key()!=0xff)shumaguan(keya)break
case 0xdb:keya=6while(key()!=0xff)shumaguan(keya)break
case 0xd7:keya=7while(key()!=0xff)shumaguan(keya)break
case 0xbe:keya=8while(key()!=0xff)shumaguan(keya)break
case 0xbd:keya=9while(key()!=0xff)shumaguan(keya)break
case 0xbb:keya=10while(key()!=0xff)shumaguan(keya)break
case 0xb7:keya=11while(key()!=0xff)shumaguan(keya)break
case 0x7e:keya=12while(key()!=0xff)shumaguan(keya)break
case 0x7d:keya=13while(key()!=0xff)shumaguan(keya)break
case 0x7b:keya=14while(key()!=0xff)shumaguan(keya)break
case 0x77:keya=15while(key()!=0xff)shumaguan(keya)delay(1000)liushuideng()e=0break
default:break
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)