参考:普中51单片机开发攻略-A2 pdf
采用软件:
Proteus7.8:点击下载
Keil5:点击下载
AD:改成嘉立创AD
Visio:点击下载
设计内容:
本设计是基于单片机的锅炉报警系统,主要实现以下功能:
? 可实现LCD1602显示水位、温度和蒸汽压力;
? 可通过按键调整水位、温度和蒸汽压力的阈值;
? 通过超声波测量水位;
? 通过DS18B20测量温度;
? 通过蜂鸣器和指示灯报警
标签:51单片机、LCD1602、超声波测距模块、温度检测模块
学习内容:
STC89C52
LED
按键
蜂鸣器
LCD1602
超声波测距模块
DS18B20温度检测模块
关于代码烧入说明:
第一次烧代码进51单片机芯片,得双击芯片选择keil生成的.hex文件。
之后便是,运行完修改的代码后,直接点击Proteus的停止+运行按钮(很方便):
参考文献:
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电路
头文件格式:
以为延时函数而实现不了,参考文献:
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--);
}
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器。
想要压电式蜂鸣器发声, 需提供一定频率的脉冲信号; 想要电磁式蜂鸣器发声, 只需提供电源即可。
有源蜂鸣器,属于电磁式蜂鸣器类型。
这里说的有源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声, 频率大小通常在 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;
}
}
}
}