如果单片机有足够的空间,你又不在乎效率的话,可以参考一下这个,这个是我一个锂电池电量指示函数
你参考一下,大概原理就是电压变化量超过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(); //指示灯:绿灯
}
}
//─────────────────────────────────────────────────
|