标题: 单片机状态检测程序示例 [打印本页]

作者: 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