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

0、前言

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

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

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

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

关于代码烧入说明:
第一次烧代码进51单片机芯片,得双击芯片选择keil生成的.hex文件。
之后便是,运行完修改的代码后,直接点击Proteus的停止+运行按钮(很方便):
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第1张图片

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

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

插入头文件.h
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第2张图片
添加外部函数+文件
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第3张图片
led.c

#include 

sbit LED = P2 ^ 7;

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

流水灯代码

#include 
#include "delay.h"
//#include 

#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 
#include "delay.h"
#include 

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电路
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第4张图片

【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第5张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第6张图片

2、按键学习

头文件格式:
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第7张图片
以为延时函数而实现不了,参考文献:
http://t.csdnimg.cn/sxwgB

【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第8张图片
硬件电路
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第9张图片
main.c

#include 
#include "delay.h"
#include 

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 之间。 有源蜂鸣器实物图如下图所示:
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第10张图片
如果给有源蜂鸣器加一个 1.5-5KHz 的脉冲信号,同样也会发声,而且改变这个频率,就可以调节蜂鸣器音调, 产生各种不同音色、音调的声音。 如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第11张图片
proteus中的label标签及总线的使用方法:
https://blog.csdn.net/haigear/article/details/121029243

电路
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第12张图片【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第13张图片

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

#include 
#include "delay.h"
#include 

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学习

【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第14张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第15张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第16张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第17张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第18张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第19张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第20张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第21张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第22张图片
【锅炉报警系统】利用AT89C52、Keil5在Proteus做仿真设计_第23张图片

你可能感兴趣的:(STC51单片机,proteus,单片机,嵌入式硬件)