基于51单片机的超声波测距模块
实现功能
通过超声波模块进行测距显示在LCD1602上并通过设在程序上设置上下限进行进行超出上下限的报警蜂鸣器
模块
1.89c51
2.lcd1602
3.超声波测距模块
4,蜂鸣器
作者用的是51普中的板
主要模块的介绍
简单介绍一下超声波模块有两个大眼睛怪像外星科技的
HC-SR04超声波模块可提供2cm~400cm的距离感测功能,测量精度可以达到3mm。模块包括超声波发射器,接收器与控制电路。
基本工作原理
采用Trig引脚触发,给至少10us的高电平脉冲信号
模块自动发送8个40kHz的方波,自动检测是否有信号返回
有信号返回,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2
超声波实物图:
接线方式:VCC、trig(控制端)、 echo(接收端)、 GND
距离=(高电平持续时间*声速(340m/s))/2
几个比较重要的函数
LCD显示函数 写着写着发现有些概念还是不太清楚去查了查
/*------------------------------------------------判忙函数
------------------------------------------------*/bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;return (bit)(DataPort & 0x80);//第一括号是强制转换为Bit类型,第二个是返回端口的信息}
/*------------------------------------------------写入命令函数
------------------------------------------------*/void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR;}
/*------------------------------------------------写入数据函数
------------------------------------------------*/void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_();EN_CLR;}/*------------------------------------------------清屏函数
------------------------------------------------*/void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5);}
/*------------------------------------------------写入字符串函数
------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行}else { LCD_Write_Com(0xC0 + x); //表示第二行} while (*s) { LCD_Write_Data( *s); s ++; }}
/*------------------------------------------------初始化函数
------------------------------------------------*/void LCD_Init(void) {LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/}// 超声波起始信号
下面是全部的函数函数比较可以理解滴
#include<reg51.h>
#include<intrins.h>
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
sbit key1=P3^1; //设置按键
sbit key2=P3^0; //加操作按键
sbit key3=P3^2;
sbit key4=P3^3;
sbit speak=P1^5;
sbit tro=P2^1;
sbit echo =P2^0;
bit flag=0;
unsigned int tempH=100,tempL=1;
unsigned char ge,shi,dian;
unsigned char yu1,yu2,yu3,yu_1,yu_2,yu_3;
unsigned int dcm=0;
unsigned char code str[]="0123456789";
unsigned char code str1[]="distance:" ;
#define RS_CLR RS=0
#define RS_SET RS=1#define RW_CLR RW=0
#define RW_SET RW=1 #define EN_CLR EN=0
#define EN_SET EN=1#define DataPort P0void DelayUs2x(unsigned char t)
{ while(--t);
}
void DelayMs(unsigned char t)
{while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}
}
/*------------------------------------------------判忙函数
------------------------------------------------*/bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;return (bit)(DataPort & 0x80);//第一括号是强制转换为Bit类型,第二个是返回端口的信息}
/*------------------------------------------------写入命令函数
------------------------------------------------*/void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR;}
/*------------------------------------------------写入数据函数
------------------------------------------------*/void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_();EN_CLR;}/*------------------------------------------------清屏函数
------------------------------------------------*/void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5);}
/*------------------------------------------------写入字符串函数
------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行}else { LCD_Write_Com(0xC0 + x); //表示第二行} while (*s) { LCD_Write_Data( *s); s ++; }}/*------------------------------------------------初始化函数
------------------------------------------------*/void LCD_Init(void) {LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/}// 超声波起始信号void chaobostart(){tro=1; DelayUs2x(20);tro=0;}//超声波测距初始化
void chaobo_count()
{unsigned int time=0;time=TH0*256+TL0;TH0=0;TL0=0;dcm=(time*1.7)/100;shi=dcm/100;ge=dcm/10%10;dian=dcm%10;if((dcm>=700)||(flag==1)) //超出量程标志{flag=0;LCD_Write_String(9,0,"-.-CM");}else{LCD_Write_Com(0x80+9);LCD_Write_Data(str[shi]);LCD_Write_Com(0x80+10);LCD_Write_Data(str[ge]);LCD_Write_Com(0x80+11);LCD_Write_Data(str[dian]);LCD_Write_Com(0x80+12);LCD_Write_Data('C');LCD_Write_Com(0x80+13);LCD_Write_Data('M');}
}//报警值处理
void baojing()
{
if((dcm>tempH)||(dcm<tempL))speak=~speak;elsespeak=1;
}
//按键处理函数
void keyscan()
{if(!key1){DelayMs(20);if(!key1){while(!key1);tempH++;if(tempH>=200)tempH=0;}}if(!key2){DelayMs(20);if(!key2){while(!key2);tempH--;if(tempH<=0)tempH=0;}}if(!key3){DelayMs(20);if(!key3){while(!key3);tempL++;if(tempL>=100)tempL=0;}}
if(!key4){DelayMs(20);if(!key4){while(!key4);tempL--;if(tempL<=0)tempL=0;}}}
//主函数//void main()
{TMOD=0x01;
TH0=0;
TL0=0;
ET0=1;
EA=1;
speak=1;
LCD_Init(); //初始化
LCD_Clear(); //清屏
LCD_Write_String(0,0,str1);
LCD_Write_String(0,1,"TH:");
LCD_Write_String(9,1,"TL:");
while(1)
{keyscan();yu1=tempH/100;yu2=tempH/10%10;yu3=tempH%10;yu_1=tempL/100;yu_2=tempL/10%10;yu_3=tempL%10;LCD_Write_Com(0xC0+3); //上限阈值显示LCD_Write_Data('0'+yu1);LCD_Write_Com(0xC0+4);LCD_Write_Data('0'+yu2);LCD_Write_Com(0xC0+5);LCD_Write_Data('0'+yu3);LCD_Write_Com(0xC0+12); //下限阈值显示LCD_Write_Data('0'+yu_1);LCD_Write_Com(0xC0+13); LCD_Write_Data('0'+yu_2);LCD_Write_Com(0xC0+14); LCD_Write_Data('0'+yu_3);chaobostart();while(!echo);TR0=1;while(echo);TR0=0;chaobo_count();baojing();DelayMs(100);
} }void timer0() interrupt 1//计数器0的中断{flag=1; //判断条件,如果等于1继续循环,否则跳出循环。}
基于51单片机的超声波测距模块相关推荐
- 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发
基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...
- 基于51单片机HC-SR04超声波测距带温度补偿
基于51单片机HC-SR04超声波测距带温度补偿 1 开发环境 2 功能说明介绍 3 程序 3.1 工程文件 3.2 代码 4 原理图 5 元器件清单 6 PCB 7全部资料 1 开发环境 仿真图:p ...
- 利用51单片机+HC-SR04+51单片机制造超声波测距模块
利用HC-SR04和51单片机制造超声波测距模块 完整的项目链接: https://github.com/linxinloningg/51_chip_core.git 硬件电路分析: 1.HC-SR0 ...
- 基于51单片机的超声波测距及温度补偿
具体实现功能 系统由STC89C52单片机+超声波测距传感器(HC-SR04)+DS18B20温度传感器+LCD1602液晶显示屏+按键+蜂鸣器+电源构成 具体功能:1.LCD1602液晶显示测量的距 ...
- 基于52单片机的超声波测距模块(hc-sr04超声波测距模块+1602液晶显示器)
二年级课设做了超声波测障仪,用的是hc-sr04超声波测距模块+1602液晶显示器和52单片机. 由于自己之前的学习很是不牢固,在课设的时候没少走弯路,最后在第二个周的星期五做了出来,浪费了很多的时间 ...
- 基于51单片机的超声波测距_液位检测_温度检测protues仿真
硬件设计 (末尾附文件) 代码设计 //宏定义 #define uchar unsigned char #define uint unsigned int #define ULint unsigned ...
- 【030】基于51单片机的超声波液位测距报警系统(带温度显示)Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计一份: (2).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计keli ...
- 基于51单片机的超声波避障小车设计(含Proteus仿真)
超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料. 这次主要给大家分享其Proteus仿真部分. 涉及到的模块有:超声波模块(hc-sr ...
- 【031】基于51单片机的超声波倒车雷达系统(带温度显示补偿)Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计一份: (2).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计 ...
最新文章
- Freemarker详细解释
- FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
- java获取密钥长度_java.security.InvalidKeyException:解密期间密钥大小错误
- 你知道JVM内存的那些事吗?
- EasyUI——实现展示后台数据代码
- [深度学习] 自然语言处理 --- BERT模型原理
- php实现标签云,php标签云的实现代码
- PHP生成随机数;订单号唯一
- 标准3层神经网络搭建Demo
- FISCO BCOS(十一)——— FISCO BCOS如何查看账户
- python读取txt每一行存入数组
- 2021-06-21>字体样式风格font
- day14:磁盘管理df/du/fdisk/parted命令
- C语言struct 函数,C语言结构体史上最详细的讲解
- 计算机打字考试的技巧,快速打字有什么技巧
- 【孟子E章】祝大家新年愉快!
- 小米小爱同学触屏版蓝牙MESH功能连接小米蓝牙设备-以小米米家蓝牙温湿度计2为例
- WPS表格excel实现下拉搜索(简单几步,轻松搞定)
- 【矩阵论】01——线性空间——基本概念
- 《Java8实战》第9章 重构、测试和调试
热门文章
- 读书笔记:《敏捷估计与规划》
- feign.RetryableException: Read timed out executing GET http://*****
- 数据预处理之对数变换
- pso解决tsp matlab,计算智能课程设计_粒子群优化算法求解旅行商问题_Matlab实现.doc...
- 跨境电商淘系、阿里巴巴海外站、外贸站搭建,代购系统源码PHP前端源码展示
- 动态规划-leetcode#97-交错字符串
- 【案例分析】从安捷伦的逆袭之路,看供应商管理如何实现双赢
- 在亲生经历被非法APP诈骗中总结经验教训--网络安全
- 成人高考计算机基础知识真题及答案,2015成人高考计算机基础试卷
- mysql差异备份提权_MSSQL差异备份取系统权限的相关软件下载