找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6753|回复: 6
打印 上一主题 下一主题
收起左侧

1.5V无线鼠标改造为锂电池

[复制链接]
跳转到指定楼层
楼主



鼠标有点老,是用一节5号电池,10天左右就没电,所以改造为锂电池.

//无线鼠标电源管理
//单片机:stc15w204s
//频率:6M
//单片机工作时管理2.5V稳压输出,鼠标5分钟无动作关闭2.5V输出,单片机进入掉电模式
//单片机工作时电池电压低于3.6V时,进入掉电模式
//按鼠标左键可唤醒单片机
//掉电模式工作电流: <20uA    工作电流: <10mA   锂电池容量:1300mAH  型号:14500

无线鼠标电源管理-15w204.rar (95.87 KB, 下载次数: 22)

下面是部分程序预览:
  1. //无线鼠标电源管理
  2. //单片机:stc15w204s
  3. //频率:6M
  4. //单片机工作时管理2.5V稳压输出,鼠标5分钟无动作关闭2.5V输出,单片机进入掉电模式
  5. //单片机工作时电源电压低于3.6V时,进入掉电模式
  6. //按鼠标左键可唤醒单片机
  7. //掉电模式工作电流: <20uA           工作电流: <10mA                电池容量:1300mAH  型号:14500
  8. #include "stc15w204s.h"
  9. #include <intrins.h>                 
  10. typedef unsigned int u16;  //16位无符号整型数
  11. typedef unsigned char u8;  //8位无符号整型数

  12. /*************        本地常量声明        **************/

  13. //CMPCR1
  14. #define        CMPEN        0x80        //1: 允许比较器, 0: 禁止,关闭比较器电源
  15. //#define        CMPIF        0x40        //比较器中断标志, 包括上升沿或下降沿中断, 软件清0
  16. //#define        PIE                0x20        //1: 比较结果由0变1, 产生上升沿中断
  17. //#define        NIE                0x10        //1: 比较结果由1变0, 产生下降沿中断
  18. //#define        PIS                0x08        //输入正极性选择, 0: 选择内部P5.5做正输入,           1: 由ADCIS[2:0]所选择的ADC输入端做正输入.
  19. //#define        NIS                0x04        //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入.
  20. //#define        CMPOE        0x02        //1: 允许比较结果输出到P1.2, 0: 禁止.
  21. #define        CMPRES        0x01        //比较结果, 1: CMP+电平高于CMP-,  0: CMP+电平低于CMP-,  只读

  22. //CMPCR2
  23. //#define        INVCMPO        0x80        //1: 比较器输出取反,  0: 不取反
  24. //#define        DISFLT        0x40        //1: 关闭0.1uF滤波,   0: 允许
  25. //#define        LCDTY        0x00        //0~63, 比较结果变化延时周期数


  26. #define        Pin0                0x01        //IO引脚 Px.0
  27. #define        Pin1                0x02        //IO引脚 Px.1
  28. #define        Pin2                0x04        //IO引脚 Px.2
  29. #define        Pin3                0x08        //IO引脚 Px.3
  30. #define        Pin4                0x10        //IO引脚 Px.4
  31. #define        Pin5                0x20        //IO引脚 Px.5
  32. #define        Pin6                0x40        //IO引脚 Px.6
  33. #define        Pin7                0x80        //IO引脚 Px.7
  34. //#define        PinAll                0xFF        //IO所有引脚

  35. sbit KongZi = P3^2;
  36. u8  i ;
  37. bit DianYa=0;
  38. void ConfigTimer2(u8 s);

  39. void main()
  40. {       
  41.     //IO口初始化
  42.         P3M1 |= Pin3;       
  43.         P5M1 |= Pin4+Pin5;          //P3.3 P5.4 P5.5设置为高阻输入
  44.         //比较器初始化
  45.         CMPCR1 = 0;
  46.         CMPCR2 = 5;                //比较结果变化延时周期数, 0~63
  47.         CMPCR1 |= CMPEN;        //允许比较器                ENABLE,DISABLE
  48.     //        CMPCR1 |= PIE;                //允许上升沿中断        ENABLE,DISABLE
  49.     //        CMPCR1 |= NIE;                //允许下降沿中断        ENABLE,DISABLE
  50.     //        CMPCR1 |= PIS;                //输入正极性选择, 0: 选择内部P5.5做正输入,           1: 由ADCIS[2:0]所选择的ADC输入端做正输入.
  51.         //  CMPCR1 |= NIS;                //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入
  52.     //        CMPCR1 |= CMPOE;        //允许比较结果输出到P1.2,   ENABLE,DISABLE
  53.     //        CMPCR2 |= INVCMPO;        //比较器输出取反,         ENABLE,DISABLE
  54.         //  CMPCR2 |= DISFLT;        //内部0.1uF滤波,          ENABLE,DISABLE


  55.     CLK_DIV=0x07;         //低速模式128分频
  56.         WDT_CONTR=0x37;             //喂狗  20S
  57.         //IT1=0;                         //设置INT1中断类型上沿和下沿均可唤醒
  58.         IT1=1;                         //设置INT1中断类型下沿可唤醒
  59.         EX1=1;                         //使能INT1中断
  60.         EA=1;
  61.         KongZi=0;
  62.     ConfigTimer2(10);   //配置T2定时 0-16s
  63.     while (1);
  64.    
  65. }

  66. /* 配置并启动T2,s-T2定时时间 */
  67. void ConfigTimer2(u8 s)
  68. {
  69.     unsigned long tmp;  //临时变量
  70.    
  71.     tmp = 6000000 / 12 / 128 ;      //定时器计数频率
  72.     tmp = tmp * s ;  //计算所需的计数值
  73.     tmp = 65536 - tmp;        //计算定时器重载值
  74.     T2H = (u8)(tmp>>8);  //定时器重载值拆分为高低字节
  75.     T2L = (u8)tmp;
  76.           
  77.         AUXR &= 0xEF;  // 启动T2定时器  方式 :16位重装模式计数器
  78.         AUXR |= 0x10;  // 启动T2定时器
  79.            IE2 &= 0xFB;  // 使能T2中断
  80.         IE2 |= 0x04;  // 使能T2中断
  81.           
  82.     //ET2 = 1;        //使能T2中断
  83.     //T2R = 1;        //启动T2定时器
  84. }
  85. /* 外部中断服务函数 , P3.3下降沿触发*/
  86. void exint1()interrupt 2
  87. {     CMPCR1 |= CMPEN;  //开启比较器
  88.           if(DianYa==1)
  89.           {             DianYa=0;
  90.                  if((CMPCR1 & CMPRES) == 0)         //低电压检测
  91.                      {        
  92.                             CMPCR1 = 0;         //关闭比较器
  93.                                 DianYa=1;         //掉电记录
  94.                                 KongZi=1;         //控制端 1:2.5V没输出 0:2.5V输出
  95.                             PCON=0x02;  //进入掉电模式
  96.                                  _nop_();
  97.                                 _nop_();
  98.                                 return;
  99.                      }
  100.           }
  101.           i=0;
  102.           KongZi=0;         //控制端 1:2.5V没输出 0:2.5V输出
  103. }

  104. /* T2中断服务函数 */
  105. void InterruptTimer2() interrupt 12
  106. {       
  107.     WDT_CONTR=0x37;             //喂狗  20S
  108.         if((CMPCR1 & CMPRES) == 0)        //低电压检测
  109.     {        
  110.             CMPCR1 = 0;          //关闭比较器
  111.                 DianYa=1;          //掉电记录
  112.                 KongZi=1;          //控制端 1:2.5V没输出 0:2.5V输出
  113.             PCON=0x02;   //进入掉电模式
  114.                  _nop_();
  115.                 _nop_();
  116.                 return;
  117.      }

  118.     i++;
  119.     if(i>=30)                 //空闲5分钟进入掉电模式
  120.         {   i=0        ;
  121.                 CMPCR1 = 0;         //关闭比较器
  122.             KongZi=1;         //控制端 1:2.5V没输出 0:2.5V输出
  123.                 PCON=0x02;  //进入掉电模式
  124.                  _nop_();
  125.                 _nop_();
  126.        
  127.         }       

  128. }
复制代码


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2016-9-21 07:07 | 只看该作者
电路图上有个错误,+4.2v和-4.2v之间的电压是8.4v,而且-4.2v与gnd发生了短路,2.5v的输出也一样。
回复

使用道具 举报

板凳
ID:134239 发表于 2016-9-21 19:20 | 只看该作者
本帖最后由 0o000000 于 2016-9-21 19:24 编辑
npn 发表于 2016-9-21 07:07
电路图上有个错误,+4.2v和-4.2v之间的电压是8.4v,而且-4.2v与gnd发生了短路,2.5v的输出也一样。


标注错误而已,修改一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表