系统有一个自带的NTC功能,但是只能检测温度高于某值,但是如果要添加上限和下限,就需要自己写,具体实现如下:
config.h中:
/*****************************************************************************
* Module : NTC检测功能
*****************************************************************************/
#define POTENT_KEY 1 //NTC功能标志位
bsp_key.c下key_init()中:
#if POTENT_KEY
adc_ch |= BIT(ADCCH_PA7);
#endif
bsp_sys.c 中,创建变量用于承接IO口的值
#if POTENT_KEY
u8 in_first_num = 0;//承接每次IO口获取到的值
#endif
bsp_sys.h 中,声明为全局变量
#if POTENT_KEY
extern u8 in_first_num;//承接每次IO口获取到的值
#endif
bsp_sys.c下usr_tmr5ms_isr()中:
//每1S检测一次
if (sys.tmr5ms_cnt3 == 200)
{
#if POTENT_KEY
in_first_num = (u8)(adc_cb.sfr[ADCCH_PA7] >> 2);
#endif
}
bsp_charge.c下bsp_charge_box_process_do()中,添加温度范围,数值为实际测试:
#if POTENT_KEY
if((in_first_num < 50) || (in_first_num > 158))
{//关闭充电
RTCCON8 &= BIT(1);
LED_PWR_SET_OFF();
}
else if((in_first_num >= 50)&&(in_first_num <= 158))
{//唤醒充电
RTCCON8 |=~BIT(1);
LED_PWR_SET_ON();
}
#endif
func_bt.c下fun_bt()中:
#if POTENT_KEY
if((in_first_num > 155)||(in_first_num < 49))//开机情况下,超过温度就关机
{
func_message(KLH_PLAY_PWR_USER_DEF);
}
#endif
还有一个需要注意:由于IO口获取电压在中断中获取,需要在充电的时候将中断开启。具体如下:
bsp_sys.c下bsp_sys_init中:
if(CHARGE_DC_IN())
{
/// enable user timer for display & dac
user_tmr_set_enable(1, 1);
led_init();
key_init();
#if PWM_RGB_EN
pwm_init();
#endif // PWM_RGB_EN
plugin_init();
}
else
{
led_init();
key_init();
#if PWM_RGB_EN
pwm_init();
#endif // PWM_RGB_EN
plugin_init();
/// enable user timer for display & dac
user_tmr_set_enable(1, 1);
}