如果單片機有足夠的空間,你又不在乎效率的話,可以參考一下這個,這個是我一個鋰電池電量指示函數
你參考一下,大概原理就是電壓變化量超過0.05V時才進行比較,不會在臨界點來回跳的
//────────────────────────────────────────────
void Battry_Voltage_Disp(float Bat_Voltage) //電池電壓處理,用于顯示指示燈和自動關機
{ //Bat_Voltage為當前電池電壓
float a; //Last_Voltage為全局變量
a=Bat_Voltage-Last_Voltage; //本次電壓值和上次電壓進行比較
a=fabs(a); //絕對值
if(a>0.05)
{
Last_Voltage=Bat_Voltage; //電池電壓變化超過0.05V,保存為上次電壓
a=Bat_Voltage;
if(a<2.9)ON=0; //關機電壓:2.9V
else if(a<3.35)Flash_light(); //指示燈:閃燈
else if((a>3.35)&&(a<3.55))Red_light(); //指示燈:紅燈
else if((a>3.55)&&(a<3.65))Orange_light(); //指示燈:橙燈
else Green_light(); //指示燈:綠燈
}
}
//─────────────────────────────────────────────────
|