找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2439|回复: 0
打印 上一主题 下一主题
收起左侧

单片机状态检测程序示例

[复制链接]
跳转到指定楼层
楼主
ID:693038 发表于 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击,长按,或者多个按键组合键检测


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表