标题:
单片机检测按键问题???求大神指教,急急急,在线等
[打印本页]
作者:
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