谈标志位思想在单片机编程中的重要性

        单片机编程中使用标志位的思想可以说是非常普遍和重要,如外设遥控的接收、环境亮度的识别、电池电量的判断等等,现就结合电池电量判断的一个案子来剖析一下。

        如在电池供电的设备,根据锂电池3.5V来划分电池电量是正常电量和低电量,采用if-else直接来区分虽然简单省事,不用定义标志位变量,但一定会出现状态不稳定的问题。实际产品在3.5V时来回切换正常和低电模式,所谓模式振荡现象。原因就是3.5V是一个点,而不是一个区间。要想用区间的方式那就需要使用标记位的思想来实现。

        直接贴代码来说明一下:

//globle status
//[7]:phone plugged	   	1: pluged; 0: unpluged,    	   	
//[6]: 	   	   	   	   	   	   	   	   	   	   	
//[5]:     	
//[4]:     	   	   	   	   	   	   	   	   
//[3:0]:power states   0:USB; 1:normal-battery; 2:low-battery
u8 PhoSta = 0;  

main
{
    g_adc_value0_temp = ADC_Get_Value_Average(2);  	   	//获取电池电量
   	if(g_adc_value0_temp>=2910)assignment(&PhoSta,0);   //如果大于2910就标记为USB供电
   	if(g_adc_value0_temp<2870 && g_adc_value0_temp >= 2250)assignment(&PhoSta,1); //如果小于2870,并且大于2250,就标记为电池供电且电量充足
   	if(g_adc_value0_temp<2222)assignment(&PhoSta,2);    //如果小于2250就标记为电池低电量
    
    //.......
}

在上面代码中定义了一个标志变量PhoSta, 用3个if来定义了电量的3个状态,并且各状态临界处都留了一段区间, 可以有效的防止状态在临界处的振荡,来回切换的现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值