b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[如何使用MCU超声波模块]

电脑杂谈  发布时间:2020-03-25 09:19:18  来源:网络整理

声波探测仪原理_声波牙刷原理_超声波模块工作原理

第二年级配备了超声波障碍物检测器,该检测器使用HC-SR04超声波测距模块+ 1602 LCD显示屏和52台单片机.

由于我以前的学习非常薄弱,所以在课程设置期间我没有走弯路,最后在第二周的星期五上了课,这浪费了很多时间,所以我考虑写这本书可以使人加强一个人的理解,另一个人可能会帮助别人.

HC-SR04超声波模块的工作原理

(1). 使用IO端口触发测距并提供至少10us的高电平脉冲;

(2). 该模块自动发送八个40khz方波,并自动检测是否有波返回;

(3)返回信号时,通过IO端口输出高电平,该高电平的持续时间是从发送超声波到返回超声波的时间;

(4)测距公式: 距离=(高电平时间*声速)/ 2;

(5)超声模块的时序图如图6所示:

图6: 超声模块时序图

(模块的原理非常重要. 只有了解了该原理之后,您才能做想要做的事情)

程序的核心在于中断,即微控制器中的计数器被中断.

特定程序分为两部分: 1602显示部分和主程序(见下文)

1602程序基本上是一些简单的计时问题.

首先初始化1602并定义1602相应接口的接线方法. 然后执行写命令和写数据操作,最后将距离数(3位以厘米为单位)输出到LCD上为303. 分开的数字,最后输出单位cm.

#include“ lcd.h”

/ ************************************************** ****** **************************************

*函数名称: Lcd1602_Delay1ms

*功能: 延迟功能,延迟1毫秒

*输入: c

*输出: 无

*名称: 该功能是12MHZ晶振下12分频微控制器的延迟.

************************************************ *** ********************************* /

void Lcd1602_Delay1ms(uint c)//错误0ms

{

uchar a,b;

for(; c> 0; c-)

{

对于(b = 199; b> 0; b-)

{

for(a = 1; a> 0; a-);

}

}

}

/ ************************************************** ****** **************************************

*函数名称: LcdWriteCom

*功能: 将字节写入LCD的命令

*输入: com

*输出: 无

************************************************ *** ********************************* /

#ifndef LCD1602_4PINS // //未定义此LCD1602_4PINS

void LcdWriteCom(uchar com)//编写命令

{

LCD1602_E = 0; //启用

声波牙刷原理_超声波模块工作原理_声波探测仪原理

LCD1602_RS = 0; //选择发送命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com; //放置命令

Lcd1602_Delay1ms(1); //等待数据稳定

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteCom(uchar com)//编写命令

{

LCD1602_E = 0; //启用清除

LCD1602_RS = 0; //选择写入命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com; //由于4位接线连接到端口P0的高四位数字,因此不需要更改高四位数字.

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

LCD1602_DATAPINS = com << 4; //发送低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

/ ************************************************** ****** **************************************

*函数名称: LcdWriteData

*功能: 向LCD写入一个字节的数据

*输入: dat

*输出: 无

************************************************ *** ********************************* /

#ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0; //启用清除

LCD1602_RS = 1; //选择输入数据

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat; //写入数据

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

声波牙刷原理_声波探测仪原理_超声波模块工作原理

#else

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0; //启用清除

LCD1602_RS = 1; //选择写入数据

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat; //由于4位接线连接到端口P0的高四位数字,因此不需要更改高四位数字.

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

LCD1602_DATAPINS = dat << 4; //写低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时间

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

/ ************************************************** ****** **************************************

*函数名称: LcdInit()

*功能: 初始化LCD屏幕

*输入: 无

*输出: 无

************************************************ *** ********************************* /

#ifndefLCD1602_4PINS

void LcdInit()// LCD初始化子程序

{

LcdWriteCom(0x38); //打开显示

LcdWriteCom(0x0c); //在没有光标的情况下显示

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清除屏幕

LcdWriteCom(0x80); //设置数据指针的起点

}

#else

void LcdInit()// LCD初始化子程序

{

LcdWriteCom(0x32); //将8位总线转换为4位总线

LcdWriteCom(0x28); //在四位行下初始化

LcdWriteCom(0x0c); //在没有光标的情况下显示

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清除屏幕

LcdWriteCom(0x80); //设置数据指针的起点

}

#endif

声波牙刷原理_声波探测仪原理_超声波模块工作原理

主程序: 主程序的核心是中断.

首先,初始化微控制器的IO端口,1602 LCD的初始化和超声模块的初始化. 在初始化的同时,打开计时器超声波模块工作原理,打开内部中断并开始计数操作. 超声波输入端子接收到返回波后,内部中断关闭,计数停止. 然后根据记录的时间(s = time * 340 / 2m)计算出被测物体的距离.

/ ************************************************** ****** **********************************************

* LCD1602 LCD显示超声波测试距离*

实现现象: 下载程序后,将LCD1602液晶插入开发板上并显示

************************************************ *** ****************************************** /

#include“ reg52.h” //此文件中定义了微控制器的一些特殊功能寄存器

#include“ lcd.h”

#include“ intrins.h”

typedef unsigned int u16; //数据类型的声明定义

typedef unsigned char u8;

位触发= P2 ^ 1;

位回波= P2 ^ 0;

位密钥= P1 ^ 1;

位密钥1 = P3 ^ 2;

位led = P1 ^ 0;

u16时间= 0,S = 0;

/ ************************************************** ****** **************************************

*函数名称: main

*功能功能: 主要功能

*输入: 无

*输出: 无

************************************************ *** ********************************* /

void Time_Init()

{

TMOD = 0x01; //将T0设置为模式1超声波模块工作原理,GATE = 1;

TH0 = 0;

TL0 = 0;

EA = 1;

TR0 = 0;

}

void Conut(void)

{

Trig = 1; //一次启动模块

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

超声波模块工作原理_声波探测仪原理_声波牙刷原理

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

_nop _();

Trig = 0;

while(!Echo);

TR0 = 1;

while(Echo);

TR0 = 0;

时间= TH0 * 256 + TL0;

TH0 = 0;

TL0 = 0;

S =(时间* 1.7)/ 100; //计算为CM

}

void delayms(u16 xms)

{

u8 i,j;

for(i = 0; i <110; i ++)

for(j = 0; j

}

void main(void)

{

Time_Init();

LcdInit();

同时(1)

{

Conut();

LcdWriteData((S / 100)+ 0x30);

LcdWriteData((S / 10)+ 0x30);

LcdWriteData((S)+ 0x30);

LcdWriteData('C');

LcdWriteData('M');

延迟(20);

LcdWriteCom(0x80); //设置数据指针的起点

}

}

无效Time0()中断1

{

回声= 1;

}

硬件仿真图如下:

我希望它会有所帮助. .


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-151620-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 林明寛
        林明寛

        大陆媒体现在最起码没有抹黑台湾

      热点图片
      拼命载入中...