仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【E01】
1. 简介
本文提出了一种基于51单片机的数字温度计。该设计采用数字温度传感器DS18B20,此传感器读取被测量温度值,并进行转换。将转换后的数据送到单片机处理,再通过数码管显示出来。同时,手动设置温度的上下限值,当实时温度超出时,对应的工作指示灯亮,蜂鸣器报警。
2. 主要功能
a.通过数码管显示当前温度值,温度测量范围:0-99摄氏度。
b.通过独立按键设置温度上下限值,第一次按下设置键设置温度上限值,第二次按下设置键设置温度下限值,再按加减键就可以修改温度值并具有掉电保存功能。
c.当温度低于下限或高于上限温度时,蜂鸣器和LED灯同时报警。
d.按键具有连加、边减的功能,在设置参数时按键按着不动可以实现连加、连减的功能,设置起来非常方便。
3. 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#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);
}
4. 仿真proteus8.6
本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
当前温度:
设置温度上限:
设置温度下限:
当温度高于上限时,蜂鸣器和LED灯报警:
当温度低于下限时,蜂鸣器和LED灯报警:
5. 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6. 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
7. 资料获取链接
百度网盘下载链接:【E01】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集