标题:
单片机状态检测程序示例
[打印本页]
作者:
lincheng15
时间:
2021-2-25 19:02
标题:
单片机状态检测程序示例
基本每个程序都会用到状态检测,这里分享一下个人的处理方式,例如充电状态检测
void ChargeScanf(void)
{
unsigned char state=0;//当前状态缓存
static unsigned char statebk; //上一次状态存储
static unsigned char statecnt;//稳定计算
state = CHECK_PIN;
if(state == statebk){
if(statecnt < 10){//10次消抖
statecnt++;//消抖时间不够的话继续累积
}else{
//消抖完成,记录状态
if(state){
//正在充电,可以用一个全局标志位存
}else{
//停止充电
}
}
}else{
statebk = state;//状态切换,保存当前状态,留下次进入函数时判断用
statecnt = 0;//消抖计数清零
}
}
此方法我已经用了好多年了,挺好用的,可以避免一些误触发
也可以同时检测两个充电状态脚
例如
state = CHECK_PIN1 ? 0 :1;
state |= CHECK_PIN2 ? 0 :2;
这样就可以检测出充电中 充电拔除,充电完成,几种状态
因为程序消抖是以次数去计算,所以,此函数放到1MS任务或者2MS任务里面扫描,消抖时间就是10MS-20MS效果比较理想
这个思路也可以用于按键扫描,这种方式不长时间占用MCU资源,适合应用于实际项目应用,稍微改动一下就可以检测独立按键单击,双击,连续N击,长按,或者多个按键组合键检测
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1