QQ圖片20160921192909.png (30.16 KB, 下載次數: 127)
下載附件
2016-9-21 19:31 上傳
QQ圖片20160921192938.png (10.15 KB, 下載次數: 123)
下載附件
2016-9-21 19:31 上傳
鼠標有點老,是用一節5號電池,10天左右就沒電,所以改造為鋰電池.
0.png (61.1 KB, 下載次數: 132)
下載附件
2016-9-24 11:58 上傳
//無線鼠標電源管理
//單片機:stc15w204s
//頻率:6M
//單片機工作時管理2.5V穩壓輸出,鼠標5分鐘無動作關閉2.5V輸出,單片機進入掉電模式
//單片機工作時電池電壓低于3.6V時,進入掉電模式
//按鼠標左鍵可喚醒單片機
//掉電模式工作電流: <20uA 工作電流: <10mA 鋰電池容量:1300mAH 型號:14500
無線鼠標電源管理-15w204.rar
(95.87 KB, 下載次數: 24)
2016-9-20 20:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是部分程序預覽:
- //無線鼠標電源管理
- //單片機:stc15w204s
- //頻率:6M
- //單片機工作時管理2.5V穩壓輸出,鼠標5分鐘無動作關閉2.5V輸出,單片機進入掉電模式
- //單片機工作時電源電壓低于3.6V時,進入掉電模式
- //按鼠標左鍵可喚醒單片機
- //掉電模式工作電流: <20uA 工作電流: <10mA 電池容量:1300mAH 型號:14500
- #include "stc15w204s.h"
- #include <intrins.h>
- typedef unsigned int u16; //16位無符號整型數
- typedef unsigned char u8; //8位無符號整型數
- /************* 本地常量聲明 **************/
- //CMPCR1
- #define CMPEN 0x80 //1: 允許比較器, 0: 禁止,關閉比較器電源
- //#define CMPIF 0x40 //比較器中斷標志, 包括上升沿或下降沿中斷, 軟件清0
- //#define PIE 0x20 //1: 比較結果由0變1, 產生上升沿中斷
- //#define NIE 0x10 //1: 比較結果由1變0, 產生下降沿中斷
- //#define PIS 0x08 //輸入正極性選擇, 0: 選擇內部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
- //#define NIS 0x04 //輸入負極性選擇, 0: 選擇內部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入.
- //#define CMPOE 0x02 //1: 允許比較結果輸出到P1.2, 0: 禁止.
- #define CMPRES 0x01 //比較結果, 1: CMP+電平高于CMP-, 0: CMP+電平低于CMP-, 只讀
- //CMPCR2
- //#define INVCMPO 0x80 //1: 比較器輸出取反, 0: 不取反
- //#define DISFLT 0x40 //1: 關閉0.1uF濾波, 0: 允許
- //#define LCDTY 0x00 //0~63, 比較結果變化延時周期數
- #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設置為高阻輸入
- //比較器初始化
- CMPCR1 = 0;
- CMPCR2 = 5; //比較結果變化延時周期數, 0~63
- CMPCR1 |= CMPEN; //允許比較器 ENABLE,DISABLE
- // CMPCR1 |= PIE; //允許上升沿中斷 ENABLE,DISABLE
- // CMPCR1 |= NIE; //允許下降沿中斷 ENABLE,DISABLE
- // CMPCR1 |= PIS; //輸入正極性選擇, 0: 選擇內部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
- // CMPCR1 |= NIS; //輸入負極性選擇, 0: 選擇內部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入
- // CMPCR1 |= CMPOE; //允許比較結果輸出到P1.2, ENABLE,DISABLE
- // CMPCR2 |= INVCMPO; //比較器輸出取反, ENABLE,DISABLE
- // CMPCR2 |= DISFLT; //內部0.1uF濾波, ENABLE,DISABLE
- CLK_DIV=0x07; //低速模式128分頻
- WDT_CONTR=0x37; //喂狗 20S
- //IT1=0; //設置INT1中斷類型上沿和下沿均可喚醒
- IT1=1; //設置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 ; //定時器計數頻率
- tmp = tmp * s ; //計算所需的計數值
- tmp = 65536 - tmp; //計算定時器重載值
- T2H = (u8)(tmp>>8); //定時器重載值拆分為高低字節
- T2L = (u8)tmp;
-
- AUXR &= 0xEF; // 啟動T2定時器 方式 :16位重裝模式計數器
- AUXR |= 0x10; // 啟動T2定時器
- IE2 &= 0xFB; // 使能T2中斷
- IE2 |= 0x04; // 使能T2中斷
-
- //ET2 = 1; //使能T2中斷
- //T2R = 1; //啟動T2定時器
- }
- /* 外部中斷服務函數 , P3.3下降沿觸發*/
- void exint1()interrupt 2
- { CMPCR1 |= CMPEN; //開啟比較器
- if(DianYa==1)
- { DianYa=0;
- if((CMPCR1 & CMPRES) == 0) //低電壓檢測
- {
- CMPCR1 = 0; //關閉比較器
- DianYa=1; //掉電記錄
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進入掉電模式
- _nop_();
- _nop_();
- return;
- }
- }
- i=0;
- KongZi=0; //控制端 1:2.5V沒輸出 0:2.5V輸出
- }
- /* T2中斷服務函數 */
- void InterruptTimer2() interrupt 12
- {
- WDT_CONTR=0x37; //喂狗 20S
- if((CMPCR1 & CMPRES) == 0) //低電壓檢測
- {
- CMPCR1 = 0; //關閉比較器
- DianYa=1; //掉電記錄
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進入掉電模式
- _nop_();
- _nop_();
- return;
- }
- i++;
- if(i>=30) //空閑5分鐘進入掉電模式
- { i=0 ;
- CMPCR1 = 0; //關閉比較器
- KongZi=1; //控制端 1:2.5V沒輸出 0:2.5V輸出
- PCON=0x02; //進入掉電模式
- _nop_();
- _nop_();
-
- }
- }
復制代碼
|