标题:
把一个按键设置为长按和短按执行不同的功能单片机程序 求助
[打印本页]
作者:
空着
时间:
2018-9-4 16:12
标题:
把一个按键设置为长按和短按执行不同的功能单片机程序 求助
求助下,我想把一个按键设置为长按和短按执行不同的程序
按键.png
(26.34 KB, 下载次数: 46)
下载附件
2018-9-4 16:11 上传
我想把按键设置成长按和短按具体要怎么改
作者:
空着
时间:
2018-9-4 16:13
由没有谁帮忙指导下,用状态机会不会比较方便
作者:
xshx
时间:
2018-9-4 17:10
延时太长,用定时器吧,计数。
作者:
wulin
时间:
2018-9-4 17:24
看我给坛友的回复
http://www.51hei.com/bbs/dpj-133502-1.html
作者:
HC6800-ES-V2.0
时间:
2018-9-5 08:13
这是我的一个程序:四键八功能,即一键双功能的按键程序。
你可以参考一下:
if (Agoto==1)
{
n=0;
while(Agoto)
{
n++;
Delay10ms(1);
if (n>200)
{
break;
}
}
if (n>30)
{
PWMD();
}
else
{
PU();
}
}
作者:
woshige
时间:
2018-9-5 09:27
状态机亲测好用
作者:
GdSzYi123
时间:
2018-9-5 10:21
建议使用switch语句,虽然占用空间,但是逻辑会很清晰
作者:
GdSzYi123
时间:
2018-9-5 10:23
建议使用switch,这样逻辑很清晰
作者:
人中狼
时间:
2018-9-5 10:48
用定时器判断按键时间的长短,如果用延时的方法的话,只能用短延时,并且不停的检测按键是否释放,同时记录短延时的次数,通过计算短延时的次数来区分短按键和长按键
作者:
ft3939574
时间:
2018-9-5 15:25
用状态机写比较方便,而且不会阻塞CPU/***************************************************************************
* 名 称:Key_ScanIO();
* 功 能:扫描IO口并判断按键事件(前台程序)
* 入口参数:无
* 出口参数:无,键值压入缓冲队列
* 说 明:该函数需要每隔1/16~1/128S调用一次。最好放在定时中断中执行
***************************************************************************/
void Key_ScanIO()
{
P_KEY1=N_KEY1; //将当前KEY1状态保存到前一次状态变量中
N_KEY1=KEY1_IN; //将KEY1状态保存到当前变量中
P_KEY2=N_KEY2;
N_KEY2=KEY2_IN;
P_KEY3=N_KEY3;
N_KEY3=KEY3_IN;
if((P_KEY1!=0)&&(N_KEY1==0)) KEY1_State=PUSH_KEY; //如果两次状态不一样,说明K1被按下了
if((P_KEY2!=0)&&(N_KEY2==0)) Key_InBuff(0x02);
if((P_KEY3!=0)&&(N_KEY3==0)) Key_InBuff(0x04);
}
/***************************************************************************
* 名 称:Key1_Judge();
* 功 能:判断KEY1 长按、短按
* 入口参数:无
* 出口参数:无,键值压入缓冲队列
* 说 明:该函数需要每隔1/16~1/128S调用一次。最好放在定时中断中执行
***************************************************************************/
void Key1_Judge()
{
if(KEY1_State==PUSH_KEY) Key1TimeS++;
else Key1TimeS=0;
switch(KEY1_State)
{
case NOKEY:
{
if(KEY1_IN==0) KEY1_State=PUSH_KEY;
break;
}
case PUSH_KEY:
{
if(KEY1_IN!=0)
{
Key_InBuff(0x01);
KEY1_State=NOKEY;
}
else if(Key1TimeS>32*2)
{
Key_InBuff(LONG_KEY1);
KEY1_State=LONG_PUSH;
}
}
case LONG_PUSH:
{
if(KEY1_IN!=0)
{
KEY1_State=NOKEY;
Key1TimeS=0;
}
break;
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1