标题: 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