10084-基于单片机的电池电压电流充电桩监测报警系统设计(仿真+原理图+源代码工程+详细介绍说明书+PPT)
功能描述:
系统整体方案设计主要是通过单片机来对系统进行控制,在电流电压的检测上,通过电流电压放大器,将信号输出到模数转换器,单片机获取到ADC信号后再对信号进行计算与转换得到电压与电流值。单片机然后处理温度传感器直接使用DS18B20实现环境温度的检测,通过液晶屏幕显示当前的所有参数以及检测结果,并通过LED指示灯作为指示灯提示系统的状态,通过按键来实现系统的阈值调节。将调整系统的各个功能按键作为人机交互在后期可以根据自己的要求,在自定义功能,在本文通过按键来实现阈值调节。
1、电流监测
2、电压监测
3、温度监测
4、阈值调节
5、超过阈值报警-LED和蜂鸣器
6、报警提示-液晶屏显示“ALM”
资料摘要:
电池的监测技术涉及到了传感器领域,电池电压的监测使用场景在我国的场景非常多,特别是在工业和日常生活中,工业中可以用于检测电压的多少,可以保护电池防止电压过低损失电池。
本次设计的题目是基于单片机的电池电压监测报警系统设计,需要实现的功能有电压、电流检测,电压、电流阈值设定,低电压报警等功能。当检测当前使用的电池电压低于设备设定电压值后,就会光学报警亮起指示灯。电流过大也会进行光学报警亮起指示灯。电池电压监测报警系统的组成有51单片机、蜂鸣器、DS18B20、LED指示灯、按键、液晶显示器、ADC等多个部分组成。51单片机作为核心的控制器,LCD1602作为显示的设备,ADC作为模拟信号转为数字信号的设备,DS18B20作为温度检测设备,LED与蜂鸣器作为环境检测报警的状态标识,按键作为人机交互模块用于设定系统的参数。系统进行硬件设计、软件流程设计、代码编写以及仿真模拟设计,确保系统实现功能的同时能够稳定运行。
最后通过使用仿真软件Proteus进行模拟,搭建仿真模拟电路图确保系统的功能实现,并测试硬件电路中的电气特性与稳定性,最终生成测试报告完成系统的功能设计验证,完成本次设计。
资料包含:
1、详细设计说明书-17348字
2、仿真工程文件
3、原理图工程文件
4、源代码工程文件
5、讲解PPT-21页
6、仿真功能演示视频
#include "reg52.H"
#include "stdio.h"
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
#define uchar unsigned char
#define uint unsigned int
// uchar yushe_wendu=50; //温度预设值
//uchar wenduchar=0;
uint wendu; //温度值全局变量
#define const_dpy_time_half 200 //数码管闪烁时间的半值
#define const_dpy_time_all 400 //数码管闪烁时间的全值 一定要比const_dpy_time_half 大
sbit K1 = P3^5;//设置键
sbit K2 = P3^6;//加键
sbit K3 = P3^7;//减键
unsigned char pre_key = 0x0f;//记录按键状态
unsigned char key_value = 20;//获取到的按键值
#define DB P0//液晶并行数据接口
sbit RS = P1^2;//液晶指令数据信号
sbit RW = P1^3;//液晶读写信号
sbit E = P1^4;//液晶使能信号
unsigned char curr_menu = 0;//设置参数
unsigned char ucWd=1; //本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
unsigned char ucWd1Update=0; //窗口1更新显示标志
unsigned char ucWd2Update=0; //窗口2更新显示标志
unsigned char ucPart=0;//本程序的核心变量,局部显示变量。类似于二级菜单的变量。代表显示不同的局部。
unsigned char ucWd1Part1Update=0; //在窗口1中,局部1的更新显示标志
unsigned char ucWd1Part2Update=0; //在窗口1中,局部2的更新显示标志
unsigned char ucWd2Part1Update=0; //在窗口2中,局部1的更新显示标志
unsigned char ucWd2Part2Update=0; //在窗口2中,局部2的更新显示标志
//unsigned char ucWd2Part3Update=0; //在窗口2中,局部1的更新显示标志
//unsigned char ucWd2Part3Update=0; //在窗口2中,局部2的更新显示标志
unsigned char ucDpyTimeLock=0; //原子锁
unsigned int uiDpyTimeCnt=0; //数码管的闪烁计时器,放在定时中断里不断累加
unsigned char i;//循环变量
unsigned char cnt_100ms = 0,cnt_500ms =0;//100ms计数
unsigned char time_100ms_flag = 0;//100ms标志
unsigned char blank_flg;//闪烁标志
unsigned char blank_tim_cnt;//闪烁计数
sbit CS=P1^5;
sbit CLK=P1^6;
sbit DIO=P1^7;
unsigned int ad_val_a;
unsigned int ad_val_b;
unsigned int ad_val_b;
unsigned int v_alarm_tl=80,yushe_wendu = 500;// 欠压报警器值 ,
unsigned int i_alarm_th=130;// 过流报警值
sbit v_alm=P2^0;//欠压显示灯
sbit i_alm=P2^1;//过流显示灯
sbit T_alm = P2^2;
sbit beep = P2^3;
void delay_ms(unsigned int cnt)//软件延时1MS
{
unsigned int x;
for( ; cnt>0; cnt--)//通过for循环执行空指令延时
{
for(x=110; x>0; x--);
}
}
void delay_us(unsigned int cnt)//软件延时1us
{
while(--cnt);
}
void time_init(void)//定时器初始化
{
TMOD |= 0x11;//time0 工作方式为1
TH0 = 0xf8;//装载初值
TL0 = 0x2f;//装载初值,为2ms(65535-63535)
TR0 = 1;//开启定时器
ET0 = 1;//打开中断
EA=1;//打开总中断
}
/
/***********************************************************************************************************
DS18B20相关函数
***********************************************************************************************************/
sbit DQ = P1^0; //ds18b20的数据引脚