在common.h中//#define BATTERY_CRITICAL 0x01------電池電力嚴重缺乏
//#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(); //計算的時間給ms
// If battery is low or , was low and till under low + 200mV
//如果電池電量低,低到低電壓+ 200mV
if (battery < Transmitter.batt_alarm && !(warned & BATTERY_LOW))
如果 讀取電源電壓<發(fā)射機的警報電壓 且(0000&0010=0000)取非同時為真
{
warned |= BATTERY_LOW; // Bat was low...//電池電壓低。
//之前有”#define BATTERY_LOW 0x02” 0x02=0010(二進制)
//所以warned=0000|0010=0010
next_battery_warning = ms;
//next_battery_warning=ms=CLOCK_getms()下一次警告的時間
}
else if (battery > Transmitter.batt_alarm + 200)
//如果檢測到的電壓>發(fā)射機電池的警報電壓+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)變量,所以上個程序的warned不會得到釋放
//warned=0010(電池電壓低)或者wanred=0000(電池電壓還行)
//next_battery_warning =ms(電池電壓低)或者0(未執(zhí)行電池電壓低那一段程序)
if ((warned & BATTERY_LOW) && ms >= next_battery_warning)
//如果warned=0010(電壓還行0000就不用管這個了)電池電壓低時&0010=0010為真且ms>=next_battery_warning(電池電壓低)為真
{
MUSIC_Play(MUSIC_BATT_ALARM);
next_battery_warning = ms + Transmitter.batt_warning_interval * 1000;
}
//則執(zhí)行MUSIC_Play()低電壓警報聲音(music.h中定義)
// next_battery_warning = ms + Transmitter.batt_warning_interval * 1000;
if (battery < Transmitter.batt_critical && ! (warned & BATTERY_CRITICAL))
//如果檢測到的電池電壓<電池超低電壓為真且0010或0000&0001=0000取反為真同事成立
{
CONFIG_SaveModelIfNeeded(); //配置 保存模式 函數(shù)?
CONFIG_SaveTxIfNeeded(); //配置 保存發(fā)射 函數(shù)?
SPI_FlashBlockWriteEnable(0);
//Disable writing to all banks of SPIFlash SPI寫FLASH函數(shù)使能函數(shù),參數(shù)為0,使能
warned |= BATTERY_CRITICAL; //warned=warned|0001=0011或者0001
PAGE_ShowLowBattDialog(); //低電量對話框顯示函數(shù):。。。。。。。
}
else if (battery > Transmitter.batt_critical + 200)
//如果讀取到的電源電壓>發(fā)射機的默認電池的臨界值+200mV
{
warned &= ~BATTERY_CRITICAL; //warned=warned&0001=0000
SPI_FlashBlockWriteEnable(1);
//Disable writing to all banks of SPIFlash
//SPI寫FLASH函數(shù)使能函數(shù),參數(shù)為1,失能
}
return warned; //返回warned值
}
Powered by 單片機教程網(wǎng)