1.题目要求
我们在第九章第3讲的例程基础上,实现用超声波模块模拟倒车雷达报警的功能,当障碍物距离超声波模块小于等于10cm左右我们就用蜂鸣器鸣叫产生报警,大于10cm就不报警。代码上添加的程序量比较少,我们只是把定时时间改为200微秒好使蜂鸣器鸣叫的比较尖锐。
2.main.c测试代码
#include #include //详见第六章第8讲#include //详见第八章第11讲#include
sbit TRIG = P2^0;
sbit ECHO = P2^1;
u8 FLAG=0,BEEP_FLAG=0;
void delay_20us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void main()
{
u16 time_data,CM_data;
TRIG = 0;
ECHO = 0;
LED_Init(); //初始化LED硬件模块
EA = 1; //闭合总中断开关
TIM1_Init(100,34); //定时100us,这是为了使蜂鸣器鸣叫的比较尖锐,34是微调使定时精度更高,每次微调都由中断函数里的内容而决定
TMOD &= 0xF0;
TMOD |= 0x01;
ET0 = 1;
while(1)
{
TH0 = 0;
TL0 = 0;
FLAG = 0; //上次如果是超出测量范围,FLAG被置1,这次再测就要清0
//启动发射声波
TRIG = 1;
delay_20us();
TRIG = 0;
while(!ECHO); //声波开始发射,ECHO引脚拉高退出这个循环
TR0 = 1; //打开定时器进行计数
while(ECHO); //收到声波返回来的信号引脚就拉低,退出这个循环,如果定时器溢出,就会进入中断函数执行“FLAG=1;”也就是距离太远,一直没有收到反射回来的信号
TR0 = 0; //关闭定时器结束计数
time_data =TH0;
time_data=(time_data<<8)|TL0; //把两个八位的寄存器里的值组成一个16位变量的值,也就是定时器计数值
CM_data = time_data/54; //得到厘米的表达式
if(FLAG==1){ShowNumber(999); delay_ms(20);} //超出测量范围显示999,延时为的是不让数码管频繁在两个数的偏差之间变化太频繁
else {ShowNumber(CM_data); delay_ms(20);}
if(CM_data<=10)BEEP_FLAG=1; //测距小于等于10CM蜂鸣器鸣叫
else BEEP_FLAG=0;
}
}
void TIM1_IRQHandler() interrupt 3
{
static u8 i=0;
TH1 = T1RH; //重新加载重载值
TL1 = T1RL;
i++;
if(i>=5){i=0; SEG_Scan();} //间隔1ms刷新数码管
if(BEEP_FLAG==1)BEEP=!BEEP;
}
void TIM0_IRQHandler() interrupt 1
{
FLAG=1;
}
关键字:51单片机 超声波
引用地址:
51单片机-模拟倒车雷达报警
推荐阅读最新更新时间:2024-11-11 12:24
MCS-51单片机复位后,对系统有何要求?
单片机复位后,程序计数器PC的内容为0000H,所以系统必须从0000H单元开始取指令来执行程序。 0000H单元是系统的起始地址,一般在该单元存放一条绝对跳转指令(LJMP) 而用户设计的主程序,则从跳转后的地址开始安放。
[单片机]
51单片机AD模数转换学习板基本原理
1.功能 AD模数转换学习板的核心lC使用的是8路8位AD转换器ADC0809芯片,该板可以测量8路0~5V的电压值,并在四位LED数码管上轮流显示或单路选择显示,测量最小分辨率为O.019V,测量误差为0.02V,我们可以将其做成多路数字电压表。 2.基本原理 ADC0809是采样频率为8位的、以逐次逼近原理进行模一数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8个模拟输入信号中的一个进行A/D转换。 ADC0809对输入模拟量要求为信号单极性,电压范围是0~5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则
[单片机]
影响时差法超声波流量计测量精度的因素
1、上下游直管段对超声波流量计测量准确度的影响 时差法超声波流量计标定系数K是雷诺数的函数,流体从层流过渡到紊流,流速分布不均匀,标定系数K将产生较大的变化,从而引起测量准确度下降,根据要求,换能器应安装在上游直管段为10D,下游直管段为5D的位置,对于上游存在泵、阀等 设备 时直管段的长度,要求‘距离紊流、震动、热源、噪音源和射线源越远越好’。如果换能器安装位置的上游有泵、阀等 设备 ,要求直管段为30D以上。 因此,直管段长度是保证测量准确度的主要因素。 2、超声波流量计安装管道参数设置对测量准确度的影响 管道参数设置准确与否,与测量准确度关系密切。如果管道材质及尺寸的设置与实际管道尺寸不相符,将使理论管道流通截面
[测试测量]
51单片机原理与设计方案
一、单片机简介 单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。 MCS51是指由美国Intel公司在1980年推出一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机。 Intel公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司以8051为基
[单片机]
51单片机-定时器1中断
************************************************************************************** *定时器1实验* 实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include reg52.h //此文件中定义了单片机
[单片机]
51单片机+315M无线射频模块发射程序
用的就是那种最普通的 最便宜的 大约几块钱 的315兆的无线模块接受发射,不带解码的,433m的程序也是一样的不用修改 压缩包中的内容: 上位机以及完整程序在文件夹中,大家可自己下载 地址是: http://www.51hei.com/bbs/dpj-19033-1.html 下面是发射端的源代码: #include AT89X52.H #include string.h sbit LED1 = P1^1; sbit LED2 = P1^2; sbit W_IN = P2^2; //电路是用11.0592MHz晶振 sbit W_OUT = P2^0; sbit DQ =P2^1;
[单片机]
51单片机串口配置
1.配置串口工作模式为模式1。即设置SCON寄存器(SM0,SM1,REN位),SCON |= 0X50;(SM0 = 0,SM1 = 1,REN =1). SM0 = 0,SM1 = 0 方式0:同步移位串行方式:波特率= SYSclk / 12. SM0 = 0,SM1 = 1 方式1:8位UART,波特率可变: 波特率 = (2^SMOD / 32) * (定时器1的溢出率) SM0 = 1,SM1 = 0 方式2:9位UART: 波特率 = (2^SMOD / 64) * (SYSclk系统工作时钟频率) SM0 = 1,SM1 = 1 方式3: 8位UART,波特率可变: 波特率 = (2^SMOD /
[单片机]
一种高精度超声波测距系统研究
0 引言 随着科学技术的快速发展,超声波在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,超声波测距还是一个正在蓬勃发展而又有无限前景的技术及产业领域。为了能顺利地完成汽车的停放,应用测距电路能更准确、即时地得到汽车与障碍物的距离。 智能机器人进入人们的家庭不再是科幻片里面的情节,现在已经有很多机器人开始普及,如智能清洁机器人、智能防盗机器人等。而这些机器人是需要感觉周围的环境来做出判断的,测距系统就能发挥很大的作用。因此,设计高稳定性、高精度的超声波测距仪就显得特别重要。 1 超声波测距原理 和蝙蝠探测障碍物的方法一样,用超声波测距时,先由超声波测距仪向前方发射超声波,超声
[单片机]