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)/256TL0=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低电平点亮}elseled2=1;//led高电平点熄灭if(water<water_L)//水位低于下限值{i++;//i作为蜂鸣器报警标志位led1=0;//led低电平点亮}elseled1=1;//led高电平点熄灭if(press>press_H)//压力{i++;led6=0;}elseled6=1;if(press<press_L){i++;led5=0;}elseled5=1;if(wendu>wendu_H)//温度{i++;led4=0;}elseled4=1;if(wendu<wendu_L){i++;led3=0;}elseled3=1;if(i>0)//蜂鸣器报警标志位大于1beep=0;//蜂鸣器响elsebeep=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;//50msTL0=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