找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2875|回复: 2
收起左侧

家用应急电源设计-51单片机代码+原理图+流程图

[复制链接]
ID:892833 发表于 2021-3-17 10:09 | 显示全部楼层 |阅读模式
软件设计
本设计主要是对突发停电或电路故障等做出的自动切换备用电源的设计,主要针对检测到电路中正常电压为0V时,说明停电或电路故障,这时自动切换备用电池,提供用电。其次还会对电池电量进行检测,防止过充等情况。

电路原理图如下:
1.png

4.1 主程序
在程序开始以前我们要进行引脚的初始化,首先需要对adc0832芯片进行初始化,然后对LCD1602初始化并对其进行赋值,随后初始化界面显示。进入到while循环中,先检测市电电压值,如果电压值为0,则报警提醒断电或电路故障,并切换电池供电。随后对电池电压进行检测,如果电压值小于20v或大于25v,说明电池电压异常,停止充电,并报警;如果电压值大于等于20v小于24v,则正常充电;如果电压值大于等于24v小于等于25v,则停止充电。
图 4.1主流程图



4.2 电池电压检测程序
每次运行前面都要初始化单片机,再初始化adc模块,然后采集我们需要的电池电压值并判断电压的值,如果电压值小于20v或大于25v,说明电池电压异常,停止充电,并报警;如果电压值大于等于20v小于24v,则正常充电;如果电压值大于等于24v小于等于25v,表面已充满,则停止充电。
图4.2 电池电压检测流程图


4.3 LCD显示程序
初始化LCD1602,刚开始第一行显示“INPUT:000v”,第二行显示“BAT:00.0v”。后面读取实时的电压值后填入第一行的数值处,替代原先位置,第二行也是同样的操作。
图4.3 LCD显示运行流程图



单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>
  4. #define uchar  unsigned char
  5. #define uint   unsigned int
  6. #define ulong   unsigned long
  7. #include "1602.h"
  8. #include "ad.h"        


  9. sbit beer=P1^0;//蜂鸣器
  10. sbit out=P2^3;        //负载
  11. sbit bat=P2^4;        //充电
  12. //喇叭控制
  13. void beerc()
  14. {
  15.   beer=0;_delay_ms(500);
  16.   beer=1;_delay_ms(500);
  17. }



  18. //显示充电参数------------------------------
  19. void xianshi()
  20. {
  21.         uint u1=0;        //充电电压
  22.         uint u2=0; //被充电电压

  23.    u1=adc0832(0)*(uint)300/(uint)255;        //市电电压
  24.    u2=adc0832(1)*(uint)300/(uint)255;        //电池电压

  25.    lcd1602_adr(0x07);
  26.    lcd1602_writenumber(0x30+u1%1000/100);
  27.    lcd1602_writenumber(0x30+u1%100/10);
  28.    lcd1602_writenumber(0x30+u1%10);

  29.    lcd1602_adr(0x45);
  30.    lcd1602_writenumber(0x30+u2%1000/100);         
  31.    lcd1602_writenumber(0x30+u2%100/10);         
  32.    lcd1602_writenumber('.');
  33.    lcd1602_writenumber(0x30+u2%10);         

  34.         if(u1 == 1)
  35.         {
  36.                 beerc();
  37.                 bat = 1;
  38.                 out=1;
  39.         }
  40.         else
  41.         {
  42.                 out=0;
  43.         }

  44.         if(u1 != 1 && (u2 >= 200 && u2 < 240))
  45.         {
  46.                 bat = 0;
  47.         }
  48.         if(u2 >= 240 && u2 <= 250)
  49.         {
  50.                 bat = 1;
  51.         }
  52.         if(u2 < 200 || u2 > 250)
  53.         {
  54.                 bat = 1;
  55.                 beerc();
  56.         }
  57. }
  58. //主函数
  59. void main()
  60. {
  61.   //初始化
  62.   lcd1602_init();
  63.         _delay_ms(10);

  64.         LCD1602_string(1,2,"INPUT:000v");
  65.   LCD1602_string(2,2,"BAT:00.0v   ");

  66.   while(1)
  67.   {
  68.    xianshi();
  69. }
  70. }
复制代码

以上资料51hei提供下载(方便保存):
水平有限,仅供参考: 源程序.7z (56.74 KB, 下载次数: 37)

评分

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

查看全部评分

回复

使用道具 举报

ID:584814 发表于 2021-3-30 20:43 | 显示全部楼层
必是想当然或许可仿真的程序。继电器上一个二极管都不放纯属胡老师的
回复

使用道具 举报

ID:1069178 发表于 2023-3-31 01:53 来自手机 | 显示全部楼层
出现这是是怎么回事哟
-46358dfa7dc10544.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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