找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2863|回復(fù): 0
收起左側(cè)

單片機狀態(tài)檢測程序示例

[復(fù)制鏈接]
ID:693038 發(fā)表于 2021-2-25 19:02 | 顯示全部樓層 |閱讀模式
基本每個程序都會用到狀態(tài)檢測,這里分享一下個人的處理方式,例如充電狀態(tài)檢測
void ChargeScanf(void)
{
    unsigned char state=0;//當前狀態(tài)緩存
    static unsigned char statebk; //上一次狀態(tài)存儲   
    static unsigned char statecnt;//穩(wěn)定計算
    state = CHECK_PIN;
    if(state == statebk){
        if(statecnt < 10){//10次消抖
            statecnt++;//消抖時間不夠的話繼續(xù)累積
        }else{
           //消抖完成,記錄狀態(tài)

            if(state){
                //正在充電,可以用一個全局標志位存
            }else{
                //停止充電
            }
        }
    }else{
        statebk = state;//狀態(tài)切換,保存當前狀態(tài),留下次進入函數(shù)時判斷用
        statecnt = 0;//消抖計數(shù)清零
    }

}
此方法我已經(jīng)用了好多年了,挺好用的,可以避免一些誤觸發(fā)
也可以同時檢測兩個充電狀態(tài)腳
例如
state = CHECK_PIN1 ? 0 :1;
state |= CHECK_PIN2 ? 0 :2;
這樣就可以檢測出充電中 充電拔除,充電完成,幾種狀態(tài)
因為程序消抖是以次數(shù)去計算,所以,此函數(shù)放到1MS任務(wù)或者2MS任務(wù)里面掃描,消抖時間就是10MS-20MS效果比較理想

這個思路也可以用于按鍵掃描,這種方式不長時間占用MCU資源,適合應(yīng)用于實際項目應(yīng)用,稍微改動一下就可以檢測獨立按鍵單擊,雙擊,連續(xù)N擊,長按,或者多個按鍵組合鍵檢測


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表