51单片机锅炉监控系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)
- 1.主要功能:
- 讲解视频
- 2.仿真
- 3. 程序代码
- 4. 原理图
- 5. 设计报告
- 6. 设计资料内容清单&&下载链接
- 资料下载链接(可点击):
51单片机锅炉监控系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)
仿真图proteus7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0056
1.主要功能:
基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)
1.系统实时通过LCD1602显示水位检测值,锅炉炉膛温度值,锅炉内部压力值。
2、可对锅炉的水位上下限、炉膛温度上下限、压力上下限进行设置,第一行显示上限值,第二行显示下限值。
3、如果水位、温度、压力过限则蜂鸣器报警,通过LED指示报警类型。
4、默认水位下限值10cm,上限值40cm,压力下限值30kPa,压力上限值50kPa,温度下限值5℃,温度上限值105℃。
5、温度传感器使用DS18B20;水位传感器使用电位器模拟;压力传感器使用MPX4115。
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
以下为本设计资料展示图:
讲解视频
51单片机锅炉监测报警系统设计( proteus+程序+原理图+报告+讲解)
2.仿真
开始仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
开始仿真后,调整温度变大,当温度106℃大于温度上限值105℃后蜂鸣器报警,温度上限指示灯亮起报警。
调整温度变小,当温度4℃小于温度下限值5℃后蜂鸣器报警,温度下限红灯报警亮起。
仿真中通过按键调整MPX4115压力传感器的值改变显示数值。调整压力变小,当压力调整到52kPa大于上限值,蜂鸣器报警,气压上限红灯报警亮起。
调整压力变小,当压力调整到26kPa低于下限值,蜂鸣器报警,气压下限红灯报警亮起。
仿真中通过按键调整RV2滑动变阻器模拟水位传感器的阻值随水位高低变化。上下箭头用于改变阻值的值。下箭头调低数值,上箭头调高数值。
调整水位变低,当水位调整到9CM低于下限值10CM,蜂鸣器报警,水位下限红灯报警亮起。
调整水位变高,当水位调整到41CM高于上限值40CM,蜂鸣器报警,水位上限红灯报警亮起。
开始仿真后,可以通过矩阵键盘的设置按键进入设置模式调整默认水位下限值、上限值、压力下限值、压力上限值、温度下限值和温度上限值。进入设置模式后LCD1602第一行显示上限值,第二行显示下限值。设置完成通过OK按键退出设置。
以上仿真结果均符合设计要求。
3. 程序代码
使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。
mian函数:
#include "reg51.h"
#include"Ds18b20.h"
#include "ADC0832.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^3;
sbit led4=P3^4;
sbit led5=P3^5;
sbit led6=P3^6;
//定义引脚
sbit beep=P3^7;//蜂鸣器
//公共变量
uchar time=0;
uchar mode=0;//测量模式、设置模式
//存储变量
uchar water=0;//水位
uchar press=0;//压力
int wendu=0;//温度
uchar water_L=10,water_H=40;//报警值
uchar press_L=30,press_H=50;
uchar wendu_L=5,wendu_H=105;
//显示变量
uchar hang1[]="war:000cm ";//水位
uchar hang2[]="T:000 C P:000kPa";
uchar hang3[]="0000 ";
//矩阵键盘 无按键按下,返回0 按键值1-16
uchar key_scan()//按键检测
{
uchar i,j;
i=0;
j=0;
P1=0x0f;
if(P1!=0x0f) //检测有无按下
{
switch(P1)//检测行
{
case 0x0e:i=1;break;
case 0x0d:i=5;break;
case 0x0b:i=9;break;
case 0x07:i=13;
}
P1=0xf0;
switch(P1)//检测列
{
case 0xe0:j=0;break;
case 0xd0:j=1;break;
case 0xb0:j=2;break;
case 0x70:j=3;
}
while(P1!=0xf0);//等待按键松开
}
return i+j;
}
//主函数
void main()
{
uchar key=0;//按键值
hang2[5]=0xdf;//圈
Ds18b20Init();//传感器初始化
init_1602();
TMOD|=0X01;
TH0=0X3C;//50ms (65536-50000)/256
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
key=key_scan();//按键检测
if(key==13)//模式切换
mode=1;
if(key==14)
mode=0;
if(mode==1)//设置模式
{
if(key==1)//水位L加
{
if(water_L<water_H)
water_L++;
}
if(key==2)//水位L减
{
if(water_L>0)
water_L--;
}
if(key==3)//水位H加
{
if(water_H<100)
water_H++;
}
if(key==4)//水位H减
{
if(water_H>water_L)
water_H--;
}
//==================
if(key==5)//温度L加
{
if(wendu_L<wendu_H)
wendu_L++;
}
if(key==6)//温度L减
{
if(wendu_L>0)
wendu_L--;
}
if(key==7)//温度H加
{
if(wendu_H<100)
wendu_H++;
}
if(key==8)//温度H减
{
if(wendu_H>wendu_L)
wendu_H--;
}
//==================
if(key==9)//压力L加
{
if(press_L<press_H)
press_L++;
}
if(key==10)//压力L减
{
if(press_L>0)
press_L--;
}
if(key==11)//压力H加
{
if(press_H<100)
press_H++;
}
if(key==12)//压力H减
{
if(press_H>press_L)
press_H--;
}
}
}
}
//定时器0中断
void Timer0() interrupt 1
{
uchar i;
if(time<10)//0.5s测量一次
time++;
else
{
time=0;
water=ADC(1);//测量
press=ADC(2);
wendu=Ds18b20ReadTemp();
//报警判断
i=0;
if(water>water_H)//水位超过上限值
{
i++;//i作为蜂鸣器报警标志位
led2=0;//led低电平点亮
}
else
led2=1;//led高电平点熄灭
if(water<water_L)//水位低于下限值
{
i++;//i作为蜂鸣器报警标志位
led1=0;//led低电平点亮
}
else
led1=1;//led高电平点熄灭
if(press>press_H)//压力
{
i++;
led6=0;
}
else
led6=1;
if(press<press_L)
{
i++;
led5=0;
}
else
led5=1;
if(wendu>wendu_H)//温度
{
i++;
led4=0;
}
else
led4=1;
if(wendu<wendu_L)
{
i++;
led3=0;
}
else
led3=1;
if(i>0)//蜂鸣器报警标志位大于1
beep=0;//蜂鸣器响
else
beep=1;//蜂鸣器停
//显示计算
hang1[4]=water/100+0x30;//水位
hang1[5]=water%100/10+0x30;
hang1[6]=water%10+0x30;
hang2[2]=wendu/100+0x30;//温度
hang2[3]=wendu%100/10+0x30;
hang2[4]=wendu%10+0x30;
hang2[10]=press/100+0x30;//压力
hang2[11]=press%100/10+0x30;
hang2[12]=press%10+0x30;
//显示清零
// write_string(1,0," ");
// write_string(2,0," ");
//测量模式显示
if(mode==0)
{
write_string(1,0,hang1);
write_string(2,0,hang2);
}
else//设置模式显示
{
//显示水位
hang3[0]='W';//上限
hang3[1]=water_H/100+0x30;
hang3[2]=water_H%100/10+0x30;
hang3[3]=water_H%10+0x30;
write_string(1,0,hang3);
hang3[0]=' ';//下限
hang3[1]=water_L/100+0x30;
hang3[2]=water_L%100/10+0x30;
hang3[3]=water_L%10+0x30;
write_string(2,0,hang3);
//显示温度
hang3[0]='T';//上限
hang3[1]=wendu_H/100+0x30;
hang3[2]=wendu_H%100/10+0x30;
hang3[3]=wendu_H%10+0x30;
write_string(1,6,hang3);
hang3[0]=' ';//下限
hang3[1]=wendu_L/100+0x30;
hang3[2]=wendu_L%100/10+0x30;
hang3[3]=wendu_L%10+0x30;
write_string(2,6,hang3);
//显示压力
hang3[0]='P';//上限
hang3[1]=press_H/100+0x30;
hang3[2]=press_H%100/10+0x30;
hang3[3]=press_H%10+0x30;
write_string(1,12,hang3);
hang3[0]=' ';//下限
hang3[1]=press_L/100+0x30;
hang3[2]=press_L%100/10+0x30;
hang3[3]=press_L%10+0x30;
write_string(2,12,hang3);
}
}
TH0=0X3C;//50ms
TL0=0XB0;
}
4. 原理图
原理图使用AD绘制,可供实物参考。
Proteus仿真和实物作品的区别:
1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。
2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。
电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。
3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。
4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。
5. 设计报告
7506字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等
6. 设计资料内容清单&&下载链接
资料下载链接(可点击):
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、仿真图
2、程序源码
3、开题报告
3、原理图
5、功能要求
6、元器件清单
7、设计报告
8、软硬件流程框图
9、讲解视频
Altium Designer 软件资料
KEIL软件资料
Proteus软件资料
单片机学习资料
答辩技巧
设计报告常用描述
鼠标双击打开查找更多51 STM32单片机课程毕业设计.url