- 打卡等级:常住居民III
- 打卡总天数:106
- 最近打卡:2025-05-01 09:11:48
已绑定手机
中级会员
- 积分
- 315
|
自己适用编码器,只有一个按键。做了一个短按和长按程序。
首先这个程序放到中断程序中执行(中断定时1毫秒,自己根据定时时间可以调整长按时间)
bit KEYflag,KEYshort_flag,KEYlong_flag; //按键按下标志
u16 KEYdelay;//按键检测延时时间
u8 KEY_set;
void keyscan()
{
if(!KEY) // 按键按下
{
if(KEYflag == 0) // 当按下标志为0时(系统启动默认就是0)
{
KEYdelay++;
KEY_set = 1;
if(KEYdelay>=2000) // 按下时间大于4秒以上表示 长按
{
KEYflag = 1; //防止再次进入此中断循环。
KEYlong_flag = 1;
KEYdelay=0;
KEY_set = 0;
}
}
}
if(KEY) // 按键松开以后根据按键时间判断按键状态
{
if(KEY_set)
{
if(KEYdelay<=20) //无效 相当于去抖动
{
KEYflag = 0;
KEYdelay = 0;
KEYlong_flag = 0;
KEYshort_flag =0;
KEY_set = 0;
}
if(KEYdelay>40 && KEYdelay<2000) //短按
{
KEYflag = 0;
KEYdelay = 0;
KEY_set = 0;
KEYshort_flag =1; //根据这个标志 执行自己的程序 执行完后将此标志归0
}
}
else //没有按键动作
{
KEYflag = 0;
KEYdelay = 0;
KEYlong_flag = 0;
KEYshort_flag =0;
KEY_set = 0;
}
}
}
if(KEYshort_flag) { KEYshort_flag = 0; 执行自己的短按程序 }
if(KEYlong_flag ){KEYlong_flag = 0; 执行自己的长按程序 }
|
|