超声波检测原理
超声波测距的程序流程图
程序如下:
//超声波模块程序
//超声波模块程序
//Trig = P2^0
//Echo = P3^2
#include
#define uchar unsigned char
#define uint unsigned int
//
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//
void delay_20us()
{
uchar a ;
for(a=0;a
}
//***************************************************************
//显示数据转换程序
void display(uint temp)
{
uchar ge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(1);
dula=1;
P0=0x00; //关位码
dula=0;
wela=1;
P0=0xef;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(1);
dula=1;
P0=0x00; //关位码
dula=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=0x00; //关位码
dula=0;
}
//***************************************************************
void main()
{
uint distance;
test =0;
Trig=0; //首先拉低脉冲输入引脚
EA=1; //打开总中断0
TMOD=0x10; //定时器1,16位工作方式
while(1)
{
EA=0; //关总中断
Trig=1; //超声波输入端
delay_20us(); //延时20us
Trig=0; //产生一个20us的脉冲
while(Echo==0); //等待Echo回波引脚变高电平
succeed_flag=0; //清测量成功标志
EA=1;
EX0=1; //打开外部中断0
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
delay(20); //等待测量的结果
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断0
if(succeed_flag==1)
{
time=timeH*256+timeL;
distance=time*0.172; //厘米
display(distance);
}
if(succeed_flag==0)
{
distance=0; //没有回波则清零
test = !test; //测试灯变化
}
}
}
//***************************************************************
//外部中断0,用做判断回波电平
void exter() interrupt 0 // 外部中断0是0号
{
timeH =TH1; //取出定时器的值
timeL =TL1; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
关键字:超声波模块 测距 51程序
引用地址:
超声波模块测距51程序_单片机超声波测距c语言
推荐阅读最新更新时间:2024-11-07 17:56
基于51单片机 红绿灯数码管程序
#include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 #define CtrlPort P1 //定义控制端口 unsigned char code DuanMa ={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9 unsigned char code WeiMa ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码 un
[单片机]
51单片机控制K9K8G08U0C NAND Flash读写程序
#include STC12C5A60S2.H #include intrins.h #include SMG.h /********************************************/ sbit NF_CLE=P0^3; //命令锁存使能(输出) CLE D3 sbit NF_ALE=P3^4; //地址锁存使能(输出) ALE RS sbit NF_WE=P1^3; //NAND Flash写使能(输出) /WE DB4 sbit NF_RE=P1^2; //NAND Flash读使能(输出) /RE DB3 sbit NF_CE
[单片机]
51单片机汇编程序,温度报警项目
大学时的单片机汇编作品,项目地址 https://github.com/jan-bar/Temperature 该项目需要protues运行,下面是可用的下载地址 链接: https://pan.baidu.com/s/13gSiLTenkSV3a5niS3untQ 提取码:7x48 安装破解汉化方法如下: 1、下载解压,得到proteus pro 8.9 sp0原程序、patch破解文件和汉化补丁; 2、首先双击文件 P8.9.sp0.exe 安装软件,接受协议后,选择 Use a locally installed license key ; 3、在许可证安装界面,浏览指定patch破解文件夹中的Licence.lxk许
[单片机]
51单片机DS1302实时时钟驱动程序
DS1302是低功耗实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。 一.基本原理 1.引脚分析 2.时序分析 (1)写字节 第一个字节是地址字节,第二个字节是数据字节。RST信号必须拉高,否则数据的输入是无效的。换一句话说,RST信号控制数据|时间信号输入的开始和结束。地址字节和数据字节的读取时上升沿有效,而且是由LSB开始读入。 (2)读字节 读一个字节和写一个字节有明显的不一样,先是写地址字节,然后再读数据字节,写地址字节时上升沿有效,而读数据字节时下降沿有效,当然前提是RST信号必须拉高
[单片机]
基于51单片机的数字钟程序
//功能:4位 数码管 可以显示 时分,月日,年份;万年历,整点报时,定时自动(或手动)关闭显示器,空闲模式工作省电 //硬件:2051 单片机 ,P1.6到P1.0分别是 A到G,P1.7=DP,P3.5=D4,P3.4=D3,P3.1=D2,P3.0=D1,P3.7控制直流蜂鸣器(整点报时)。 //.2=0(改时间),P3.3=0(改状态),6M Hz 晶振 。 //使用说明:默认时间为 2010年1月1日,0点0分,状态1显示时分 //按P3.2为0,状态++,状态功能分别为 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ; //用DP来表示状态,DP每秒闪烁1次
[单片机]
基于51单片机的串口控制led灯的亮灭源程序
/*注意设置波特率为4800,向串口不断输入0,便可实现led的亮灭*/ #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit led0=P2^0; sbit led1=P2^1; sbit led2=P2^2; /******************************************************************************* * 函数名 :UsartInit() * 函数功能 :设置串口 * 输入
[单片机]
51单片机之串口操作入门经验总结与C源程序
用计算机来控制单片机,进而控制继电器等其他外设,感觉不错啊,怎么实现呢?一步步来吧。 单片机串行口通信,也就是单片机与计算机之间的通信,要实现,要明白一些基本的概念。 (1)实现之前,请确定串口正常,我之前做过串口操作,烧了不能控制,后来才发现,设备管理器里串口有叹号,驱动有问题,可能是开发实验板没有插好或是换了个USB口造成的(我用的是串口转USB的,笔记本用) (2)串口初始化,这方面,最好有相关的书来的,明白消化定时器与中断, 这样操作起来就容易了。 一。设定串口的工作方式:设定SCON寄存器。 什么是SCON呢? SCON寄存器是51单片机一个可寻址的专用寄存器,用于串行数据通信的控制,其字节地址为:98H,位地址为:98
[单片机]
超声波测距模块的设计与实现
摘要:本文设计并实现了一个以MCS-51单片机为核心的超声波测距模块。该模块由超声波发射单元、超声波接收单元、温度测量单元、显示单元和ISP下载单元等组成,由单片机产生超声波的发射信号并对其传播时间进行测量,依据超声波在空气中的传播特性,换算出距离数据,从而实现测量距离的目的。设计中采用LM386作为超声波的发射驱动,采用集成芯片CX20106作为超声波接收单元,结构简洁,集成度高。通过实验表明,该模块性能可靠,能较准确地测出与障碍物之间的距离,达到了设计要求。 关键词:超声波测距;MCS-51单片机;LM386;CX20106 0 引言 在多数项目研发中,距离测量显得越来越重要,常用的测距方式主要有雷达测距、红外测距、激光测
[单片机]