标题:
C语言if判断怎么不灵,按一次按键LED都全亮了,IF判断无效样的,那问题?
[打印本页]
作者:
鬼推磨
时间:
2019-12-28 12:06
标题:
C语言if判断怎么不灵,按一次按键LED都全亮了,IF判断无效样的,那问题?
if判断怎么不灵,按一次按键LED都全亮了,IF判断无效样的,那问题?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int ID=0;
sbit k1=P2^0; //按键1
sbit k2=P2^1; //按键2
sbit LED1=P2^2; //LED1
sbit LED2=P2^3; //LED2
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//------------延时-----------------
void key_control()
{
if(k1==0)
{
delay(5);
if(k1==0)
{
ID=ID+1;//每按一次按键,ID加1
}
}
if(ID==8) //判断ID是不是等于8,是就运行下面,2个LED灯点亮
{
ID=0;
LED1=0;
LED2=0;
}
}
void main()
{
while(1)
{
key_control();
}
}
作者:
166864646883
时间:
2019-12-28 12:45
程序里按键没有松手检测,按下去等于是ID一直在+,速度很快,看上去灯就是一直亮着
作者:
xianfajushi
时间:
2019-12-28 12:51
按钮程序没写等待释放语句,因此,按键值会不停增大,某时候会超过8,如果你改判断为>=8试一下肯定不同。
作者:
zhy123654
时间:
2019-12-28 12:59
去抖的时间太短,没有松手检测,没有后沿去抖
作者:
166864646883
时间:
2019-12-28 13:07
而且你的灯点亮后,也没关掉
作者:
鬼推磨
时间:
2019-12-28 13:20
166864646883 发表于 2019-12-28 12:45
程序里按键没有松手检测,按下去等于是ID一直在+,速度很快,看上去灯就是一直亮着
if(k1==0)//判断按键是不是按下
{
delay(5);
if(k1==0)//再次判断按键是不是按下
{
while(!k1);//等待按键释放
ID=ID+1;
}
}
我硬是搞的怀疑人生了,
的确是你说的这个问题。我增加按键松手检测,就好使了,谢谢你指导。。
作者:
Wprogrammer
时间:
2019-12-28 13:24
按键检测不建议你用delay做 你去看看别人怎么做的 , 按键触发后 又可能一直在触发,你要控制好条件,是在按下去触发还是松手触发,还是一直按着触发
作者:
166864646883
时间:
2019-12-28 13:38
166864646883 发表于 2019-12-28 12:45
程序里按键没有松手检测,按下去等于是ID一直在+,速度很快,看上去灯就是一直亮着
而且你的灯打开之后就没有关掉了,所以肯定是一直亮着
作者:
流星2019
时间:
2019-12-28 14:32
代码没有写好,放到死循环里面了,建议用一个标志位来进行判断,这样是达不到按键的效果的,死循环里面肯定会一直增加的。
作者:
doudou666
时间:
2019-12-28 14:59
在if检测按键后面加一个松手检测,,也就是用while一直循环k1==0;当k1==1表示松手跳出while
作者:
3136247262
时间:
2019-12-29 14:15
没有去抖动吧,设置一个延时去抖动就行了
作者:
jizhongbiao
时间:
2019-12-30 16:46
没有抬起检测。
作者:
ykxdsy
时间:
2019-12-31 13:36
你加完之后要再检测一遍是否还是高电平,不是就停止
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1