永发信息网

键盘输入哪里错了,各位大哥帮我看看

答案:3  悬赏:10  手机版
解决时间 2021-05-12 06:07
  • 提问者网友:酱爆肉
  • 2021-05-11 10:44

各位大哥帮我看看(我有时动作稍微慢些去按键,数码管就没反映。有时实验板一通电马上按下键后,数码管显示,得马上再去按第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--);
}

最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-05-11 10:56

SORRY , 没啥时间, 简单的说下吧! 看你的情况可能是 检测按键的时候没有 判断按键是否松开。 或者是你的 去抖动时间 正确与否。 建议你去网上看看那些正确的代码 从中吸取点 经验。

全部回答
  • 1楼网友:北城痞子
  • 2021-05-11 12:27

同志,把你的主函数main()里的dula=1;
P0=0;
dula=0;
wela=1;
P0=0xfe;
wela=0;

放到下面的while(1)的函数体中,
如下所示,再试一下应该已经解决了,我没有你的仿真图没法仿真:

#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() {

while(1) { dula=1; P0=0; dula=0; wela=1; P0=0xfe; wela=0; 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--); }

  • 2楼网友:舊物识亽
  • 2021-05-11 12:09
while(temp!=0xf0)//是否确实有键按下 下面的大括号是到那里的~应该是这里面的出问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯