各位大哥帮我看看(我有时动作稍微慢些去按键,数码管就没反映。有时实验板一通电马上按下键后,数码管显示,得马上再去按第2次键,不然动作慢了,按了就没反映了)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num,temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
sbit dula=P2^6;
sbit wela=P2^7;
void delay(uint z);
void main()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xfe;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;//P3口高4位分别对应键1,2,3,4,当键按住时,
while(temp!=0xf0)//当键按住时,原先temp&0xf0就不等于0xf0了,就执行while语句了
{
delay(10);//延时,消除抖动
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)//是否确实有键按下
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}