【毕业设计】47-基于单片机的锅炉过热汽温控制系统设计(原理图工程+仿真工程+源代码+答辩论文)


typora-root-url: ./

【毕业设计】47-基于单片机的锅炉过热汽温控制系统设计(原理图工程+仿真工程+源代码+答辩论文)

设计说明书

摘要

本次设计的题目为锅炉过热蒸汽控制系统设计。当前锅炉过热控制系统还在使用传统的人工来进行控制,通过使用温度计对系统的温度检测,如果超过温度手动的方式对系统进行调节。所以本次设计系统针对此问题作出改良,设计一款锅炉蒸汽控制系统,选择使用单片机STC89C52作为系统的主控制器,LCD液晶显示器作为本次系统的信息显示设备,独立按键作为温度的上下限来实现温度的控制,使用ABSD-3014红外温度传感器作为温度检测设备,AD0832作为模数转换设备。通过对系统的电路设计,软件程序编写。在软件与硬件的设计上均通过分功能来进行设计,保证系统设计上方便系统移植和拓展,为后期调试与升级做准备。最后通过仿真的方式实现系统的功能。

原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
答辩论文低重复率文档,29297字
英文文献及翻译

设计框架架构

摘 要… 1

ABSTRACT… 1

1 概述… 1

1.1 完成本题的目的和意义… 1

1.2 国内外研究动态… 1

1.3 研究目标和内容… 2

2 总体方案… 3

2.1 硬件方案的选择… 3

2.1.1 主控芯片的选择… 3

2.1.2 显示器件的选择… 4

2.1.3 模数转换模块的选择… 5

2.1.4 温度传感器选择… 6

2.2 系统总体方案… 6

3 硬件的介绍与搭接… 9

3.1 STC89C52单片机系统设计… 9

3.1.1 STC89C52的概述… 9

3.1.2 STC89C52单片机的最小系统 10

3.2 LCD1602液晶显示电路设计 11

3.3 测温电路的设计… 12

3.4 继电器控制电路设计… 13

3.5 LED电路设计… 14

3.6 独立按键电路的设计… 14

3.7 报警电路设计… 15

4 软件设计… 17

4.1 软件开发环境的介绍… 17

4.2 系统重要函数的介绍… 17

4.2.1 主函数的设计… 17

4.2.2 LCD1602显示函数的设计 19

4.2.3 按键扫描函数的设计… 21

4.2.4 报警函数的设计… 22

4.2.5 数据读取函数的设计… 23

5 系统调试… 25

5.1 系统硬件测试… 25

5.2 系统软件测试… 26

6 结论与心得… 33

参考文献… 34

外文资料… 36

中文译文… 48

致 谢… 57

附件一… 58

附件二… 72

附件三… 73

附件四… 74

设计说明书及设计文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码展示

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"											   

#define     u8  			unsigned char
#define     u16   		unsigned int
#define     uchar  			unsigned char
#define     uint   		unsigned int


uint yushe_yanwu=1000,tihuan;				//ADC预设值

uchar yanwu;					 			//用于读取ADC数据

//运行模式  
uchar Mode=0;				 				//=1是设置温度阀值  =2是设置ADC阀值	=0是正常监控模式
//管脚声明
sbit Led_Reg		 =P2^2;				 //红灯
sbit Led_Yellow  =P2^4;				 //黄灯
sbit Buzzer    	 =P2^0;				 //蜂鸣器
sbit Fan    	 	 =P3^3;				 //
sbit JDQ    	 	 =P3^1;				 //

/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<110;j++);
}
/***********************************************************************************************************
LCD1602相关函数
***********************************************************************************************************/

//LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)
sbit LCDRS = P2^7;
sbit LCDEN = P2^6;
sbit D0		 = P0^0;
sbit D1		 = P0^1;
sbit D2		 = P0^2;
sbit D3		 = P0^3;
sbit D4		 = P0^4;
sbit D5		 = P0^5;
sbit D6		 = P0^6;
sbit D7		 = P0^7;



//LCD延时
void LCDdelay(uint z)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=10;y>0;y--);
}
void LCD_WriteData(u8 dat)	  
{
	if(dat&0x01)D0=1;else D0=0;
	if(dat&0x02)D1=1;else D1=0;
	if(dat&0x04)D2=1;else D2=0;
	if(dat&0x08)D3=1;else D3=0;
	if(dat&0x10)D4=1;else D4=0;
	if(dat&0x20)D5=1;else D5=0;
	if(dat&0x40)D6=1;else D6=0;
	if(dat&0x80)D7=1;else D7=0;
}
//写命令
void write_com(uchar com)
{
  LCDRS=0;				  
	LCD_WriteData(com);
//  DAT=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
//写数据
void write_data(uchar date)
{
  LCDRS=1;
	LCD_WriteData(date);
//  DAT=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}

/*------------------------------------------------
              选择写入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y) 
{     
	if (x == 0) 
	{     
		write_com(0x80 + y);     //表示第一行
	}
	else 
	{      
		write_com(0xC0 + y);      //表示第二行
	}        
}
/*------------------------------------------------
              写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
{     
	SelectPosition(x,y) ;
	while (*s) 
	{     
		write_data( *s);     
		s ++;     
	}
}
//========================================================================
// 函数: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
// 应用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一个字节位置显示366的后4位,显示结果为 0366
// 参数: x:行,y:列,s:要显示的字,l:显示的位数
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 最大显示65535
//========================================================================
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l) 
{     
	SelectPosition(x,y) ;

	if(l>=5)
		write_data(0x30+s/10000%10);	//万位
	if(l>=4)
		write_data(0x30+s/1000%10);		//千位
	if(l>=3)
		write_data(0x30+s/100%10);		//百位
	if(l>=2)
		write_data(0x30+s/10%10);			//十位
	if(l>=1)
		write_data(0x30+s%10);		//个位

}
/*1602指令简介
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x0d);//打开显示 阴影闪烁
  write_com(0x0d);//打开显示 阴影闪烁
*/
//1602初始化
void Init1602()
{
  uchar i=0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏
	
}

void Display_1602(yushe_yanwu,temp)
{
	//显示预设温度

	
	//显示预设ADC
	LCD_Write_Char(0,12,yushe_yanwu,4) ;
	
	
	//时时ADC
	LCD_Write_Char(1,12,temp,4) ;
}



  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值