51单片机HC-SR04超声波模块距离报警LCD1602显示距离例程

超声波模块就是那最常见的HC-SR04
为了实用,不用每次断电后再设置距离,我后来又加了eeprom存储最新距离设定功能,自己做了个小东西又怕lcd焊接麻烦,所以把lcd代码都注释掉了,基本上应该取消注释就是带lcd显示了,保证能用,目前在用没出现问题



//更新保存上次设置距离到eeprom 保存间隔为每5分钟保存一次  下次开启自动启用上次设置数据


/********************************************************************************************************************
HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能, 测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。
 基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号; 
(2)模块自动发送 8个40khz 的方波,自动检测是否有信号返回; 
(3)有信号返回,通过IO口ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
*********************************************************************************************************************/
#include<reg52.h> 
#include<intrins.h> 
///晶振12M///
#define uchar unsigned char
#define uint unsigned int
//sbit lcdrs=P3^5;          //lcd数据命令选择端  rs为L(ledrs=0)则写命令 H(ledrs=1)则写数据
//sbit lcdrw=P3^6;
//sbit lcden=P3^7;          //lcd使能   lcden=1 则写入 
sbit TRIG = P2^7; //超声波的 TRIG端 //TRIG为控制端
sbit ECHO = P2^6; //超声波的 ECHO端 //ECHO 为接收端 
sbit key1 = P2^2;  //增加距离
sbit key2 = P2^1;  //减少距离
sbit sbeep = P2^3;  //蜂鸣器

#define ReadRomCom 	0x01          //内部E2PROM读 写 擦除命令代码
#define PrgRomCom		0x02
#define EraseRomCom 0x03
#define SAVED 1                   //内部eprom是否已经保存过的标记
#define NOTSAVED 0
#define WaitTime 0x01
sfr ISP_DATA=0xe2;           //ISP寄存器地址
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;


//uchar DisplayData[3];
uchar alarm_dis=30;  //警报距离
//unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
uchar flag = 0; //标志定时器是否溢出
uint count=0;  //计数来存档

///eeprom//
void ISP_IAP_enable()      //打开 ISP IAP功能
{
   
	EA=0;                 //关闭中断功能
	ISP_CONTR=ISP_CONTR & 0X18;          //0001 1000  ISP/IAP 控制寄存器复位 相当于寄存器指令清零?
	ISP_CONTR=ISP_CONTR | WaitTime;          //写入硬件延时 WaitTime 0-3(最后两位分别00 01 10 11) 0等待时间最长 3等待时间最短,过短容易出问题 10M系统时钟建议contr|10  20M系统时钟建议  |01
	ISP_CONTR=ISP_CONTR | 0x80;	              //1000 0000 最高位  ISPEN=1   ISPEN:ISP/IAP功能允许位 1:允许编程改变Flash     ISP_CONTR=0x60 01(1)(软件复位)0 0000 则可以实现从用户应用程序区软件复位到ISP程序区开始运行程序。
}			//ISP_CONTR=0x20 00(1)(软件复位)0 0000 则可以实现从ISP程序区软件复位到用户应用程序区开始运行程序。
void ISP_IAP_disable()         //关闭功能
{
   
	ISP_CONTR=ISP_CONTR & 0x7f;  //01111111   通过&操作符最高位清零  ISPEN=0
	ISP_TRIG=0x00;
	EA
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值