|
鼠標(biāo)有點(diǎn)老,是用一節(jié)5號電池,10天左右就沒電,所以改造為鋰電池.
//無線鼠標(biāo)電源管理
//單片機(jī):stc15w204s
//頻率:6M
//單片機(jī)工作時管理2.5V穩(wěn)壓輸出,鼠標(biāo)5分鐘無動作關(guān)閉2.5V輸出,單片機(jī)進(jìn)入掉電模式
//單片機(jī)工作時電池電壓低于3.6V時,進(jìn)入掉電模式
//按鼠標(biāo)左鍵可喚醒單片機(jī)
//掉電模式工作電流: <20uA 工作電流: <10mA 鋰電池容量:1300mAH 型號:14500
無線鼠標(biāo)電源管理-15w204.rar
(95.87 KB, 下載次數(shù): 24)
2016-9-20 20:22 上傳
點(diǎn)擊文件名下載附件
下面是部分程序預(yù)覽:
- //無線鼠標(biāo)電源管理
- //單片機(jī):stc15w204s
- //頻率:6M
- //單片機(jī)工作時管理2.5V穩(wěn)壓輸出,鼠標(biāo)5分鐘無動作關(guān)閉2.5V輸出,單片機(jī)進(jìn)入掉電模式
- //單片機(jī)工作時電源電壓低于3.6V時,進(jìn)入掉電模式
- //按鼠標(biāo)左鍵可喚醒單片機(jī)
- //掉電模式工作電流: <20uA 工作電流: <10mA 電池容量:1300mAH 型號:14500
- #include "stc15w204s.h"
- #include <intrins.h>
- typedef unsigned int u16; //16位無符號整型數(shù)
- typedef unsigned char u8; //8位無符號整型數(shù)
- /************* 本地常量聲明 **************/
- //CMPCR1
- #define CMPEN 0x80 //1: 允許比較器, 0: 禁止,關(guān)閉比較器電源
- //#define CMPIF 0x40 //比較器中斷標(biāo)志, 包括上升沿或下降沿中斷, 軟件清0
- //#define PIE 0x20 //1: 比較結(jié)果由0變1, 產(chǎn)生上升沿中斷
- //#define NIE 0x10 //1: 比較結(jié)果由1變0, 產(chǎn)生下降沿中斷
- //#define PIS 0x08 //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
- //#define NIS 0x04 //輸入負(fù)極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負(fù)輸入, 1: 選擇外部P5.4做輸入.
- //#define CMPOE 0x02 //1: 允許比較結(jié)果輸出到P1.2, 0: 禁止.
- #define CMPRES 0x01 //比較結(jié)果, 1: CMP+電平高于CMP-, 0: CMP+電平低于CMP-, 只讀
- //CMPCR2
- //#define INVCMPO 0x80 //1: 比較器輸出取反, 0: 不取反
- //#define DISFLT 0x40 //1: 關(guān)閉0.1uF濾波, 0: 允許
- //#define LCDTY 0x00 //0~63, 比較結(jié)果變化延時周期數(shù)
- #define Pin0 0x01 //IO引腳 Px.0
- #define Pin1 0x02 //IO引腳 Px.1
- #define Pin2 0x04 //IO引腳 Px.2
- #define Pin3 0x08 //IO引腳 Px.3
- #define Pin4 0x10 //IO引腳 Px.4
- #define Pin5 0x20 //IO引腳 Px.5
- #define Pin6 0x40 //IO引腳 Px.6
- #define Pin7 0x80 //IO引腳 Px.7
- //#define PinAll 0xFF //IO所有引腳
- sbit KongZi = P3^2;
- u8 i ;
- bit DianYa=0;
- void ConfigTimer2(u8 s);
- void main()
- {
- //IO口初始化
- P3M1 |= Pin3;
- P5M1 |= Pin4+Pin5; //P3.3 P5.4 P5.5設(shè)置為高阻輸入
- //比較器初始化
- CMPCR1 = 0;
- CMPCR2 = 5; //比較結(jié)果變化延時周期數(shù), 0~63
- CMPCR1 |= CMPEN; //允許比較器 ENABLE,DISABLE
- // CMPCR1 |= PIE; //允許上升沿中斷 ENABLE,DISABLE
- // CMPCR1 |= NIE; //允許下降沿中斷 ENABLE,DISABLE
- // CMPCR1 |= PIS; //輸入正極性選擇, 0: 選擇內(nèi)部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
- // CMPCR1 |= NIS; //輸入負(fù)極性選擇, 0: 選擇內(nèi)部BandGap電壓BGv做負(fù)輸入, 1: 選擇外部P5.4做輸入
- // CMPCR1 |= CMPOE; //允許比較結(jié)果輸出到P1.2, ENABLE,DISABLE
- // CMPCR2 |= INVCMPO; //比較器輸出取反, ENABLE,DISABLE
- // CMPCR2 |= DISFLT; //內(nèi)部0.1uF濾波, ENABLE,DISABLE
- CLK_DIV=0x07; //低速模式128分頻
- WDT_CONTR=0x37; //喂狗 20S
- //IT1=0; //設(shè)置INT1中斷類型上沿和下沿均可喚醒
- IT1=1; //設(shè)置INT1中斷類型下沿可喚醒
- EX1=1; //使能INT1中斷
- EA=1;
- KongZi=0;
- ConfigTimer2(10); //配置T2定時 0-16s
- while (1);
-
- }
- /* 配置并啟動T2,s-T2定時時間 */
- void ConfigTimer2(u8 s)
- {
- unsigned long tmp; //臨時變量
-
- tmp = 6000000 / 12 / 128 ; //定時器計(jì)數(shù)頻率
- tmp = tmp * s ; //計(jì)算所需的計(jì)數(shù)值
- tmp = 65536 - tmp; //計(jì)算定時器重載值
- T2H = (u8)(tmp>>8); //定時器重載值拆分為高低字節(jié)
- T2L = (u8)tmp;
-
- AUXR &= 0xEF; // 啟動T2定時器 方式 :16位重裝模式計(jì)數(shù)器
- AUXR |= 0x10; // 啟動T2定時器
- IE2 &= 0xFB; // 使能T2中斷
- IE2 |= 0x04; // 使能T2中斷
-
- //ET2 = 1; //使能T2中斷
- //T2R = 1; //啟動T2定時器
- }
- /* 外部中斷服務(wù)函數(shù) , P3.3下降沿觸發(fā)*/
- void exint1()interrupt 2
- { CMPCR1 |= CMPEN; //開啟比較器
- if(DianYa==1)
- { DianYa=0;
- if((CMPCR1 & CMPRES) == 0) //低電壓檢測
- {
- CMPCR1 = 0; //關(guān)閉比較器
- DianYa=1; //掉電記錄
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進(jìn)入掉電模式
- _nop_();
- _nop_();
- return;
- }
- }
- i=0;
- KongZi=0; //控制端 1:2.5V沒輸出 0:2.5V輸出
- }
- /* T2中斷服務(wù)函數(shù) */
- void InterruptTimer2() interrupt 12
- {
- WDT_CONTR=0x37; //喂狗 20S
- if((CMPCR1 & CMPRES) == 0) //低電壓檢測
- {
- CMPCR1 = 0; //關(guān)閉比較器
- DianYa=1; //掉電記錄
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進(jìn)入掉電模式
- _nop_();
- _nop_();
- return;
- }
- i++;
- if(i>=30) //空閑5分鐘進(jìn)入掉電模式
- { i=0 ;
- CMPCR1 = 0; //關(guān)閉比較器
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進(jìn)入掉電模式
- _nop_();
- _nop_();
-
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|