IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 超声波测距蓝牙显示 -> 正文阅读

[嵌入式]超声波测距蓝牙显示

代码是基于STC89C52RC单片机芯片写的,有些地方引脚定义不同根据情况更换即口

HCSR04模块
在这里插入图片描述

超声波HCSR04模块的工作原理其实还是较为简单的,我们只需要通过IO口给超声波模块的Trig口一个至少10us的高电平信号,然后这个模块会自动发送8个40KHZ周期电平的脉冲并检测回波,回响信号的脉冲宽度和所测距离成正比。
我们都知道声音的传播速度是340m/s,声波碰到障碍物后再返回收到回波的时间我们知道了,那我们就可以通过公式
distance=(1.7*Time)/100 来计算距离。

void HC_SR04start()//超声波模块启动
{
	HCSR04_Trig=1;
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	HCSR04_Trig=0;
}
void DistanceCount()
{
	Time=TH0*256+TL0; //计算超声波碰到障碍后再返回所需要的时间
	TH0=0;
	TL0=0;//定时器重新清零,方便下一次计算
	distance=(1.7*Time)/100;//距离计算 单位cm,340m/s=0.034cm/us
	TI=1;//串口发送中断打开
	if(distance>=450)
	{
		printf("erro");//超过最大测距距离,显示错误
	}
	printf("distance=%5.2fcm\n",distance);//显示距离
	TI=0;//串口发送中断关闭
}

蓝牙部分我是用的11.0592MHZ的晶振与蓝牙模块进行通讯的。12MHZ的晶振由于误差太大会无法通讯,我们可以用自己去算一下
在这里插入图片描述
12MHZ的9600的波特率情况下TH1=0XFD=253,这样每个6us就会溢出一次,溢出率为1/6=0.16666666666666666666666666666667,约去几位小数为0.166666MHZ=166,666HZ,再除以16得10,416.6HZ
(10416-9600)/9600=0.85,得到误差为8.5%,误差太大了,根本就不能够正常通信,而11.0892MHZ的波特率误差就特别小
在这里插入图片描述
关于数据的传输我们只需要在HCSR04的距离计算模块把发送中断打开,把数据用printf函数发送过去后再 关闭即可。但是这样蓝牙会不断的发送数据。要是不习惯的话也可以写一个串口接发数据中断函数,手机蓝牙发送指令后用switch函数接受完成相应功能(由于懒就没写了)
工程完整源代码

#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>

//引脚定义
sbit HCSR04_Trig=P2^0;
sbit HCSR04_Echo=P2^1;

unsigned int Time;
double distance;
bit flag=0;

void Delay50ms()		//@12.000MHz  延迟50ms
{
	unsigned char i, j;

	i = 98;
	j = 67;
	do
	{
		while (--j);
	} while (--i);
}

/**
  * @brief  超神波测距模块开始工作  
  * @param  无
  * @retval 无
  */
void HC_SR04start()
{
	HCSR04_Trig=1;
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	_nop_();  _nop_();  _nop_();  _nop_(); 
	HCSR04_Trig=0;
}

/**
  * @brief  定时器0初始化函数
  * @param  无
  * @retval 无
  */
void Timer0_Init()
{
	TMOD&=0XF0;  //设置定时器模式
	TMOD|=0X01;  //设置定时器模式
	TH0=0;  //设置定时器初值
	TL0=0;  //设置定时器初值
	TF0=0;  //中断标志为清零
	ET0=1;  //中断打开
	EA=1;
}

void UART_Init(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}


/**
  * @brief  超射波测距离
  * @param  无
  * @retval 无
  */
void DistanceCount()
{
	Time=TH0*256+TL0; //计算超声波碰到障碍后再返回所需要的时间
	TH0=0;
	TL0=0;//定时器重新清零,方便下一次计算
	distance=(1.7*Time)/100;//距离计算 单位cm,340m/s=0.034cm/us
	TI=1;//串口发送中断打开
	if(distance>=450)
	{
		printf("erro");//超过最大测距距离,显示错误
	}
	printf("distance=%5.2fcm\n",distance);//显示距离
	TI=0;//串口发送中断关闭
}

void  main()
{
	Timer0_Init();//定时器0初始化
	UART_Init();//串口初始化
	while(1)
	{
		HC_SR04start();//超声波模块开始工作
		while(HCSR04_Echo==0);//如果HCSR04_Echo的电平为0则等待,为1跳出循环
		TR0=1;//打开计时器
		while(HCSR04_Echo==1);//如果HCSR04_Echo的电平为1则等待,为0跳出循环
		TR0=0;//关闭计时器
		DistanceCount();//距离计算
		Delay50ms();
	}
}

void Timer0_Routine() interrupt 1
{
	flag=1;
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:25:42  更:2021-09-13 09:26:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 11:04:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码