标题: 单片机检测按键问题???求大神指教,急急急,在线等 [打印本页]

作者: qq363746379    时间: 2015-6-9 18:50
标题: 单片机检测按键问题???求大神指教,急急急,在线等
同时按下两个按键气缸下压,key1和key2是两个按键按下所置的标志,同时按下key1和key2气缸下压,任意按下一个气缸复位,但是实际调试时同时按下两个开关,气缸没有反应,有时要连续按下几次气缸才会下压。求大神指导一下是什么问题,谢谢。sbit Wac=P1^0;
sbit key1=p0^0;
sbit key1=p0^1;
unsigned char step=0;

if((key1==1)&&(key2==1))
{
key1=0;
key2=0;
if(step==0)
{
step=1;
Wac=0;
}
}


if((key1==1)||(key2==1))
{
key1=0;
key2=0;

if(step==1)
{
Wac=1;
step=0;
}
}

作者: xtitxjg    时间: 2015-6-9 21:54
逻辑太混乱。表示看不懂
作者: 木木de    时间: 2015-6-9 23:31
本帖最后由 905377346 于 2015-6-9 23:33 编辑

你这里没有做按键检查和松手检测。正因为你没有这样做  所以你的程序可能多次进入你的if()里面  所以你当然看不到正确结果
一般案件检测的步骤:
if(按键按下)
{
          delay();
          if(按键按下)//这时候认为是有按键按下,之前有可能是按键抖动产生的。并不是真的按下
          {
              .......
            
            while(等待按键松开);//松手检测

           }   
}


这是按键检查的子程序
把其中的汉字部分  换成你的相应按键判断

作者: 电子爱好者life    时间: 2015-6-10 08:13
不知道你的电路怎么的!单片机复位后P0-P3都是0xff,要想用判断有高电平表示按下,那么你必须的在每次按键检测前把P0^0和P0^1设置为0,这样检测1才是有效的,否则一直在检测!
作者: dpj555    时间: 2015-6-10 20:01
本帖最后由 dpj555 于 2015-6-10 20:02 编辑

给你一段程序做参考:
/******************************************************************
函数功能:键盘扫描
********************************************************************/
void key_scan(void)
{
     P1=0xf0;                                    //将P1口高4位置高电平"1"
        if((P1&0xf0)!=0xf0)                //有键按下
          {
                delay100ms();                  //延时100ms再检测
           if((P1&0xf0)!=0xf0)            //确实有键按下
          {
              if( key_add==0)             //如果是key_add键按下
                        gewei++;             //个位加1
                        count++;                 
                  if(key_dec==0)           //如果是key_dec键按下
                        shiwei--;              //十位减1
                        count--;
                }
       }
}
作者: 血一    时间: 2015-7-4 10:57
没看懂
作者: lijinglei234420    时间: 2015-7-7 14:53
你这两个if语句一样的有什么区别吗




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