基于51单片机的温度上下限报警设计
(仿真+程序+原理图+PCB+设计报告)
功能介绍
具体功能:
1.对室温进行检测和控制,温度显示范围:-55—125度,精度0.1度。
2.能够设置并保存温度上下限值,并可以随时修改。
3.LED数码管直读显示实时温度,温度上下限值用按键设定。
4.温度超出上下限时,蜂鸣器报警。
演示视频:
基于51单片机的温度上下限报警设计
#include <reg51.h> //宏定义
#include <intrins.h> //宏定义
#include <DS18B20.h> //宏定义
#define uchar unsigned char //无符号字符数据8位
#define uint unsigned int //无符号整数
#define SMGIO P0 //定义数码管io口为P0
sbit SET=P1^0; //定义设定上下限键
sbit ADD=P1^1; //定义增加键
sbit DEC=P1^2; //定义减小限键
sbit SMG1=P2^0; //定义数码管第一位
sbit SMG2=P2^1; //定义数码管第二位
sbit SMG3=P2^2; //定义数码管第三位
sbit SMG4=P2^3; //定义数码管第四位
sbit BEEP=P1^7; //定义蜂鸣器报警
uint tempValue; //变量 存储当前温度值
uint HI_Alarm=40; //初始上限
uint LO_Alarm=20; //初始下限
uchar SMG_CC[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0-9编码
uchar SMG_CC_DOT[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //共阴极数码管0-9编码 带小数点
/********************************************************************/
/* 1ms延时 */
/********************************************************************/
void delayms(uint x) //延时函数
{
uchar i; //定义循环变量
while(x--) //开始循环
{
for(i=150;i>0;i--); //循环150次
}
}
void Display_Temperature() //显示温度
{
char smg1,smg2,smg3,smg4; //定义4个数码管变量,以下表示将温度值拆分开
smg1=tempValue/1000; //第一位
smg2=(tempValue-smg1*1000)/100; //第二位
smg3=(tempValue%100)/10; //第三位
smg4=tempValue%10; //第四位
if(tflag==1) //负数显示
{
SMGIO=SMG_CC[smg4]; //显示小数位
SMG4=0; //位选
delayms(1); //延时
SMG4=1; //消隐
SMGIO=SMG_CC_DOT[smg3]; //显示个数位
SMG3=0; //位选
delayms(1); //延时
SMG3=1; //消隐
if(smg2==0)
{
SMGIO=0x40; //显示十数位
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
SMGIO=0x00; //显示百数位
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
}
else
{
SMGIO=SMG_CC[smg2]; //显示十数位
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
SMGIO=0x40; //显示十数位
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
}
}
else //正数显示
{
SMGIO=SMG_CC[smg4]; //显示小数位
SMG4=0; //位选
delayms(1); //延时
SMG4=1; //消隐
SMGIO=SMG_CC_DOT[smg3]; //显示个数位
SMG3=0; //位选
delayms(1); //延时
SMG3=1; //消隐
if(smg1==0) //第一位为0
{
SMGIO=0x00; //不显示
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
if(smg2==0) //第二位为0
{
SMGIO=0x00; //不显示
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
}
else
{
SMGIO=SMG_CC[smg2]; //显示0
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
}
}
else
{
SMGIO=SMG_CC[smg1]; //正常显示第一个数码管
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
SMGIO=SMG_CC[smg2]; //正常显示第二个数码管
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
}
}
}
void Display_HI_Alarm() //显示上限前缀
{
SMGIO=0x76; //显示H
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
SMGIO=0x40; //显示-
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
SMGIO=SMG_CC[HI_Alarm/10]; //显示报警高值十位
SMG3=0; //位选
delayms(1); //延时
SMG3=1; //消隐
SMGIO=SMG_CC[HI_Alarm%10]; //显示报警高值个数位
SMG4=0; //位选
delayms(1); //延时
SMG4=1; //消隐
}
void Display_LO_Alarm() //显示下限前缀
{
SMGIO=0x38; //显示L
SMG1=0; //位选
delayms(1); //延时
SMG1=1; //消隐
SMGIO=0x40; //显示-
SMG2=0; //位选
delayms(1); //延时
SMG2=1; //消隐
SMGIO=SMG_CC[LO_Alarm/10]; //显示报警高值十位
SMG3=0; //位选
delayms(1); //延时
SMG3=1; //消隐
SMGIO=SMG_CC[LO_Alarm%10]; //显示报警高值个数位
SMG4=0; //位选
delayms(1); //延时
SMG4=1; //消隐
}
void SET_KEY() //按键设置
{ bit SET_FLAG=1; //按下标志位
if(SET==0) //设定按键按下
{
delayms(40); //延时去除抖动
if(SET==1) //再次判断是否按下按键
{
while(SET_FLAG==1) //有按键按下
{
Display_HI_Alarm(); //设定上限温度值
if(ADD==0) //增加按键
{
delayms(40); //延时去除抖动再次判断是否按下按键
if(ADD==1) //如果按下
HI_Alarm++; //温度值加一
}
if(DEC==0) //减小按键
{
delayms(40); //延时去除抖动
if(DEC==1) //再次判断是否按下按键
HI_Alarm--; //温度值减一
}
if(SET==0) //以下表示 再次按下设定按键 进入设定下限程序
{
delayms(40); //延时去除抖动
if(SET==1) //再次判断是否按下按键
{
while(1)
{
Display_LO_Alarm(); //设定下限温度值
if(ADD==0) //增加按键
{
delayms(40); //延时去除抖动
if(ADD==1) //再次判断是否按下按键
LO_Alarm++; //温度值加一
}
if(DEC==0) //减小按键
{
delayms(40); //延时去除抖动
if(DEC==1) //再次判断是否按下按键
LO_Alarm--; //温度值减一
}
if(SET==0) //设定按键按下
{
delayms(40);
if(SET==1) //延时去除抖动
{
SET_FLAG=0; //再次判断是否按下按键
break; //上下限设定完成 退出
}
}
}
}
}
}
}
}
}
void BJ_LED() //报警程序
{
if(tempValue>=HI_Alarm*10||tempValue<=LO_Alarm*10) //如果温度超过上下限
BEEP=0; //蜂鸣器报警
else BEEP=1; //否则不报警
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
IC座:DIP40; 万能板:9*15/7*9;
数码管:MT03641AR; 排阻:1K*8;
温度传感器:DS18B20; 蜂鸣器:5V 有源;
三极管:9012; 晶振:11.0592;
电容:22pF; 电容:10uF/16V;
电阻:1K ; 电阻:4.7K ;
按键:6*6*5 ; 自锁开关:8*8 ;
接线端子:5.08*2P ;
导线:若干;
流程图:
设计资料
01 仿真图
本设计使用proteus7.8和proteus8.7两个版本设计,向下兼容,无需担心!具体如图!
温度监控
设定上限
设定下限
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
04 设计报告
九千字设计报告,具体如下!
05 设计资料
资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、开题报告、参考论文、流程图、任务书等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。