1、简介
一种基于51单片机的多路温度检测报警系统。该设计采用数字温度传感器DS18B20,此传感器读取被测量温度值并进行转换。将转换后的多路数据送到单片机处理,再通过LCD1602显示出来。同时,可手动设置温度的上下限值,当实时温度超出时,对应的工作指示灯亮,蜂鸣器报警。
2、主要功能
a.通过LCD1602显示当前温度值,温度测量范围:0-99摄氏度。
b.通过独立按键设置多路温度上下限值,第一次按下设置键设置温度下限值,第二次按下设置键设置温度上限值,再按加减键就可以修改温度值。
c.当温度低于下限或高于上限温度时,蜂鸣器和LED灯同时报警。
d.可通过报警开关按键关闭蜂鸣器报警。
3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言
4、源程序
使用keil C51软件(内附安装包)实现程序编写与编译。
#include"stc89c51.h"
#include"ds18b20.h"
sbit SetKey = P3^0;
sbit UpKey = P3^1;
sbit DnKey = P3^2;
sbit AlarmK = P3^3;
sbit BEEP = P2^4;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
extern void StartDs18b20(uchar * ROMCODE);
extern void ReadDs18b20(uchar * ROMCODE);
extern uchar TZ; //转换后的温度值整数部分
extern uchar TD; //转换后的温度值整数部分
//extern void init_lcd (void);
//extern void LcdWrData(uchar content);
//extern void LcdWrCommand(uchar content) ;
extern uchar FindDevices(uchar CodeROM[][8]);
data uchar Ds18b20Rom[4][8];
//************************************************************************************************************************
extern uchar LastDiscrap ;
extern unsigned char tflag;
unsigned char AlarmTempLow=20,AlarmTempTop=30,Set=0;
unsigned char fAlarm=0xff;
unsigned char TP1=0xff,TP2=0xff,TP3=0xff,TP4=0xff;
unsigned char Alarm1=0,Alarm2=0,Alarm3=0,Alarm4=0;
unsigned char tf1=0,tf2=0,tf3=0,tf4=0;
void delayms(uint ms) //延时xx毫秒
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
#define LCD_BUS P0
void command(unsigned int com) //LCD写指令
{
RS=0; //RS为0
LCD_BUS=com; //装载指令
delayms(5); //延时5ms
EN=1; //LCD使能
delayms(5); //延时5ms
EN=0; //LCD不使能
}
void write_dat(unsigned char dat) //LCD写数据
{
RS=1; //RS为1
LCD_BUS=dat; //装载数据
delayms(5); //延时5ms
EN=1; //LCD使能
delayms(5); //延时5ms
EN=0; //LCD不使能
}
void writestring(unsigned char x,unsigned char y,unsigned char *s) //LCD 写字符串
{
if (y == 0) command(0x80 + x); //表示第一行
else command(0xC0 + x); //表示第二行
while (*s) //判断是否字符串的结尾
{
write_dat( *s); //显示当前字符
s ++; //字符串地址加1
}
}
void writeChar(unsigned char x,unsigned char y,unsigned char s) //LCD 写字符串
{
if (y == 0) command(0x80 + x); //表示第一行
else command(0xC0 + x); //表示第二行
{
write_dat( s); //显示当前字符
}
}
void LCD_Initial(void) //LCD初始化
{
EN=0; //LCD不使能
RW=0; //RW为0
command(0x38); //发送初始化指令
command(0x0c); //发送初始化指令
command(0x06); //发送初始化指令
command(0x01); //发送初始化指令
command(0x80+0x02); //发送LCD初始位置
}
5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
当前温度:
设置温度下限:
设置温度上限:
当温度高于上限时,蜂鸣器和LED灯报警:
当温度低于下限时,蜂鸣器和LED灯报警:
6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
7、资料获取方式
EE04下载链接1:百度网盘(推荐)
EE04下载链接2:优快云免积分
有偿获取,非诚勿扰🙏