找回密码
 立即注册

QQ登录

只需一步,快速开始

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

带低压报警的51单片机太阳能充电宝设计与制作(完整代码资料)

  [复制链接]
跳转到指定楼层
楼主
本设使用太阳能电池板不定时自供电给锂电池,同时加入51单片机通过adc0809芯片解析锂电池电源,并能进行低压报警,支持两路5V1A同时放电,增加三个按键,支持菜单切换显示等功能。以及相关设计所用的模块资料。
所用模块:
STC89C51单片机最小系统
1602LCD
ADC0809模数转换芯片
DC-DC升压芯片
太阳能板
锂电池充放电管理模块
3.7V锂电池(1S)
实物图:



太阳能充电模块:



升压模块:




部分单片机程序代码:
  1. void Hardware_Init(void)
  2. {
  3.         EA=1;                                 //开总中断
  4.     TMOD=0x02;                         //设定定时器 T0工作方式
  5.     TH0=216;                         //利用T0中断产生CLK信号
  6.     TL0=216;  
  7.     TR0=1;                                 //启动定时器T0
  8.     ET0=1;                                 //配置adc0809
  9.     STR=0;
  10.     OE=0;
  11.         delayms(50);
  12.         LcdInit();                        //lcd初始化
  13.         for(i=0;i<14;i++)LcdWriteData(welcome[i]);
  14.         led_warn();                        //小灯报警
  15.         delayms(100);
  16.         LcdWriteCom(0x01);  //清屏
  17.         for(i=0;i<12;i++)LcdWriteData(instruction1[i]);
  18.         LcdWriteCom(0x40+0x80);
  19.         for(i=0;i<9;i++)LcdWriteData(instruction2[i]);
  20.         LED=1;
  21.         delayms(100);
  22. }
  23. /*******************************************************************************
  24. 函数名:  key_scan()
  25. 功  能:    按键扫描函数
  26. *******************************************************************************/
  27. uint update=0;
  28. void key_scan(void)
  29. {
  30.    if(KEY1==0)
  31.    {
  32.            delayms(5);                                         //按键消抖,具体原理自行百度
  33.          if(KEY1==0)
  34.          {
  35.                  while(KEY1==0);                                 //等待按键释放,保证按下按键只运行一次程序
  36.                  LcdWriteCom(0x01);                   //清屏
  37.                 for(i=0;i<15;i++)LcdWriteData(I_Disp[i]);
  38.                 update=1;                                         //开启实时更新标志位,主函数内更新
  39.          }
  40.    }
  41.    if(KEY2==0)
  42.    {
  43.            delayms(5);
  44.          if(KEY2==0)
  45.          {
  46.                  while(KEY2==0);
  47.                  LcdWriteCom(0x01);                          //清屏
  48.                  update=0;                                                //关闭实时更新标志位
  49.                  LcdWriteCom(0x80);
  50.                  for(i=0;i<12;i++)LcdWriteData(instruction1[i]);
  51.                  LcdWriteCom(0x40+0x80);
  52.                  for(i=0;i<9;i++)LcdWriteData(instruction2[i]);
  53.          }
  54.    }
  55.    if(KEY3==0)
  56.    {
  57.            delayms(5);
  58.          if(KEY3==0)
  59.          {
  60.                  while(KEY3==0);                                   //可增加额外任务
  61.                 LED=!LED;
  62.          }
  63.    }
  64. }
  65. /*******************************************************************************
  66. 函数名:  battery_check()
  67. 功  能:    电池检测及报警函数
  68. *******************************************************************************/
  69. void battery_check(void)
  70. {
  71.         AD();                                //adc数据解析
  72.         if(update)
  73.         {
  74.                 LcdDisplay();
  75.                 delayms(4);                //建议加延时,否则小数点后两位变化过快看不清
  76.         }
  77.         if(KEY1&&KEY2&&KEY3) //由于按键引脚和adc引脚分时复用,所以当按键使用引脚时,停止adc使用
  78.         {                                         //否则adc数据不准确,将影响报警准确度
  79.            if(disbuff[0]<=3&&disbuff[1]<=2)led_warn();          //警报功能,预设3.2V
  80.         }
  81. }

  82. /*******************************************************************************
  83. 函数名:  main()
  84. 功  能:  主函数
  85. 注  意:  主函数内由于加入延时,因此按键扫描需稍长时间按下才可有反应(非中断式按键触发)
  86. *******************************************************************************/
  87. void main(void)
  88. {
  89.         Hardware_Init();                //系统初始化
  90.         while(1)
  91.           {
  92.                   key_scan();                        //按键扫描
  93.                 battery_check();        //电压检测显示、报警
  94.           }         
  95. }
复制代码
太阳能充电宝设计.zip (664.17 KB, 下载次数: 127)
代码资料评论可见。

本贴为原创,转载请注明出处!
时间:2020/11/
祝好!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:517951 发表于 2020-11-25 23:08 | 只看该作者
正准备给我的1602万年历增加太阳能供电的,想什么就来什么,不错。
回复

使用道具 举报

板凳
ID:852195 发表于 2020-12-3 11:24 | 只看该作者
以前做了个太阳能充电宝放车用,现在看看如何加入这个监察电路入去
回复

使用道具 举报

地板
ID:595677 发表于 2020-12-9 17:00 | 只看该作者
看的几个都没低功耗的呀
回复

使用道具 举报

5#
ID:370511 发表于 2020-12-9 17:28 | 只看该作者
马克,学习新知识
回复

使用道具 举报

6#
ID:370511 发表于 2020-12-9 17:29 | 只看该作者
马克,学习到了新的知识了!
回复

使用道具 举报

7#
ID:796461 发表于 2020-12-9 20:03 来自手机 | 只看该作者
楼主,这个给0809信号的是电池的正极吗
回复

使用道具 举报

8#
ID:839987 发表于 2021-2-27 23:46 来自手机 | 只看该作者
正好想要研究研究
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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