- halt进入休眠模式
 - 内部带隙参考电压测量电量
 
if(on_off_key_pin==0)//右键按下,on_off_key_pin为0,因为接地{on_off_key_flag=1;on_off_count++;if(on_off_count>30)//按下这个按键,每次进入循环on_off_count会+1;on_off_count>30次,则表示长按{on_off_count=30;on_off_long_edge=1;//长按标志位置1sleep_f=1;//表示要关机(我要求的长按关机)on_off_key_flag=0;}}else{on_off_count=0;if(on_off_key_flag==1)//如果之前按下过,on_off_key_flag会置1,再抬起到这里{on_off_key_edge=1;//右键抬起,短按标志位置1//--------------下面是双击的代码---------key_press_loop++;//-----------下面是双击的程序-------------/*双击的思路就是:第一次按下后,开始利用中断计数,在规定的时间内 再按下一次 表明双击;如果在按下一次后,规定的时间内没有再次按下,表明单次短按*/if(first_flag==0)//第一次按下的标志位{first_flag=1;key_flash_loop=0;//规定时间的计数器key_press_loop++;//按下的次数}else{if(key_flash_loop<8) //如果在规定时间内{if(key_press_loop>1)//按下2次{Double_click_edge=1;//双击的标志位first_flag=0;key_press_loop=0;key_flash_loop=0;}}else//这里可以去掉{}}on_off_key_flag=0;}}
csdn上的一个源码
- BS86D20芯片
- halt进入暂停状态时会被看门狗复位唤醒
 - 需要在程序入口判断以二次halt进入暂停状态
 
 
#include "bs86d20a-3.h"void main(){if(_to && _pdf) //看门狗复位{_halt();goto wakeup_label;}else{//system_init();}while(1){//...if(en_halt){halt_prepare();_halt();wakeup_label:_nop();_nop();wakeup_prepare();}//....}}
