亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 759|回復: 0
打印 上一主題 下一主題
收起左側

使用回差遲滯比較切換LED閃爍模式

[復制鏈接]
跳轉到指定樓層
樓主
ID:1155837 發表于 2025-7-2 16:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近在做電量顯示功能,但是遇到了LED模式會在切換閾值附近反復震蕩的問題,于是就寫了一段回差遲滯比較的代碼,在這里分享出來,做類似功能的可以參考
unsigned char ledmode = 0;//ledmode全局變量聲明
//電壓比較,ledmode切換函數,實現20mv窗口的回差遲滯比較,避免在閾值震蕩
bit initcurrentseg = 0;//ledmode函數中上電時或初始化時,是否給current賦值為ideal的標志,休眠時清空
void LED_MODE(void){
    static unsigned char currentseg = 0;//當前電壓段
    static unsigned char idealseg = 0;//理想電壓段
    if(vcc>=4000){//為理想電壓段賦值
        idealseg = 0;}
    else if(vcc>=3800){
        idealseg = 1;}
    else if(vcc>=3400){
        idealseg = 2;}
    else if(vcc>=2750){
        idealseg = 3;}
    else{
        idealseg = 4;}
    if(idealseg == 4 && !charging){//如果當前電壓跌到2750mv以下,且沒有充電
        //如果在充電,就不進入虧電狀態,實際上充電時并不會調用這個函數,但不影響功能,所以保留
        outpower = 1;
        return;//不執行后面的程序
        }
    else{
        outpower = 0;}
    if(!initcurrentseg){//檢測初始化標志,防止分支無命中
        currentseg = idealseg;//將當前值賦值為理想值
        initcurrentseg = 1;//已初始化
    }
    if(idealseg == currentseg){
        ledmode = idealseg;//直接賦值
        return;//不執行下面的switch和ledmode賦值操作
    }
    switch(idealseg){//如果需要切換ledmode,執行下面的
        case 0://idealseg=0
            if(currentseg==1 && vcc>=4020){//電壓差20mv以上才恢復到mode0狀態
                currentseg = 0;}
            break;
        case 1://idealseg=1
            if(currentseg==0 && vcc<4000){
                currentseg = 1;}
            else if(currentseg==2 && vcc>=3820){
                currentseg = 1;}
            break;
        case 2://idealseg=2
            if(currentseg==1 && vcc<3800){
                currentseg = 2;}
            else if(currentseg==3 && vcc>=3420){
                currentseg = 2;}
            break;
        case 3://idealseg=3
            if(currentseg==2 && vcc<3400){
                currentseg = 3;}
            else if(currentseg==4 && vcc>=2770){
                currentseg = 3;}
            break;
        case 4://idealseg=4
            if(currentseg==3 && vcc<2750){
                currentseg = 4;}
            break;
        }
        ledmode = currentseg;//輸出led模式
    }

評分

參與人數 1黑幣 +10 收起 理由
wpppmlah + 10 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表