【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计

发布时间:2024年01月18日

0、前言

参考:普中51单片机开发攻略-A2 pdf

采用软件:
Proteus7.8:点击下载
Keil5:点击下载
AD:改成嘉立创AD
Visio:点击下载

设计内容:
本设计是基于单片机的锅炉报警系统,主要实现以下功能:
? 可实现LCD1602显示水位、温度和蒸汽压力;
? 可通过按键调整水位、温度和蒸汽压力的阈值;
? 通过超声波测量水位;
? 通过DS18B20测量温度;
? 通过蜂鸣器和指示灯报警
标签:51单片机、LCD1602、超声波测距模块、温度检测模块

学习内容:
STC89C52
LED
按键
蜂鸣器
LCD1602
超声波测距模块
DS18B20温度检测模块

关于代码烧入说明:
第一次烧代码进51单片机芯片,得双击芯片选择keil生成的.hex文件。
之后便是,运行完修改的代码后,直接点击Proteus的停止+运行按钮(很方便):
在这里插入图片描述

1、LED学习(如何使用Proteus+keil)

参考文献:
https://zhuanlan.zhihu.com/p/153343621
http://t.csdnimg.cn/9Qssq

插入头文件.h
在这里插入图片描述
添加外部函数+文件
在这里插入图片描述
led.c

#include <reg52.h>

sbit LED = P2 ^ 7;

void main()
{
	while (1)
	{
		LED = 0;
	}
}

流水灯代码

#include <reg52.h>
#include "delay.h"
//#include <intrins.h>

#define FLED P2
sbit LED = P2^6;
sbit KEY = P1^2;
sbit BEEP = P2^7;

typedef unsigned int u16;
typedef unsigned char u8;

void main(void)
{
	u8 i;
	FLED = ~0x00;
	BEEP = 0;
	
	while(1)
	{
		for(i=0;i<6;i++)
		{
			FLED = ~(0x01<<i);
			delayms(500);
		}
	}
}

利用_cror_(a,b)左右移函数实现流水灯代码:

#include <reg52.h>
#include "delay.h"
#include <intrins.h>

sbit FLED = P2;
sbit LED = P2^6;
sbit KEY = P1^2;
sbit BEEP = P2^7;

typedef unsigned int u16;
typedef unsigned char u8;

void main(void)
{
	u8 i;
	FLED = ~0x01;
	BEEP = 0;
	
	while(1)
	{
		for(i=0;i<7;i++)  //左移
		{
			FLED = _crol_(FLED,1);
			delayms(500);
		}
		
		for(i=0;i<7;i++)  //右移
		{
			FLED = _cror_(FLED,1);
			delayms(500);
		}
	}
}

Proteus电路
在这里插入图片描述

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

2、按键学习

头文件格式:
在这里插入图片描述
以为延时函数而实现不了,参考文献:
http://t.csdnimg.cn/sxwgB

在这里插入图片描述
硬件电路
在这里插入图片描述
main.c

#include <reg52.h>
#include "delay.h"
#include <intrins.h>

sbit LED = P2^6;
sbit KEY = P1^2;

void main(void)
{
	while(1)
	{
		if(KEY == 0)
		{
			delay_ms(100);
			if(KEY == 0)
			{
				LED = ~LED;
			}
		}
	}
}

delay.h

#ifndef _DELAY_h_
#define _DELAY_h_

void delay_ms(unsigned int xms); //delay x ms

#endif

delay.c

#include "delay.h"

void delay_ms(unsigned int xms) //delay x ms
{
	unsigned int x,y;
	for(x=xms;x>0;x--)
		for(y=124;y>0;y--);
}

3、蜂鸣器学习

蜂鸣器主要分为压电式蜂鸣器电磁式蜂鸣器
想要压电式蜂鸣器发声, 需提供一定频率的脉冲信号; 想要电磁式蜂鸣器发声, 只需提供电源即可。
有源蜂鸣器,属于电磁式蜂鸣器类型。
这里说的有源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声, 频率大小通常在 1.5-5KHz 之间。 有源蜂鸣器实物图如下图所示:
在这里插入图片描述
如果给有源蜂鸣器加一个 1.5-5KHz 的脉冲信号,同样也会发声,而且改变这个频率,就可以调节蜂鸣器音调, 产生各种不同音色、音调的声音。 如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。
在这里插入图片描述
proteus中的label标签及总线的使用方法:
https://blog.csdn.net/haigear/article/details/121029243

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

Proteus的蜂鸣器beep不响?
一直没弄明白。。。。
看了个视频又响了。。。。

#include <reg52.h>
#include "delay.h"
#include <intrins.h>

sbit LED = P2^6;
sbit KEY = P1^2;
sbit BEEP = P2^7;

void main(void)
{
	while(1)
	{
		if(KEY == 0)
		{
			delayms(5); //消抖
			if(KEY == 0)
			{
				BEEP = ~BEEP;
				LED = ~LED;
			}
		}
	}
}

4、LCD1602学习

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

文章来源:https://blog.csdn.net/m0_48808835/article/details/135457672
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。