找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2382|回复: 12
收起左侧

C语言if判断怎么不灵,按一次按键LED都全亮了,IF判断无效样的,那问题?

  [复制链接]
ID:475031 发表于 2019-12-28 12:06 | 显示全部楼层 |阅读模式
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();                                                         

}
                                 

}
回复

使用道具 举报

ID:395068 发表于 2019-12-28 12:45 | 显示全部楼层
程序里按键没有松手检测,按下去等于是ID一直在+,速度很快,看上去灯就是一直亮着

评分

参与人数 1黑币 +8 收起 理由
鬼推磨 + 8

查看全部评分

回复

使用道具 举报

ID:332444 发表于 2019-12-28 12:51 | 显示全部楼层
按钮程序没写等待释放语句,因此,按键值会不停增大,某时候会超过8,如果你改判断为>=8试一下肯定不同。
回复

使用道具 举报

ID:437615 发表于 2019-12-28 12:59 | 显示全部楼层
去抖的时间太短,没有松手检测,没有后沿去抖
回复

使用道具 举报

ID:395068 发表于 2019-12-28 13:07 | 显示全部楼层
而且你的灯点亮后,也没关掉
回复

使用道具 举报

ID:475031 发表于 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;
}
}

我硬是搞的怀疑人生了,
的确是你说的这个问题。我增加按键松手检测,就好使了,谢谢你指导。。
回复

使用道具 举报

ID:394424 发表于 2019-12-28 13:24 | 显示全部楼层
按键检测不建议你用delay做  你去看看别人怎么做的  ,  按键触发后 又可能一直在触发,你要控制好条件,是在按下去触发还是松手触发,还是一直按着触发
回复

使用道具 举报

ID:395068 发表于 2019-12-28 13:38 | 显示全部楼层
166864646883 发表于 2019-12-28 12:45
程序里按键没有松手检测,按下去等于是ID一直在+,速度很快,看上去灯就是一直亮着

而且你的灯打开之后就没有关掉了,所以肯定是一直亮着
回复

使用道具 举报

ID:481073 发表于 2019-12-28 14:32 | 显示全部楼层
代码没有写好,放到死循环里面了,建议用一个标志位来进行判断,这样是达不到按键的效果的,死循环里面肯定会一直增加的。
回复

使用道具 举报

ID:676031 发表于 2019-12-28 14:59 | 显示全部楼层
在if检测按键后面加一个松手检测,,也就是用while一直循环k1==0;当k1==1表示松手跳出while
回复

使用道具 举报

ID:676596 发表于 2019-12-29 14:15 | 显示全部楼层
没有去抖动吧,设置一个延时去抖动就行了
回复

使用道具 举报

ID:130230 发表于 2019-12-30 16:46 | 显示全部楼层
没有抬起检测。
回复

使用道具 举报

ID:677934 发表于 2019-12-31 13:36 | 显示全部楼层
你加完之后要再检测一遍是否还是高电平,不是就停止
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表