熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
在common.h中//#define BATTERY_CRITICAL 0x01------電池電力嚴(yán)重缺乏
//#define BATTERY_LOW 0x02
#include "config/tx.h"
#include "music.h"
static u8 warned = 0;
static u32 next_battery_warning = 0;
u8 BATTERY_Check() //電池檢查函數(shù)
{
u16 battery = PWR_ReadVoltage(); //讀取電源電壓的值給battery
u32 ms = CLOCK_getms(); //計(jì)算的時(shí)間給ms
// If battery is low or , was low and till under low + 200mV
//如果電池電量低,低到低電壓+ 200mV
if (battery < Transmitter.batt_alarm && !(warned & BATTERY_LOW))
如果 讀取電源電壓<發(fā)射機(jī)的警報(bào)電壓 且(0000&0010=0000)取非同時(shí)為真
{
warned |= BATTERY_LOW; // Bat was low...//電池電壓低。
//之前有”#define BATTERY_LOW 0x02” 0x02=0010(二進(jìn)制)
//所以warned=0000|0010=0010
next_battery_warning = ms;
//next_battery_warning=ms=CLOCK_getms()下一次警告的時(shí)間
}
else if (battery > Transmitter.batt_alarm + 200)
//如果檢測(cè)到的電壓>發(fā)射機(jī)電池的警報(bào)電壓+200mV
{
warned &= ~BATTERY_LOW; // Bat OK... reset 'was low' and counter..
}
//則warned=0000(warned)&1101( ~BATTERY_LOW)=0000
//如果battery < Transmitter.batt_alarm && !(warned & BATTERY_LOW)都滿足,則執(zhí)行{第一段程序},否則執(zhí)行{第二段程序}
//warned和next_battery_warning 為全局靜態(tài)變量,所以上個(gè)程序的warned不會(huì)得到釋放
//warned=0010(電池電壓低)或者wanred=0000(電池電壓還行)
//next_battery_warning =ms(電池電壓低)或者0(未執(zhí)行電池電壓低那一段程序)
if ((warned & BATTERY_LOW) && ms >= next_battery_warning)
//如果warned=0010(電壓還行0000就不用管這個(gè)了)電池電壓低時(shí)&0010=0010為真且ms>=next_battery_warning(電池電壓低)為真
{
MUSIC_Play(MUSIC_BATT_ALARM);
next_battery_warning = ms + Transmitter.batt_warning_interval * 1000;
}
//則執(zhí)行MUSIC_Play()低電壓警報(bào)聲音(music.h中定義)
// next_battery_warning = ms + Transmitter.batt_warning_interval * 1000;
if (battery < Transmitter.batt_critical && ! (warned & BATTERY_CRITICAL))
//如果檢測(cè)到的電池電壓<電池超低電壓為真且0010或0000&0001=0000取反為真同事成立
{
CONFIG_SaveModelIfNeeded(); //配置 保存模式 函數(shù)?
CONFIG_SaveTxIfNeeded(); //配置 保存發(fā)射 函數(shù)?
SPI_FlashBlockWriteEnable(0);
//Disable writing to all banks of SPIFlash SPI寫(xiě)FLASH函數(shù)使能函數(shù),參數(shù)為0,使能
warned |= BATTERY_CRITICAL; //warned=warned|0001=0011或者0001
PAGE_ShowLowBattDialog(); //低電量對(duì)話框顯示函數(shù):。。。。。。。
}
else if (battery > Transmitter.batt_critical + 200)
//如果讀取到的電源電壓>發(fā)射機(jī)的默認(rèn)電池的臨界值+200mV
{
warned &= ~BATTERY_CRITICAL; //warned=warned&0001=0000
SPI_FlashBlockWriteEnable(1);
//Disable writing to all banks of SPIFlash
//SPI寫(xiě)FLASH函數(shù)使能函數(shù),參數(shù)為1,失能
}
return warned; //返回warned值
}
Powered by 單片機(jī)教程網(wǎng)