历史上的今天
今天是:2024年12月18日(星期三)
2019年12月18日 | 我的单片机超声波测距课程设计
2019-12-18 来源:51hei
制作出来的实物图如下:

电路原理图如下:
原理图
一、作品简介
以51单片机为核心,利用超声波传感器对障碍物进行距离测量并将结果发送到液晶显示屏上,并可以设定距离,当数据高于预警值时可以进行声光报警。
二、设计原理
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
三、功能说明
设计单片机最小系统,供电电路有上电指示功能,采用串口下载程序,USB供电,具有复位功能。采用超声波传感器,能够实现对障碍物距离的测量;采用液晶显示,能够对测量的距离进行显示。
有报警电路,能够实现对预警值的设置,同时当数据高于设定预警距离的时候可以进行声光报警(有声音报警,并且通过红绿的指示灯对非正常和正常情况进行报警)。
Altium Designer画的原理图和PCB图如下:
软件:KEIL5、altium proteus
仿真内容:LCD1602显示,超声波测距(程序非阻塞方式,使用外部中断,平均值滤波更精准)真机测试:正常,使用HC-SRF04超声波测距模块(测距范围:4-450cm),STC89C52单片机。
//超声波管脚定义
sbit RX=P3^3;
sbit TX=P3^2;
//超声波初始化
void Init_ultrasonic_wave()
{
TX=0; //关闭发射
TMOD=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
}
//启动超声波
void StartModule() //启动模块
{
TX=1; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
//距离计算 SD为当时的超声速度
void Conut()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
L_=(time*3.49)/200; //算出来是CM;
//距离大于200或者超时
if(L_>500||flags==1)
{
flags=0;
//无效显示
flag1s=0;
L_=0;
FW=1;
Feng_Start();
}
//距离小于100
else if(L_<=500)
{
flag1s=1;
FW=1;
Feng_Stop();
}
史海拾趣
|
我军建国以来到21世纪初的军用电台 50年代,71型报话机 第一代我国生产的无线电台 “英雄儿女”中王成高喊:“向我开炮”用的就是71型报话机。 50年代,我国建国后第一批自行研制生产的短波电台,广泛用于抗美援朝战场 由于当时的报废销毁执行 ...… 查看全部问答> |
|
各位大侠 小弟项目中用到ARM(s3c44b0)的网口扩展功能,在主程序中是通过中断形式应用的,最要命的是我不怎么懂那些协议,什么ARP,TCp,我所要建立的连接应该是可靠性连接,但是我看别人的程序,大概是要根据各个包的形式,做一些判断,然后建立 ...… 查看全部问答> |
|
很多ce下流式驱动的xxx_Read和xxx_Write都留空而把相应的代码放在xxx_IOCtrol中,这只是因为习惯问题还是因为ReadFile之类调用会先经过文件系统层然后再转给设备管理层没有DeviceIoControl直接通过设备管理层效率高??… 查看全部问答> |
|
void change(char data *pr,char data *pt); //c主程序声明 void main(void) { char data *a,*b,x,y; //定义使用变量 //设定串口的数据传输 ...… 查看全部问答> |
|
怎么理解 ?????????????????????????????????????????????????????????????????? 8051的停止位怎么设置? -------------------------------------------------------------------------------- 发布时间: 2006-12-15 ; 上次回复: 2006-12-15; 总计回复: 1人次 -------------------------------------------------------------- ...… 查看全部问答> |
|
本人是通过dos加载vxload再加载bootrom然后从网络下载VxWorks启动 但由于重装了系统,从新制作了bootrom,出现了一个怪问题 启动时总是到loading完vxworks后,显示 starting at 0x1008000....然后就停在那了,不知哪位高手指点一下,看哪出了问 ...… 查看全部问答> |
|
LM3S8962学习笔记1——快速了解LM3S8962微处理器 快速了解LM3S8962微处理器 自从脱离了汇编时代,人们学习微控器的方法就发生了重大的改变,以前必须了解微控器内部每个寄存器的地址控制方式和指令等,必须深入挖掘控制器内部的角角落落才能算是了解掌握。 但是C的出现,让我们不必去弄清繁杂的 ...… 查看全部问答> |
|
在Altera的FPGA里用了一个PLL,希望产生一个相位差为180度的时钟,就是和原来的时钟反向,但发现出来的时钟和原时钟相位不是我期望的180度。那位知道该怎么办呢 ?… 查看全部问答> |
|
大家好,我的U盘写扇区函数,假如整个扇区都写0x55,但只能有些字节变为0x55,有些字节改变为其他值。大家有没有相关的经验? 我把函数贴出来。应该标的很明白,按UFI协议编的,查了几遍流程,流程应该符合UFI uint8_t MassStorageDevSectWr ...… 查看全部问答> |




