标题: 单片机松手检测程序有问题吗 [打印本页]

作者: 我是caiji    时间: 2020-5-2 17:13
标题: 单片机松手检测程序有问题吗
问一下松手检测不应该是if(k3!=0)和while(k3!=0)吗,为什么别人这样写Proteus仿真都没问题的
if(K3==0)     //K3按下
{
    while(K3==0);
     bb++;
    point_lcd(0x04,bb);
          if(K3==0)    //松手检测
         {
           while(K3==0);
           delay(20);
          }
}
else if(K4==0)    //k4按下

{
    while(K4==0);
    bb=bb+2;
    point_lcd(0x04,bb);
           if(K4==0)     //松手检测
          {
          while(K4==0);
          delay(20);
           }
}

作者: xianfajushi    时间: 2020-5-2 18:53
按键按下值为0就写==0若电路按键按下为1就写==1进行判断是否释放。
作者: xxpp2011    时间: 2020-5-2 19:31
看电路接法吧,有按键按下低电平也有按键按下高电平的。
作者: TTQ001    时间: 2020-5-2 21:14
用于检查开或关状态的值取决于按键的连接类型,例如 按下以接地(k == 0或k!= 1)或按下以连接电源(k == 1或k!= 0)。
作者: 我是caiji    时间: 2020-5-2 23:24
xianfajushi 发表于 2020-5-2 18:53
按键按下值为0就写==0若电路按键按下为1就写==1进行判断是否释放。

他这个是按下为0,我是不理解释放不就是1了吗,为什么是==0判断呢,松手不应该检测是不是为1吗
作者: hantu    时间: 2020-5-3 01:07
你的代码错了,应该是下面这样子:

if(K3==0)     //K3按下
{
    //while(K3==0);  // (这里是错的,不能要)
    //(这里还缺了个延时消抖,你得加上)
     bb++;                   //(这行最好是移到下个if的花括号里面)
    point_lcd(0x04,bb); //(还有这行也是)
          if(K3==0)    //松手检测 (这里可不是松手检测,这是确认按键是否真的按下了)
         {
           while(K3==0);  // (这里才是松手检测!)
           delay(20);
          }
}

作者: newsunnet    时间: 2020-5-3 02:45
有一些问题
作者: xingningjie    时间: 2020-5-3 08:27
键按下值为0就写==0若电路按键按下为1就写==1进行判断是否释放。看电路接法吧,有按键按下低电平也有按键按下高电平的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1