文档视界 最新最全的文档下载
当前位置:文档视界 › 用51单片机实现HC-SR04超声波测距程序

用51单片机实现HC-SR04超声波测距程序

用51单片机实现HC-SR04超声波测距程序
用51单片机实现HC-SR04超声波测距程序

#include <> //包括一个52标准内核的头文件

#define uchar unsigned char //定义一下方便使用

#define uint unsigned int

#define ulong unsigned long

sbit Trig = P1^0; //产生脉冲引脚

sbit Echo = P3^2; //回波引脚

sbit test = P1^1; //测试用引脚

uchar code SEG7[10]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90};//数码管0-9 uint distance[4]; //测距接收缓冲区

uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器

bit succeed_flag; //测量成功标志

//********函数声明

void conversion(uint temp_data);

void delay_20us();

void main(void) // 主程序

{

uint distance_data,a,b;

uchar CONT_1;

i=0;

flag=0;

test =0;

Trig=0; //首先拉低脉冲输入引脚

TMOD=0x11; //定时器0,定时器1,16位工作方式

TR0=1; //启动定时器0

IT0=0; //由高电平变低电平,触发外部中断

ET0=1; //打开定时器0中断

EX0=0; //关闭外部中断

EA=1; //打开总中断0

while(1) //程序循环

{

EA=0;

Trig=1;

delay_20us();

Trig=0; //产生一个20us的脉冲,在Trig引脚

while(Echo==0); //等待Echo回波引脚变高电平

succeed_flag=0; //清测量成功标志

EX0=1; //打开外部中断

TH1=0; //定时器1清零

TL1=0; //定时器1清零

TF1=0; //

TR1=1; //启动定时器1

EA=1;

while(TH1 < 30);//等待测量的结果,周期毫秒(可用中断实现)

TR1=0; //关闭定时器1

EX0=0; //关闭外部中断

if(succeed_flag==1)

{

distance_data=outcomeH*256+outcomeL;

distance_data= (distance_data*/100;

} //为什么除以58等于厘米, Y米=(X秒*344)/2 // X秒=( 2*Y米)/344 ==》X秒=*Y米 ==》厘米=微秒/58

if(succeed_flag==0)

{

distance_data=0; //没有回波则清零

test = !test; //测试灯变化

}

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

每循环3次就显示结果一次

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

a=distance_data;

if(b==a) CONT_1=0;

if(b!=a) CONT_1++;

if(CONT_1>=3)

{ CONT_1=0;

b=a;

conversion(b);

}

}

}

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

//外部中断0,用做判断回波电平

INTO_() interrupt 0 // 外部中断是0号

{

outcomeH =TH1; //取出定时器的值

outcomeL =TL1; //取出定时器的值

succeed_flag=1; //至成功测量的标志

EX0=0; //关闭外部中断

}

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

//定时器0中断,用做显示

timer0() interrupt 1 // 定时器0中断是1号

{

TH0=0xfd; //写入定时器0初始值

TL0=0x77;

switch(flag)

{case 0x00:P0=ge; P2=0xfe;flag++;break;

case 0x01:P0=shi;P2=0xfd;flag++;break;

case 0x02:P0=bai;P2=0xfb;flag=0;break;

}

}

//显示数据转换程序

void conversion(uint temp_data)

{

uchar ge_data,shi_data,bai_data ;

bai_data=temp_data/100 ;

temp_data=temp_data%100; //取余运算

shi_data=temp_data/10 ;

temp_data=temp_data%10; //取余运算

ge_data=temp_data;

bai_data=SEG7[bai_data];

shi_data=SEG7[shi_data];

ge_data =SEG7[ge_data];

EA=0; //显示数据的时候不要测量

bai = bai_data;

shi = shi_data;

ge = ge_data ;

EA=1;

}

//****************************************************************** void delay_20us()

{ uchar bt ;

for(bt=0;bt<100;bt++);

}

基于51单片机的超声波测距毕业设计(论文)

一设计题目基于51单片机的超声波测距 二设计者 姓名班级学号组号 三、设计思路及框图、原理图 任务:以单片机为核心,设计并制作一超声波测距系统基本要求: 利用时间差测距,不考虑温度变化 用数码管显示测试结果 工作频率:450kHz 测距范围:0.5~10米 测试精度: 10% 发挥部分尽量增大测控范围,提高测试精度 1.系统的硬件结构设计 1.1. 超声波发生电路 发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的450kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。 1.2超声波检测接收电路 采用集成电路CX20106A为超声波接收芯片。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电

容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。 1.3 显示电路 显示电路主要由74ls273芯片驱动,用PNPC8550三级管进行位选,七段共阳极数码管显示。 2.系统的软件结构设计 设计思路 主程序中包括温度补偿子程序,计算子程序,显示子程序。采用汇编编程。首先进行系统初始化。其次利用循环产生4个40KHZ的方波,由输出口进行输出,并开始计时。第三等待中断,若超声波被接收探头捕捉到,那么通过中断可测得

51单片机常用子程序汇总

目录 1、通过串口连续发送n个字节的数据 /*************************************************************** 模块功能:通过串口连续发送n个字节的数据 参数说明: s:待发送数据的首地址 n:要发送数据的字节数 ***************************************************************/ void SendD(unsigned char *s,unsigned char n) { unsigned char unX; if(n>0) { ES=0; // 关闭串口中断 for(unX=0;unX #include #define Nop() _nop_() //空指令

sbit SDA=P1^3; sbit SCL=P1^2; bit ACK; void Start_I2c() { SDA=1; Nop(); SCL=1; Nop(); Nop(); Nop(); Nop(); Nop(); SDA=0; Nop(); Nop(); Nop(); Nop(); Nop(); SCL=0; //钳住I2C总线,准备发送或接受数据Nop(); Nop(); } (2)结束总线函数 /*************************************************************** 模块功能:发送I2C总线结束条件 ***************************************************************/ void Stop_I2c() { SDA=0; Nop(); SCL=1; Nop(); Nop(); Nop(); Nop(); Nop(); SDA=1; Nop(); Nop(); Nop(); Nop();

51单片机超声波测距程序

//晶振:11.0592 //TRIG:P1.2 ECH0:P1.1 //波特率:9600 #include #include #include #define uchar unsigned char #define uint unsigned int sbit RX=P0^2; sbit TX=P0^3; unsigned int time=0; unsigned int timer=0; float S=0; bit flag =0; void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.87)/100; //算出来是CM if(flag==1) //超出测量 { flag=0; printf("-----\n"); } printf("S=%f\n",S); } void delayms(unsigned int ms) { unsigned char i=100,j; for(;ms;ms--) { while(--i)

{ j=10; while(--j); } } } void zd0() interrupt 1 //T0中断用来计数器溢出,超出测距范围{ flag=1; //中断溢出标志 } void StartModule() //T1中断用来扫描数码管和计800ms启动模块{ TX=1; //800MS启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } void main(void) { TMOD=0x21; //设T0为方式1,GATE=1; SCON=0x50; TH1=0xFD; TL1=0xFD; TH0=0; TL0=0;

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

51单片机中断系统详解

的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。 以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为T CY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/T CY ,装入THX和TLX中的数分别为: THX=(65536-N)/256 , TLX=(65536-N)%256 中断服务程序的写法 void 函数名()interrupt 中断号using 工作组 { 中断服务程序内容 } 在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: (1)对TMOD赋值,以确定T0和 T1的工作方式。 (2)计算初值,并将初值写入TH0、TL0或TH1、TL1。 (3)中断方式时,则对IE赋值,开放中断。 (4)使TR0和TR1置位,启动定时器/计数器定时或计数。 例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。 程序代码如下: #include #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1) TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872 TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1) { if(num==20) //如果到了20次,说明1秒时间 { led1=~led1; //让发光管状态取反 num=0; } } } void T0_time()interrupt 1

基于-51单片机的HCSR04超声波测距系统制作

基于51单片机带温度补偿的HC-SR04超声波测距系统 利用从网上购买的HC-SR04超声波模块制作了一个测距装置,HC-SR04自身不带温度补偿功能,所以加上一个使用DS18B20做的温度测量模块。整个系统包括:51单片机最小系统,超声波测距模块、温度测量模块、液晶显示模块。使用了如下主要元器件: 元件说明数量 STC90C516RC 51单片机 1 HC-SR04 超声波测距模块 1 DS18B20 温度测量模块 1 lcd1602 液晶显示模块 1 系统电路图

51单片机最小系统 单片机型号:STC90C516,晶振:12Mhz。自己动手焊接的最小系统板。LCD1602A液晶显示模块:

HC-SR04超声波测距模块 HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。 实物正反两面图 HC-SR04电气参数: HC-SR04工作原理及说明: 1、给Trig触发控制信号IO端口至少10us的高电平信号; 2、模块自动发送8个40khz的方波,并自动检测是否有信号返回; 3、有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到 返回的时间; 4、两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号的影响; 超声波时序图 单片机控制HC-SR04超声波测距说明: 原理图中,单片机的P1.7口接HC-SR04的Trig端口,P1.6口接HC-SR04的Echo端口,超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平,单片机检测到高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平后结束计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离S=v*t/2; 由于在室温下,声速受温度的影响,其变化关系为:V=334.1+T*0.61(T为当前温度),利用DS18B20

51单片机实用子程序(汇编)

《MCS-51单片机实用子程序库(96年版)》 周航慈 目前已有若干版本的子程序库公开发表,它们各有特色。笔者在1988年也编制了两个子程序库(定点子程序库和浮点子程序库),并在相容性、透明性、容错性和算法优化方 面作了一些工作。本程序库中的开平方算法为笔者研究的快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。经过八年来全国广大用户的实际使用,反馈了不少信息,陆续扩充了一些新的子程序,纠正了一些隐含错误,成为现在这个最新版本。 本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订:(1)按当前流行的以 IBM PC 为主机的开发系统对汇编语言的规定,将原子程序库的标号和位地址进行了调整,读者不必再进行修改,便可直接使用。 (2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。 (3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理 程序的工作变得更简单直观。 在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈 需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序 清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。 子程序库的使用方法如下: 1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。 2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。 (一)MCS-51定点运算子程序库及其使用说明 定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下: 1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,(31H)=34H,(32H)=56H。 2.运算精度:单次定点运算精度为结果最低位的当量值。 3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无 关的或非消耗性的信息,程序就具有较好的透明性。

51单片机中断系统编程

51单片机中断系统编程 51单片机中断系统编程 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆中断是指如下过程(如下图所示):CPU 与外设同时工作,CPU执行主程序,外设做准备工作。当外设准备好时向CPU发中断请求信 号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序。在中断服务程序中 CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 5.3.1 中断系统 MCS-51单片机提供了5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储 器中各有固定的中断入口地址,由此进入中断服务程序。5个中断源的符号、名称及产生 的条件如下。 ? INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 ? INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 ? T0:定时器/计数器0中断,由T0计数溢出引起。 ? T1:定时器/计数器l中断,由T1计数溢出引起。 ? TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 中断源有两级中断优先级,可形成中断嵌套。两个特殊功能寄存器用于中断控制和条件设 置。整个中断系统的结构框图如图所示。 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 中断系统结构框图 2 中断系统的控制寄存器 中断系统有两个控制寄存器(IE和IP),它们分别用来设定各个中断源的打开/关闭和中

断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。 (1)中断允许寄存器IE IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。IE 用 来打开或关断各中断源的中断请求,基本格式如下: 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 ? EA:全局中断允许位。EA=0,禁止一切中断;EA=1,打开全局中断控制,此时,由各 个中断控制位确定相应中断的打开或关闭。 ? ×:无效位。 ? ES:串行I/O中断允许位。ES=1,允许串行I/O中断;ES=0,禁止串行I/O中断。 ? ETl;定时器/计数器T1中断允许位。ETl=1,允许T1中断;ETl=0,禁止T1中断。 ? EXl:外部中断l中断允许位。EXl=1,允许外部中断1中断;EXl=0,禁止外部中断1中 断。 ? ET0:定时器/计数器T0中断允许位。ET0=1,允许T0中断;ET0=0,禁止TO中断。 ? EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中 断。 (2)中断优先级寄存器IP IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH。 MCS-51单片机的中断分为两个优先级,IP用来设定各个中断源属于两级中断中的哪一级, 其基本格式如下: 上传的图片

51单片机程序超声波模块避障

#include #define uint unsigned int #define uchar unsigned char sbit TX=P3^2;//Trig sbit RX=P1^0;//Echo unsigned int time=0; unsigned long S=0; bit flag =0; void delay(int x) { int i,j; for(i=0;i

{ TX=1; delay(2); TX=0; } void main() { unsigned char i; unsigned int a; TMOD=0x10; EA=1; TH1=0; TL1=0; ET1=1; while(1) { RX=1; StartModule(); for(a=951;a>0;a--) { if(RX==1) { Timer_Count(); } } } }

基于51单片机的超声波测距系统

基于51单片机的超声波测距系统 贾源 完成日期:2011年2月22日

目录 一、设计任务和性能指标 (3) 1.1设计任务 (3) 1.2性能指标 (3) 二、超声波测距原理概述 (4) 2.1超声波传感器 (5) 2.1.1超声波发生器 (5) 2.1.2压电式超声波发生器原理 (5) 2.1.3单片机超声波测距系统构成 (5) 三、设计方案 (6) 3.1AT89C2051单片机 (7) 3.2超声波测距系统构成 (8) 3.2.1超声波测距单片机系统 (9) 图3-1:超声波测距单片机系统 (9) 3.2.2超声波发射、接收电路 (9) 图3-1:超声波测距发送接收单元 (10) 3.2.3显示电路 (10) 四.系统软件设计 (11) 4.1主程序设计 (11) 4.2超声波测距子程序 (12) 4.3超声波测距程序流程图 (13) 4.4超声波测距程子序流程图 (14) 五.调试及性能分析 (14) 5.1调试步骤 (14) 5.2性能分析 (15) 六.心得体会 (15) 参考文献 (16) 附录一超声波测系统原理图 (18) 附录二超声波测系统原理图安装图 (19) 附录三超声波测系统原理图PCB图 (20) 附录四超声波测系统原理图C语言原程序 (21) 参考文献 (26)

一、设计任务和性能指标 1.1设计任务 利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个超声波测距仪器,用LED数码管把测距仪距测出的距离显示出来。 要求用Protel 画出系统的电路原理图,印刷电路板,绘出程序流程图,并给出程序清单。 1.2性能指标 距离显示:用三位LED数码管进行显示(单位是CM)。 测距范围:25CM到 250CM之间。误差:1%。

用51单片机实现HC-SR04超声波测距程序

#include //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long sbit Trig = P1^0; //产生脉冲引脚 sbit Echo = P3^2; //回波引脚 sbit test = P1^1; //测试用引脚 uchar code SEG7[10]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90};//数码管0-9 uint distance[4]; //测距接收缓冲区 uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器 bit succeed_flag; //测量成功标志 //********函数声明 void conversion(uint temp_data); void delay_20us(); void main(void) // 主程序 { uint distance_data,a,b; uchar CONT_1; i=0; flag=0; test =0; Trig=0; //首先拉低脉冲输入引脚 TMOD=0x11; //定时器0,定时器1,16位工作方式 TR0=1; //启动定时器0 IT0=0; //由高电平变低电平,触发外部中断 ET0=1; //打开定时器0中断 EX0=0; //关闭外部中断 EA=1; //打开总中断0 while(1) //程序循环 { EA=0; Trig=1; delay_20us(); Trig=0; //产生一个20us的脉冲,在Trig引脚 while(Echo==0); //等待Echo回波引脚变高电平 succeed_flag=0; //清测量成功标志 EX0=1; //打开外部中断 TH1=0; //定时器1清零 TL1=0; //定时器1清零 TF1=0; //

基于51单片机超声波测距

一设计要求 (1)设计一个以单片机为核心的超声波测距仪,可以应用于汽车倒车、工业现场的位置监控; (2)测量范围在0.50~4.00m,测量精度1cm; (3)测量时与被测物无直接接触,能够清晰稳定地显示测量结果。 二超声波测距系统电路总体设计方案 本系统硬件部分由AT89S52控制器、超声波发射电路及接收电路、温度测量电路、声音报警电路和LCD显示电路组成。汽车行进时LCD显示环境温度,当倒车时,发射和接收电路工作,经过AT89S52数据处理将距离也显示到LCD 上,如果距离小于设定值时,报警电路会鸣叫,提醒司机注意车距。超声波测距器的系统框图如下图所示: 图5 系统设计总框图 由单片机AT89S52编程产生10us以上的高电平,由指定引脚输出,就可以在指定接收口等待高电平输出。一旦有高电平输出,即在模块中经过放大电路,驱动超声波发射探头发射超声波。发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的处理,指定接收口即变为低电平,读取单片机中定时器的值。单片机利用声波的传播速度和发射脉冲到接收反射脉冲的

时间间隔计算出障碍物的距离,并由单片机控制显示出来。 由时序图可以看出,超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。 图6 时序图 三超声波发射和接收电路的设计 分立元件构成的发射和接收电路容易受到外界的干扰,体积和功耗也比较大。而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以优先采用集成电路来设计收发电路。 3.1 超声波发射电路 超声波发射电路包括超声波产生电路和超声波发射控制电路两部分,可采用软件发生法和硬件方法产生超声波。在超声波的发射电路的设计中,我们采用电路结构简单的集成电路构成发射电路:

51单片机实用汇编程序库

51 单片机实用程序库 4、1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮得效果。实际应用中例如: 广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP、ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A;灭所有得灯 MOV A,#11111110B MAIN1: MOV P1,A;开最左边得灯 ACALL DELAY ;延时 RL A ;将开得灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ30H,D1 RET END 4、2 方波输出 程序介绍:P1、0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN、ASM): ORG 0000H MAIN: ;直接利用P1、0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1、0 ACALL DELAY 10 CLR P1、0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5、1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1、o得输出状态改变1 次,以达到定时报警得目得。实际应用例如:定时报警器。 程序实例(DIN1、ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0入口 MAIN: TFLA G EQU34H ;时间秒标志,判就是否到50个 0、2 秒,即50*0、2=1 秒 MOVTMOD,#00000001B;定时器0 工作于方式 1 MOVTL0,#0AFH MOV TH0,#3CH ;设定时时间为0、05 秒,定时 20 次则一秒 11 SETB EA;开总中断 SETB ET0;开定时器0 中断允许 SETBTR0 ;开定时0 运行 SETB P1、0 LOOP: AJMP LOOP DIN0: ;就是否到一秒//////////////////////////////////////// INCC:INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPLP1、0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0、05秒,定时 20 次则一秒 RETI END 5、2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期就是1微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 得频率为 例: 200=1/t:推出t=0、005秒,即5000微秒,即一个高电

51单片机超声波测距程序

//超声波测距,测距范围2cm-400cm; #include #include #define uint unsigned int #define uchar unsigned char sbit trig=P1^0; sbit echo=P3^2; sbit test=P1^1; //测试灯sbit dula=P2^6; sbit wela=P2^7; sbit BEEP=P2^3; uint timeh,timel,distance; uint ge,shi,bai,xiaoshu,flag,time; /*共阴极数码管不带小数点代码表*/

uchar code list[]={ 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 }; /*共阴极数码管带小数点代码表*/ uchar code listtwo[] = { 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef}; /*长延时函数*/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); }

/*短延时函数*/ void delay20us() { uchar a; for(a=0;a<100;a++); } /*报警函数*/ void beer() { // BEEP=0; delay(10); } /*定时器初始化*/ void initime0() { TMOD=0x01; TH0=0;

基于51单片机超声波测距仪

基于51单片机超声波测距仪

基于51单片机的超声波测距仪设计 摘要 利用超声波进行测距有许多优点比如不受光强度、色彩和电磁场等外界因素的影响,而且超声波传感器的价位较低、结构也较为简单,超声波以声速传播,方便收发与计算。在汽车倒车雷达、移动机器人的避障、特别是测量距离等许多方面都已有了非常普遍的应用。 本次毕业设计的超声波测距仪是在STC89C51单片机的基础上设计的,在分析和了解了超声波的一些优点和特性后,又查看了利用超声波测距的基本原理。最后决定使用51单片机系统和超声波传感器共同组成。设计的超声波测距仪的硬件部分主要包括电源及复位模块、单片机与超声波模块组成的超声波发射模块、超声波接收模块、LED数码显示模块和扩展报警模块。软件部分主要包括单片机主程序、根据超声波发射与接收计算距离程序、LED距离显示程序、按键控制程序和蜂鸣器报警程序,这样安排使得系统具有模块化的特点。系统容易进行控制,具有可靠地的性能,具有较高的测量精度,最重要的是能对距离进行实时测量。 关键词:单片机,测距仪,超声波,实时测量

Design of Ultrasonic Distance Meter Based on 51 MCM ABSTRACT Using ultrasonic ranging has many advantages for example, from the effects of light intensity, color and electromagnetic field and other external factors and price lower ultrasonic sensors, the structure is simple, ultrasonic sounds velocity, convenient transceiver and calculation. In the car reverse radar, mobile robot obstacle avoidance, especially measuring distance and many other aspects have been very common application. The graduation design of ultrasonic range finder based on STC89C51 MCU design, analysis and understanding of the some advantages and characteristics of ultrasonic and looked at the use of the basic principle of ultrasonic distance measurement. Finally, the composition of the 51 single-chip microcomputer system and ultrasonic sensor is decided.. The design of ultrasonic rangefinder hardware part consists of the power and reset module, SCM and ultrasonic module consists of ultrasonic emission module, ultrasonic receiving module, LED digital display expansion module and alarm module. Software part mainly includes MCU program, according to the ultrasonic transmitting and receiving computing program distance, the distance of LED display program, key control procedures and buzzer alarm procedures, this arrangement enables the system to have the characteristics of modular. The system is easy to control and has the reliable performance, and has the higher accuracy, and the most important is the real-time measurement of the distance. KEY WORDS: Single chip microcomputer,Range finder,Ultrasonic,Real-time measurement

针对常用51单片机下载程序问题做下详解

针对常用51单片机下载程序问题做下详解 目前为止,接触单片机已有不少,从选择元器件、原理图、PCB、电路硬件调试、软件开发也算小有心得。 单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈起,记得当初刚接触单片机时,对于下载电路方法及原理也是一头雾水。好在随着经验的积累以及自己的努力探求,现在对此问题算是有了点点自己的经验理解。故今天在此针对常用51单片机下载程序问题做下详解,以求新手们少走弯路。 原理 单片机的TXD、RXD是TTL电平,所以你得万变不离其宗的将其它信号转成TTL电平,只有这样给单片机下载程序才有可能成功!其中CH340、PL2303等芯片是直接将USB信号转换为TTL电平,而MAX232等芯片是将TTL转换为RS232信号或者将RS232信号转换为TTL.下面请看利用这种原理的两种常用方法: 方法一: 请看图一,这是我们最常见的单片机下载电路了,其中从②到⑥属于大家常用的USB转串口线,用这种方案的好处是,如果自己的PC带有串口(可能很老的机器没有USB接口),那么就可以直接给单片机开发板下载程序,因为采用这种方法的开发板必定带有串口接口嘛。当然,如果PC仅有USB接口而不带串口,那么只能找根USB转串口线了(其电路原理就是图中②到⑥),这里我推荐大家使用采用CH340芯片的USB转串口线,而不要采用PL2303的USB转串口线,因为PL2303价钱便宜所以山寨的水货较多,这会导致下载电路不稳定,甚至无法正常下载。同时此方案的坏处是电路板上必定要做一个9针串口接口(太巨大了),这必将增加了电路PCB的面积,当然也就增加了成本啦!(顺便发表下个人见解:那个9针接口实在太丑,又大又重,无形中便降低了自己的设计档次,哈哈。所以不推荐这种方法!) 请看图二,这是我经常采用的单片机下载电路。实践证明效果非常好,几乎没出过任何问

51单片机超声波模块的C语言程序

//超声波模块程序 //超声波模块程序 //Trig = P2^0 //Echo = P3^2 #include #define uchar unsigned char #define uint unsigned int int time; int succeed_flag; uchar timeL; uchar timeH; sbit Trig=P1^0; sbit Echo=P3^2; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f}; uchar code table1[]={0,1,2,3,4,5,6,7}; // 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<100;a++); } //************************************************************ *** //显示数据转换程序 void display(uint temp) { uchar ge,shi,bai; bai=temp/100; shi=(temp%100)/10;

ge=temp%10; P2=table1[2]; P0=table[ge]; delay(1); P2=table1[1]; P0=table[shi]; delay(1); P2=table1[0]; P0=table[bai]; delay(1); } //************************************************************ *** void main() { uint distance; // test =0; Trig=0; //首先拉低脉冲输入引脚 EA=1; //打开总中断0

51单片机实现超声波测距报警系统

目录 1引言 (1) 1.1研究的目的和意义 (1) 1.21 国内外发展的状况以及存在的问题 (2) 1.22 现有的倒车雷达存在的问题 (2) 1.3本文研究的主要内容 (2) 2 超声波原理介绍 (2) 2.1 超声波的基本理论 (2) 2.11 超声波的传播速度 (3) 2.12 超声波的物理性质 (4) 2.13 超声波对声场产生的作用 (5) 2.2 超声波测距系统原理 (6) 2.3 规格参数 (8) 2.31 主要功能 (8) 2.32 基本参数 (8) 3系统硬件设计 (8) 3.1 单片机系统 (10) 3.2 超声波发射接收模块 (11) 3.3 报警电路设计 (12) 3. 4 复位电路 (12) 4系统软件程序 (14) 5计算超声波传播时间 (14) 6结论 (29) 参考文献: (29) 致谢 (30)

基于单片机倒车防撞报警系统设计 张杭 南京信息工程大学滨江学院,南京210044 摘要:对于汽车倒车防撞问题,提出了将超声波测距仪和单片机结合于一体的方案,并给出了一种基于AT89C51单片机的倒车防撞报警系统的设计,对系统中控制部分、发射部分、接收部分、显示部分和报警部分出现的问题进行处理。本文采用一种简单易行的测距原理建立了防撞报警系统,具体分析了倒车防撞系统的设计原理及各部分元件的设计方案,充分描述了超声波测距的原理及应用,并介绍了我国在超声波测距的发展现状,不过还有一些无法避免的测量误差,还需日益俱进的科学发展加以解决。 关键词:A T89C51;超声测距;倒车防撞 1引言 1.1研究的目的和意义 随着社会经济的发展交通运输业飞速发展,汽车的数量在大副攀升。交通拥挤状况也日趋严重,撞车事件屡屡发生,造成了不可避免的人身伤亡和经济损失。针对这种情况,设计一种响应快,可靠性高且较为经济实用的汽车防撞报警系统势在必行。超声波测距法是最常见的一种距离测距方法,应用于汽车停车的前后左右防撞的近距离和低速状况,并且在汽车倒车防撞报警系统中,超声波作为一种特殊的声波,同样具有声波传输的基本物理特性——折射,反射,干涉,衍射,散射。超声波测距即是利用其反射特性,当车辆后退时,超声波距离传感器利用超声波检测车辆后方的障碍物位置,并利用指示灯及蜂鸣器把车辆到障碍物的距离及位置通知驾驶人员,起到安全的作用。 1.2 国内外现状

相关文档
相关文档 最新文档