typora-root-url: ./
【毕业设计】64-基于单片机智能电池监控温度电压监控装置(原理图工程_仿真工程_源代码)
资料
基于单片机智能电池监控/温度/电压监控装置(原理图工程/仿真工程/源代码)
资料包含:
原理图工程
仿真工程
源代码
注意:仿真工程需要proteus 8.11版本及以上可运行
设计说明书
源码展示
#include<reg52.h>
#include<intrins.h>
#include<TLC549.h>
#include<lcd1602.h>
#include<DS18B20.h>
uchar WenduData[5]; //实时温度
uchar ad_0; //AD转换后的初始值
uint AD; //实时电压
uchar p[4]={'0','0','0','\0'};
sbit mode=P2^2; //模式选择键
sbit key1=P2^0; //温度报警指示
sbit key2=P2^1; //电量不足报警指示
int i1=5;
//----------------------------------------------------------------
// 电压显示函数
//----------------------------------------------------------------
void voltage_out()
{
delay_ad(100);
ad_0=TLC549_ADC();
AD=ad_0*1.96*2; //计算实际电压值
//显示电压信息
gotoxy(8,1);
LCD_disp_char(0,1,'U');
LCD_disp_char(1,1,'=');
LCD_disp_char(2,1,0x30+AD/1000);
LCD_disp_char(3,1,0x30+AD%1000/100);
LCD_disp_char(4,1,'.');
LCD_disp_char(5,1,0x30+AD%100/10);
LCD_disp_char(6,1,0x30+AD%10);
LCD_disp_char(7,1,'v');
}
//----------------------------------------------------------------
// 温度显示函数
//----------------------------------------------------------------
void temp_out()
{
uint a,b,c,d,e;
e=ReadTemperature(); //获取温度值
if(e>3000){
key1=1;
delay_ad(100);
key1=0;
}
a=e/1000; //计算得到十位数
b=e/100-a*10; //计算得到个位数字
d=e%10; //计算得到小数点后两位
c=(e%100)/10; //计算得到小数点后一位
//LCD显示温度数据
WenduData[0] = a+'0';
WenduData[1] = b+'0';
WenduData[2] = '.';
WenduData[3] = c+'0';
WenduData[4] = '\0';
gotoxy(9,1);
LCD_display("T:");
gotoxy(11,1);
LCD_display(WenduData);
gotoxy(15,1);
LCD_display("C");
}
//----------------------------------------------------------------
// 电压百分比函数
//----------------------------------------------------------------
void Percen_out(uint u)
{
p[0]=p[1]='0';
//按电压值将电量百分比分成10个等级
if(u>520){p[0]=1+'0';}
else if(u>510){p[1]=9+'0';}
else if(u>499){p[1]=8+'0';}
else if(u>488){p[1]=7+'0';}
else if(u>476){p[1]=6+'0';}
else if(u>462){p[1]=5+'0';}
else if(u>446){p[1]=4+'0';}
else if(u>426){p[1]=3+'0';}
else if(u>398){p[1]=2+'0';}
else if(u>370){p[1]=1+'0';}
//小于等于20%时led闪灯警报,Lcd显示Low power!
if(u<398){
key2=1;
delay_ad(100);
key2=0;
gotoxy(6,2);
LCD_display("Low power!");
}
else{
for(i1=6;i1<16;i1++)
{
LCD_disp_char(i1,2,0x20);
}
}
//显示剩余电量数据
gotoxy(0,2);
LCD_display(p);
LCD_disp_char(3,2,'%');
}
//----------------------------------------------------------------
// 主函数
//----------------------------------------------------------------
void main()
{
uart_init(); //串口初始化
LCD_init(); //LCD初始化
while(1)
{
voltage_out(); //执行电压显示函数
temp_out(); //执行温度显示函数
Percen_out(AD); //执行电量显示函数
}
}