不能给你程序,只能给你思路。
设置定时器(建设100ms),在设置一个变量x,(100ms自加1)
在主循环中判断按键是否按下,并判断x的值大小;
假设 x每隔100ms加1
y是按键状态(为1表示按下,为0 表示未按)
z记录按键状态的(初始值0)
b 记录长安 a记录短按
eg:
if(!z)
{
if(y)
{
a=1;
z=1;
}
}
else if(x>10)// 1s
{
b=1;
}
设置定时器100毫秒中断a值自家1
设置按键值位变量k
设置按键端口k1
if (!k1)按键按下
{
delay(20);去痘
if (!k1)确认按下
a=0;计时数清0 确保长按时间精准
while(!k1)按钮没释放 死循环检测按下时间
if(a>30)达到3000毫秒
k=!k按键值取反 没按前为0 长按3秒后为1 短案无效
}
可以参考下:
网页链接