这些功能的实现的核心是超声波测距功能的实现。
HC-SR04超声模块的工作原理为:给超声波至少10us的高电平,一般最好是20us的,模块的trig端会自动产生8个40kHz的矩形脉冲,反馈给ECHO端,产生高电平信号。利用定时器计时。距离S=time*1.7.
所有功能的实现分为了几个模块:LCD显示模块、超声波测距模块、键盘扫描模块、最小距离设置模块、报警模块、串口通信模块。
LCD显示模块:初始化、判忙、写入读写数据。
超声波测距模块:检测、计算、定时器的初始化
键盘扫描模块:在这个模块中采取了与以往不同的方式,直接分为行与列的扫描,减少了程序的复杂程度,更易理解。给了一个flag值,来判断按键是否按下。
最小距离设置模块:上一个键盘扫描的返回值给到这个模块中,按下按键设置超声波测距模块测距的最小值s1,若距离,s<s1,则蜂鸣器鸣响,LCD显示error。
程序:
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0,0,0,0,
7,8,9,0,
4,5,6,0,
1,2,3,0};
uchar code table1[]={0,0x3d-0x30,0x01-0x30,0x2f-0x30,
7,8,9,0x2a-0x30,
4,5,6,0x2d-0x30,
1,2,3,0x2b-0x30};
uchar code table2[]={" error "};
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
sbit trig=P2^5;
sbit Echo=P2^4;
sbit beep=P1^5;
bit flag;
uint time,KeyValue,key;
uint S,a=0,s1;
void delay(uchar a)
{
uchar i;
while(a--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********ÅÐ溯Êý********/
void lcd_mang()
{
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
_nop_();