( proteus仿真+程序+设计报告+讲解视频)
仿真图proteus8.16(有低版本)
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:P11
基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)
基于51单片机的温度报警系统
1、实时检测DS18B20温度测量及显示,超出温度范围蜂鸣器报警,温度报警值可通过按键设定功能;
2、温度测量范围-55到128摄氏度;
3、对上下限报警值进行设定,通过按键设置,设置范围是0-128;
4、温度高于上限或低于下限LCD1602显示屏有相应提示,蜂鸣器响;
5、普中开发板上可以实现效果,仿真和开发板都可以。
(目前仅完全适配普中开发板A234,其他普中开发板型号可能需要做代码修改或接线)
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
P系列单片机设计下载链接(复制到浏览器打开)
https://docs.qq.com/doc/DS2pPenNRaHB6SlR1
以下为本设计资料展示图:
开始仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
共4个按键:上限阈值加、上限阈值减、下限阈值加、下限阈值减。按下对应按键阈值加减并更新阈值在LCD1602液晶屏上。温度高于高温报警值,蜂鸣器响,LCD1602显示High。
温度低于低温报警值,蜂鸣器响,LCD1602显示LOW。
使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。
完整代码见文章下载链接压缩包。有偿
#include "reg51.h"
#include"Ds18b20.h"
#include "lcd1602.h"
#define uchar unsigned char //重定义
#define uint unsigned int
sbit k1=P3^0;//按钮
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit beep=P2^5;//蜂鸣器
uchar time=0,num1=0;//定时
int wendu=0;//温度
uchar Ds_0_flag=0;//0度以上标志位
float tp;
uint down=30,up=80;//阀值
uchar disp1[]="wendu:000 C";
uchar disp2[]="L:000 C H:000 C";
uchar flag=0,beep_flag=0;
void delay(uint i)//延时
{
while(i--)
{
delay_uint(50000);
}
}
void main()
{
disp1[9]=0xdf;
disp2[5]=0xdf;
disp2[14]=0xdf;
init_1602();//初始化液晶
TMOD|=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH1=(65536-50000)/256; //给定时器赋初值,定时50ms
TL1=(65536-50000)%256;
TH0=(65536-5000)/256; //给定时器赋初值,定时5ms
TL0=(65536-5000)%256;
ET1=1;//打开定时器1中断允许
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR1=1;//打开定时器1
TR0=1;//打开定时器0
delay(4);
beep_flag = 0;
while(1)
{
//按键检测
if(!k1)
{
if(down<up-5) //下限阈值要比上限低5℃
down++; //下限阈值+1
while(!k1);
}
if(!k2)
{
if(down>0)
down--; //下限阈值-1
while(!k2);
}
if(!k3)
{
if(up<200)
up++; //上限阈值+1
while(!k3);
}
if(!k4)
{
if(up>down)
up--; //上限阈值-1
while(!k4);
}
}
}
void Timer0() interrupt 1 //定时器0的中断函数
{
TH0=(65536-5000)/256; //重装初值5ms
TL0=(65536-5000)%256;
num1++;
if(num1==1&&beep_flag) //中断1次为5ms
{
num1=0;
beep=~beep; //蜂鸣器报警
}
}
void Timer1() interrupt 3//定时器中断
{
TH1=(65536-50000)/256; //给定时器赋初值,定时50ms
TL1=(65536-50000)%256;
if(time<10)
time++;
else
{
time=0;
wendu=Ds18b20ReadTemp();//测量温度
if(wendu<0){
Ds_0_flag=0;
wendu=wendu-1;
wendu=~wendu;
tp=wendu;
wendu=tp*0.0625+0.5;
disp1[6]='-';//计算温度
disp1[7]=wendu%100/10+0x30;
disp1[8]=wendu%10+0x30;
}else{
Ds_0_flag=1;
tp=wendu;
wendu=tp*0.0625+0.5;
//温度在寄存器中12位,分辨率:0.0625
//加0.5是四舍五入
disp1[6]=wendu/100+0x30;//计算温度
disp1[7]=wendu%100/10+0x30;
disp1[8]=wendu%10+0x30;
}
disp2[2]=down/100+0x30;//计算低阀值
disp2[3]=down%100/10+0x30;
disp2[4]=down%10+0x30;
disp2[11]=up/100+0x30;//计算高阀值
disp2[12]=up%100/10+0x30;
disp2[13]=up%10+0x30;
write_string(1,0,disp1);//显示
write_string(2,0,disp2);
}
if(wendu<down||Ds_0_flag==0){
write_string(1,12,"Low ");
beep_flag = 1;//低温报警
}else if(wendu>up){
write_string(1,12,"High");
beep_flag = 1;//高温报警
}else if((wendu>down)&&(wendu<up)){
write_string(1,12," ");
beep_flag=0;//取消温报警
}
}
7080字设计报告,内容包括目录,硬件设计、软件设计、软硬件框图、调试、结论等
本次课程设计是基于51单片机的温度监控报警系统Proteus仿真设计。在设计中,我们采用了STC89C51/52单片机作为核心控制器,通过温度传感器对环境温度进行实时采集。采集到的温度数据经过单片机处理后,通过数码管显示模块进行实时显示。同时,我们还设置了按键输入模块,可以通过按键进行温度阈值的设定。一旦环境温度超过设定的阈值,系统就会通过蜂鸣器报警模块发出报警声,以提醒用户注意。
51单片机控制LCD1602显示。读取按键控制电平和DS18B20的数据,处理数据并做显示处理和按键操作等。
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、仿真图
2、程序源码注释
3、功能要求
4、开题报告
5、设计报告
6、软硬件流程框图
7、烧录工具
8、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
普中-2&普中-3&普中-4开发板原理图.pdf
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url