基于51单片机的数码管温度报警系统

1、简介
一种基于51单片机的数字温度计。该设计采用数字温度传感器DS18B20,此传感器读取被测量温度值,并进行转换。将转换后的数据送到单片机处理,再通过数码管显示出来。同时,手动设置温度的上下限值,当实时温度超出时,对应的工作指示灯亮,蜂鸣器报警。

2、主要功能
a.通过数码管显示当前温度值,温度测量范围:0-99摄氏度。

b.通过独立按键设置温度上下限值,第一次按下设置键设置温度上限值,第二次按下设置键设置温度下限值,再按加减键就可以修改温度值并具有掉电保存功能。

c.当温度低于下限或高于上限温度时,蜂鸣器和LED灯同时报警。

d.按键具有连加、边减的功能,在设置参数时按键按着不动可以实现连加、连减的功能,设置起来非常方便。

3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言

4、源程序
使用keil C51软件(内附安装包)实现程序编写与编译。

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535
#include "eeprom52.h"

//数码管段选定义      0     1    2    3    4    5	6	 7	  8	   9	
uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
				  	 0x60,0x25,0x39,0x26,0x31,0x71,0xff};	 //断码
//数码管位选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8] = {0x28,0xee,0x32,0xa2,0xe4,0x92,0x82,0xf8};	
uchar smg_i = 3;    //显示数码管的个位数
sbit dq   = P2^4;	//18b20 IO口的定义

bit flag_lj_en;		 //按键连加使能
bit flag_lj_3_en;	 //按键连3次连加后使能  加的数就越大了 
uchar key_time,key_value;      //用做连加的中间变量
bit key_500ms  ;
sbit beep = P2^3;  //声光报警接口
uchar f_pwm_l ;	  //越小越慢

uint temperature ;  //
bit flag_300ms ;
uchar menu_1;       //菜单设计的变量
uint t_high = 300,t_low = 100;	   //温度上下限报警值 
uint number;

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}
/***********************小延时函数*****************************/
void delay_uint(uint q)
{
	while(q--);
}
/***********************数码显示函数*****************************/
void display()
{
	static uchar i;   
	i++;
	if(i >= smg_i)
		i = 0;	
	P1 = 0xff;			 //消隐 
	P3 = smg_we[i];	 		 //位选
	P1 = dis_smg[i];		 //段选	        

}
/******************把数据保存到单片机内部eepom中******************/
void write_eeprom()
{
	SectorErase(0x2000);
	byte_write(0x2000, t_high % 256);
	byte_write(0x2001, t_high / 256);
	byte_write(0x2002, t_low % 256);
	byte_write(0x2003, t_low / 256);
	byte_write(0x2055, a_a);	
}

/******************把数据从单片机内部eepom中读出来*****************/
void read_eeprom()
{
	t_high  = byte_read(0x2001);
	t_high <<= 8;
	t_high  |= byte_read(0x2000);
	t_low   = byte_read(0x2003);
	t_low <<= 8;
	t_low   |= byte_read(0x2002);
	a_a      = byte_read(0x2055);
}

5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
当前温度:
在这里插入图片描述
设置温度上限:
在这里插入图片描述
设置温度下限:
在这里插入图片描述
当温度高于上限时,蜂鸣器和LED灯报警:
在这里插入图片描述
当温度低于下限时,蜂鸣器和LED灯报警:
在这里插入图片描述

6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
在这里插入图片描述
在这里插入图片描述

7、资料获取方式
有偿,下载地址:EE01基于51单片机的数码管温度报警系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值