超声波测距程序

超声波测距程序
超声波测距程序

//超声波测距程序#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit rs=P2^6; //1602的数据/指令选择控制线sbit rw=P2^5; //1602的读写控制线

sbit en=P2^7; //1602的使能控制线

sbit trig=P2^0; //超声波测距模块Trig

sbit echo=P2^1; //超声波测距模块Echo

bit flag1; //触发信号标志位//

uchar count; //中断累加变量

long int distance; //测量所得距离

unsigned char code table[ ]={"0123456789"};

uchar code table1[]=" distance: " ; //定义字符数组显示数字

void delay(uint n) {

uint x,y;

for(x=n;x>0;x--)

for(y=110;y>0;y--);

}

void delayt(uint x)

{

uchar j;

while(x-- > 0)

{

for(j = 0;j < 125;j++)

{

;

}

}

}

void lcd_wcom(uchar com)

{

rs=0; //选择指令寄存器

rw=0; //选择写

P0=com; //把命令字送入P0

delay(5); //延时一小会儿,让1602准备接收数据

en=1; //使能线电平变化,命令送入1602的8位数据口,这点非常重要

en=0;

}

/*------------------------------------------------

1602写数据函数

------------------------------------------------*/

void lcd_wdat(uchar dat)

{

rs=1; //选择数据寄存器

rw=0; //选择写

P0=dat; //把要显示的数据送入P0

delay(5); //延时一小会儿,让1602准备接收数据,也就是检测忙信号,这点非常重要。

en=1; //使能线电平变化,数据送入1602的8位数据口

en=0;

}

void lcd_init()

{

lcd_wcom(0x38); //8位数据,双列,5*7字形,用到功能设定指令

lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁,用到显示开关控制指令

lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位,用到了写入模式设置指令

lcd_wcom(0x01); //清屏,用到了清屏指令

}

void lcd_xianshi()

{

uchar i ;

lcd_wcom(0x80);

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

{

lcd_wdat (table1[i]) ;

}

lcd_wcom(0xcc);

lcd_wdat('.');

lcd_wcom(0xce);//单位是厘米//

lcd_wdat('c');

lcd_wdat('m');

}

/*------------------------------------------------ 定时器0初始化,用于计算响应信号时间

------------------------------------------------*/ void init_t0()

{

TMOD=0x01;

TL0=0x66;

TH0=0xfc; //1ms

ET0=1;

EA=1;

}

/*------------------------------------------------ 超声波模块触发信号

------------------------------------------------*/ void trigger()

{

trig=0;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

trig=1;

}

/*------------------------------------------------ 超声波模块相应端口初始化函数

------------------------------------------------*/ void init_measuring()

{

trig=1;

echo=1;

count=0;

}

/*------------------------------------------------ 超声波模块距离测试函数

------------------------------------------------*/ void measuring()

{

uchar l;

uint h,y;

TR0 = 1;

while(echo==1)

{

;

}

TR0 = 0;

l = TL0;

h = TH0;

y = (h << 8) + l;

y = y - 0xfc66;//us部分

distance = y + 1000 * count;//计算总时间,单位是微秒

TL0 = 0x66;

TH0 = 0xfc;

delayt(30);

distance = 3453* distance / 20000;//原始为:(0.34毫米/us)*时间/2//

}

/*------------------------------------------------ 超声波模块测量结果显示函数

------------------------------------------------*/

void display(uint x)

{

uchar qian,bai,shi,ge;

qian=x/1000;

bai=(x/100)%10;

shi=(x/10)%10;

ge=x%10;

lcd_wcom(0x80+0x49);//单位是厘米//

lcd_wdat(table[qian]);

lcd_wdat(table[bai]);

lcd_wdat(table[shi]);

lcd_wcom(0x80+0x4d);

lcd_wdat(table[ge]);

}

/*------------------------------------------------

主函数

------------------------------------------------*/ void main()

{ lcd_init(); //液晶初始化

init_t0(); //定时器0初始化

init_measuring(); //超声波相应端口初始化

while(1)

{

lcd_xianshi(); //液晶显示特定字符

trigger(); //触发超声波启动

while(echo==0) //等待回声

{

;

}

measuring(); //进行距离测量

display(distance); //对测量结果进行显示 init_measuring(); //超声波相应端口初始化 delayt(600); //每次测量间隔60ms

}

}

//……………………………………………中断服务函数…………………………………………………//

void T_0()interrupt 1

{

TF0 = 0;

TL0 = 0x66;

TH0 = 0xfc;

count++;

if(count==18)

{

TR0 =0;

TL0 = 0x66; TH0 = 0xfc; count = 0; }

}

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;

基于单片机的超声波测距系统设计实验报告 - 重

指导教师评定成绩: 审定成绩: 自动化学院 计算机控制技术课程设计报告设计题目:基于单片机的超声波测距系统设计 单位(二级学院): 学生姓名: 专业: 班级: 学号: 指导教师: 负责项目: 设计时间:二〇一四年五月 自动化学院制

目录 一、设计题目 (1) 基于51单片机的超声波测距系统设计 (1) 设计要求 (1) 摘要 (2) 二、设计报告正文 (3) 2.1 超声波测距原理 (3) 2.2系统总体方案设计 (4) 2.3主要元件选型及其结构 (5) 2.4硬件实现及单元电路设计 (9) 2.5系统的软件设计 (13) 三、设计总结 (17) 四、参考文献 (17) 五、附录 (18) 附录一:总体电路图 (18) 附录二:系统源代码 (18)

一、设计题目 基于51单片机的超声波测距系统设计 设计要求 1、以51系列单片机为核心,控制超声波测距系统; 2、测量范围为:2cm~4m,测量精度:1cm; 3、通过键盘电路设置报警距离,测出的距离通过显示电路显示出来; 4、当所测距离小于报警距离时,声光报警装置报警加以提示; 5、设计出相应的电子电路和控制软件流程及源代码,并制作实物。

摘要 超声波具有传播距离远、能量耗散少、指向性强等特点,在实际应用中常利用这些特点进行距离测量。超声波测距具有非接触式、测量快速、计算简单、应用性强的特点,在汽车倒车雷达系统、液位测量等方面应用广泛。本次课设利用超声波传播中距离与时间的关系为基本原理,以STC89C52单片机为核心进行控制及数据处理,通过外围电源、显示、键盘、声光报警等电路实现系统供电、测距显示、报警值设置及报警提示的功能。软件部分采用了模块化的设计,由系统主程序及各功能部分的子程序组成。超声波回波信号输入单片机,经单片机综合分析处理后实现其预定功能。 关键词:STC89C52单片机; HC-SR04;超声波测距

超声波测距仪硬件电路的设计

超声波测距仪电路设计实验报告 轮机系楼宇071 周钰泉2007212117 实验目的:了解超声波测距仪的原理,掌握焊接方法,掌握电路串接方法,熟悉电路元件。 实验设备及器材:电烙铁,锡线,电路元件 实验步骤:1,学习keil软件编写程序2、焊接电路板3、运行调试 超声波测距程序: #include unsigned char code dispbitcode[]={0x31,0x32,0x34,0x38,0x30,0x30, 0x30,0x30}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x77,0x7c,0x 39}; unsigned char dispbuf[8]={10,10,10,10,10,10,0,0}; unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned int temp1;

unsigned char i; sbit ST=P3^0; sbit OE=P3^1; sbit EOC=P3^4; sbit CLK=P3^5; sbit M1=P3^6; sbit M2=P3^7; sbit SPK=P2^6; sbit LA=P3^3; sbit LB=P3^2; sbit LC=P2^7; sbit K1=P2^4; sbit K2=P2^5; bit wd; bit yw; bit shuid; bit shuig; unsigned int cnta; unsigned int cntb; bit alarmflag; void delay10ms(void) { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { M1=0; M2=0; yw=1; wd=0; SPK=0; ST=0; OE=0; TMOD=0x12; TH0=0x216; TL0=0x216; TH1=(65536-500)/256; TL1=(65536-500)%256; TR1=1; TR0=1; ET0=1; ET1=1; EA=1; ST=1; ST=0; while(1) { if(K1==0) { delay10ms(); if(K1==0) { yw=1; wd=0; } } else if(K2==0) { delay10ms(); if(K2==0) { wd=1; yw=0; } } else if(LC==1) { delay10ms(); if(LC==1) { M1=0; M2=1; temp1=13; shuid=0; shuig=1; LB=0; } } else if((LC==0) && (LB==1)) { delay10ms(); if((LC==0) && (LB==1)) { M1=0; M2=0; temp1=12; shuig=0; shuid=0; LB=0; }

超声波测距程序(详细C语言数码管显示)

超声波测距程序(详细C语言数码管显示) #include //头文件 #include// _nop_() 函数延时1US用 #include #include #define uchar unsigned char #define uint unsigned int #define nop _nop_() sbit csb=P1^0;//超声波发送端口为P1.0 sbit bai=P2^2;//数码管百位 sbit shi=P2^1;//数码管十位 sbit ge=P2^0;//数码管个位 uchar flag;//超声波接收标志 float juli1;//距离变量,用来数码管显示用 int juli; uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0到9的代码 int xianshi[3]; void delayshow(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void ledshow(void) { xianshi[0]=juli/100; xianshi[1]=((juli%100)/10); xianshi[2]=juli%10; bai=0; P0=table[xianshi[0]]; delayshow(2); bai=1; delayshow(2); shi=0; P0=table[xianshi[1]]; delayshow(2); shi=1;

超声波测距仪的设计说明

题目:超声波测距仪的设计 超声波测距仪的设计 一、设计目的: 以51单片机为主控制器,利用超声波模块HC-SR04,设计出一套可在数码管上实时显示障碍物距离的超声波测距仪。 通过该设计的制作,更为深入的了解51的工作原理,特别是51的中断系统及定时器/计数器的应用;掌握数码管动态扫描显示的方法和超声波传感器测距的原理及方法,学会搭建51的最小系统及一些简单外围电路(LED显示电路)。从中提高电路的实际设计、焊接、检错、排错能力,并学会仿真及软件调试的基本方法。 二、设计要求: 设计一个超声波测距仪。要求: 1.能在数码管上实时显示障碍物的实际距离; 2.所测距离大于2cm小于300cm,精度2mm。 三、设计器材: STC89C52RC单片机 HC-SR04超声波模块 SM410561D3B四位的共阳数码管 9014三极管(4) 按键(1) 电容(30PF2,10UF1) 排阻(10K),万用板,电烙铁,万用表,5V直流稳压电源,镊子,钳子,

导线及焊锡若干,电阻(200欧5)。 四、设计原理及设计方案: (一)超声波测距原理 超声测距仪是根据超声波遇到障碍物反射回来的特性进行测量的。超声波发射器向某一方向发射超声波,在发射同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即中断停止计时。通过不断检测产生波发射后遇到障碍物所反射的回波,从而测出发射超声波和接收到回波的时间差T,然后求出距离L。基本的测距公式为:L=(△t/2)*C 式中 L——要测的距离 T——发射波和反射波之间的时间间隔 C——超声波在空气中的声速,常温下取为344m/s 声速确定后,只要测出超声波往返的时间,即可求得L。 根据本次设计所要求的测量距离的围及测量精度,我们选用的是HC-SR04超声波测距模块。(如下图所示)。此模块已将发射电路和接收电路集成好了,硬件上不必再自行设计繁复的发射及接收电路,软件上也无需再通过定时器产生40Khz的方波引起压电陶瓷共振从而产生超声波。在使用时,只要在控制端‘Trig’发一个大于15us宽度的高电平,就可以在接收端‘Echo’等待高电平输出。单片机一旦检测到有输出就打开定时器开始计时。 当此口变为低电平时就停止计时并读出定时器的值,此值就为此次测距的时间,再根据传播速度方可算出障碍物的距离。 (二)超声波测距模块HC-SR04简要介绍 HC-SR04超声波测距模块的主要技术参数使用方法如下所述: 1. 主要技术参数: ①使用电压:DC5V ②静态电流:小于2mA ③电平输出:高5V

超声波测距仪单片机课设实验资料报告材料

微机原理与单片机系统课程设计 业:专轨道交通信号与控制 级:班1305 交控

姓名:贺云鹏 学号: 201310104 指导教师:建国 交通大学自动化与电气工程学院 30 日 12 2015 年月 超声波测距仪设计设计说明1 设计目的1.1 测量声波在发超声波测距的原理是利用超声波在空气中的传播速度为已知,根据发射和接收的时间差计算出发射点到障碍射后遇到障碍物反射回来的时间,物的实际距离。超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量。 超声波在气体、液体及固体中以不同速度传播,定向性好、能量集中、传输过程中衰减较小、反射能力较强。超声波能以一定速度定向传播、遇障碍物后形成反射,利用这一特性,通过测定超声波往返所用时间就可计算出实际距离,从而实现无接触测量物体距离。超声波测距迅速、方便,且不受光线等因素影响,广泛应用于水文液位测量、建筑施工工地的测量、现场的位置监控、振动仪车辆倒车障碍物的检测、移动机器入探测定位等领域。 1.2 设计方法 本课题包括数据测距模块、显示模块。测距模块包括一个HC-SR04超声波测距模块和一片AT89C51单片机,该设计选用HC-SR04超声波测距模块,通过单片机对超声波进行计时并根据超AT89C51发射和接受超声波,使用HC-SR04.声波在空气中速度为340米每秒的特性计算出距离。显示模块包括一个4位共阳极LED数码管和AT89C51单片机,由AT89C51单片机控制数码管动态显示距离。 1.3 设计要求 采用单片机为核心部件,选用超声波模组,实现对距离的测量,测量距离能够通过显示输出(LED,LCD)。 2 设计方案及原理 2.1超声波测距模块设计

超声波C语言程序

超声波测距C程序#include #include"MAX485.h" #define uint unsigned int #define uchar unsigned char long int time,l; /* 时间*/ bit CLflag; /* 测量标志*/ sbit Trig=P2^0; /* 发射*/ sbit Echo=P3^2; /* 外部中断0检测接收信号*/ #define ss=0.344 char number[4]; /* 存储数据*/ /*********************延时函数****************************/ void delay1( int j ) { int i; for(i=0;i

基于单片机的超声波测距系统实验报告

基于单片机的超声波测距系统实验报告

一、实验目的 1.了解超声波测距原理; 2.根据超声波测距原理,设计超声波测距器的硬件结构电路; 3.对设计的电路进行分析能够产生超声波,实现超声波的发送与接收,从而实现利用 超声波方法测量物体间的距离; 4.以数字的形式显示所测量的距离; 5.用蜂鸣器和发光二极管实现报警功能。 二、实验容 1.认真研究有关理论知识并大量查阅相关资料,确定系统的总体设计方案,设计出系 统框图; 2.决定各项参数所需要的硬件设施,完成电路的理论分析和电路模型构造。 3.对各单元模块进行调试与验证; 4.对单元模块进行整合,整体调试; 5.完成原理图设计和硬件制作; 6.编写程序和整体调试电路; 7.写出实验报告并交于老师验收。 三、实验原理 超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距S=Ct/2,式中的C为超声波波速。由于超声波也是一种声波,其声速C与温度有关。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理,单片机(AT89C51)发出短暂的40kHz信号,经放大后通过超声波换能器输出;反射后的超声波经超声波换能器作为系统的输入,锁相环对此信号锁定,产生锁定信号启动单片机中断程序,得出时间t,再由系统软件对其进行计算、判别后,相应的计算结果被送至LED显示电路进行显示。 (一)超声波模块原理: 超声波模块采用现成的HC-SR04超声波模块,该模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm。模块包括超声波发射器、接收器与控制电路。基本工作原理:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号;模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。实物如下图1。其中VCC 供5V 电源,GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四支线。

基于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%。

超声波测距C语言源程序代码

超声波测距C语言源程 序代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

/*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12M H Z)/12=1M H 即1000000HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时, 即1us(微秒).*/ /*************************************************************************** ********/ #include<> #define UC unsigned char #define UI unsigned int void delay(UI); sbit BX = P3^0;void TimeConfiguration(); a = 0; b = 0; c = 0; P2 =~ 0x00; goto loop; } time = TL0 + TH0*256; juli = ( int )( (time*/2 ); BAI = ( (juli%1000)/100 ); SHI = ( (juli%100)/10 ); GE = ( juli%10 ); /******************************************两种模式的距离显示 ********************************************/ if(juli > MAX) { Hong = 0; Lv = 1; while( t1-- ) { a = 0; b = 1; c = 1; P2 =~ CharacterCode[BAI]; delay(400); a = 1; b = 0; c = 1; P2 =~ CharacterCode[SHI]; delay(400); a = 1; b = 1; c = 0; P2 =~ CharacterCode[GE]; delay(390);

10米超声波测距仪设计实现

10米超声波测距仪设计实现 一、功能要求 设计一个超声波测距仪,可以测量测距仪与被测物体间的距离。要求测量范围0.1~10.00米,测量精度1cm,测量时与被测物体不接触,并将测量结果显示出来。 二、系统硬件电路 1.单片机系统及显示电路 单片机采用89C51或89S51。采用12MHz高精度晶振,以获得较稳定的时钟频率,减小测量误差。单片机用p1.0端口输出超声波换能器所需的40Hz方波信号,利用外中断0口监测超声波接受电路输出的返回信号。显示电路采用简单实用的4位共阳极LED数码管,段码用74LS244驱动,位用PNP8550驱动。 2.超声波发射电路 主要由74LS04和超声波换能器T构成。这种推挽形式的方波信号可以提高发射强度。反相器并联提高驱动能力。上拉电阻R1、R2提高74LS04输出高电平的驱动能力。 3.超声波接收电路 CX20106A是接收38KHz超声波的芯片,可利用它做接收电路。 4.系统程序 超声波测距仪的软件主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。 主程序:

开始 系统初始化 发送超声波脉冲 等待反射超声波 计算距离 显示结果 丢系统初始化,设置T0为方式1,EA=1,P0,P2清0。为避免超声波发射器直接接传送到接收器,需要延时0.1ms。由于时钟的频率是12MHz,计数器每计一个数就是1us。如果按声速344m/s,则d=c*t/2=172T0 cm 超声波发生子程序:通过P1.0端口发送2个左右超声波脉冲信号,脉宽12us,同时T0计数。 超声波测距仪利用中断0检测返回的超声波,一旦接收到返回的信号,立即进入中断。中断后就立即关闭T0停止计时。如果计数器益出则测试不成功。 3方案设计和选择 根据本次设计的要求,方案的选择应力求实用性强,性价比高,使用简单。 3.1 超声波测距的基本原理 谐振频率高于20kHz的声波被称为超声波。超声波

具有实时语音播报功能的超声波测距仪(C程序)

#include //调用单片机头文件 #define uchar unsigned char //无符号字符型宏定义变量范围0~255 #define uint unsigned int //无符号整型宏定义变量范围0~65535 #include //数码管段选定义0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码 //数码管位选定义 uchar code smg_we[]={0xe0,0xd0,0xb0,0x70}; uchar dis_smg[8] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; sbit smg_we1 = P3^4; //数码管位选定义 sbit smg_we2 = P3^5; sbit smg_we3 = P3^6; sbit smg_we4 = P3^7; sbit c_send = P3^2; //超声波发射 sbit c_recive = P3^3; //超声波接收 uchar smg_i = 3; //显示数码管的个位数 bit flag_300ms ; long distance; //距离 uint set_d; //距离 uchar flag_csb_juli; //超声波超出量程 uint flag_time0; //用来保存定时器0的时候的 /***********************语音模块控制IO口的定义************************/ sbit VRST = P2^3; sbit VBUSY= P2^7; sbit VSDA = P2^6; sbit VCS = P2^5; sbit VSCL = P2^4; uchar yujing[3]; /*************************** 语音地址的安排 0 - 9 :对应数字0到9 0b : 点 0c : 米 0d : 已超出量程

用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; //

超声波测距C语言源程序代码

/*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12MHZ)/12=1MH 即1000000HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时0.000001s, 即1us(微秒).*/ /****************************************************************************** *****/ //具有模式选择. #include #define UC unsigned char #define UI unsigned int void delay(UI); //延时9.56us程序 sbit beep = P1^3; //用于声音报警 sbit Lv = P1^7; //用于光报警 sbit Hong = P1^6; sbit QD = P3^7;//K8 //P3^7口(K8)为确定键, sbit GX = P3^1;//K7 //P3^3口(K2)为修改键, sbit SX = P3^6;//K6 //P3^2(K3)为测量键. sbit BX = P3^0;//K5 //个(K7),十(K6),百(K5),三位修改键 sbit a = P1^2;//百位//数码管位选 sbit b = P1^1;//十位 sbit c = P1^0;//个位 sbit trig = P1^4; //方波发射端 sbit echo = P1^5; //超声波接收端 void IntConfiguration(); //用来"设置中断"的函数,P3^3口(K2)为修改键,P3^2(K3)为测量键. void TimeConfiguration(); //用来"设置定时器"的函数 sbit K1 = P3^4;//动态 sbit K4 = P3^5;//静态//用于进行模式切换(K1、K4键) void xiaxian(); //修改函数,用来修改下限 void shangxian(); //修改函数,用来修改上限 UI min[3]={0,5,0}; //报警极限,拆分为"百十个"三位 UI max[3]={3,0,0}; //MIN,MAX 用来存储最大和最小值 void MINxianshi(UI); //最小范围和最大范围的显示 void MAXxianshi(UI); UC code CharacterCode[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管数字字符(P2口) /********************************主函数*********************************************/ void main() { TimeConfiguration(); //设置定时器0 IntConfiguration(); //设置中断允许,K4键为修改键,K8键为确定键 while(1) {

超声波测距器课程设计

《微机原理及应用》课程设计 超声波测距器的设计 学生姓名郝强 学号20110611113 学院名称机电工程学院 专业名称机械电子工程 指导教师王前 2013年12月27日

摘要 随着科学技术的快速发展,超声波将在科学技术中的应用越来越广。本文对超声波传感器测距的可能性进行了理论分析,利用模拟电子、数字电子、微机接口、超声波换能器、以及超声波在介质的传播特性等知识,采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。相关部分附有硬件电路图、程序流程图。为了保证超声波测距传感器的可靠性和稳定性,采取了相应的抗干扰措施。就超声波的传播特性,超声波换能器的工作特性、超声波发射、接收、超声微弱信号放大、波形整形、速度变换、语音提示电路及系统功能软件等做了详细说明。 关键词:超声波;传感器;测量距离;控制

目录 摘要 (2) 目录 (3) 1.设计目的 (4) 2.总体方案 (4) 3.硬件设计 (5) 3.1 超声波测距器硬件电路设计 (5) 3.2.1单片机芯片的选择 (6) 3.2.2AT89C51定时计数应用电路 (6) 3.3超声波发射电路设计 (6) 3.3.1选择超声波发生器类型 (6) 3.3.2 超声波发射电路设计 (7) 3.4超声波接收电路设计 (8) 3.5超声波显示电路设计 (9) 4.软件设计 (9) 4.1波测距器的算法设计 (10) 4.2系统的主控制程序设计 (11) 4.3发生子程序设计 (12) 4.4接收中断程序设计 (13) 4.5显示程序设计 (14) 4.6距离计算程序 (15) 5.结论 (17) 参考文献 (18)

基于单片机的超声波测距报警系统设计

综合性课程设计报告基于proteus仿真软件的超声波测距报警控制器设计 院系:计算机与通信工程学院 专业:电子信息工程 学号: 姓名: 指导教师: 设计时间:2012/6/27 综合课程设计任务书

专业:电子信息工程班级:4091603: 设计题目:基于proteus仿真软件的超声波测距报警控制器设计 一、设计实验条件 keil C和proteus仿真软件 二、设计任务 1)总体功能设计 2)硬件电路设计 3)软件设计 4)工作总结 三、设计说明书的容 1.设计题目与设计任务(设计任务书) 2.前言(绪论)(设计的目的、意义等) 3.主体设计部分(各部分设计容、总结分析、结论等) 4.结束语 5.参考文献 (答辩时间18周星期日晚7:30,地点:综合楼1313室) 四、设计时间与设计时间安排 1、设计时间:2周 2、设计时间安排: 熟悉实验设备、实验、收集资料:2 天 设计计算、绘制技术图纸:5 天 编写课程设计说明书:2 天 答辩:1 天 目录

一、设计题目 (2) 二、设计任务及要求 (3) 三、设计容 (3) 1.绪论 (3) 2.总体方案 (4) 2.1 总体设计方案 (4) 2.2超声波测距框图 (4) 3.系统硬件设计 (5) 3.1 硬件设计方案 (5) 3.2 各主要模块的硬件设计 (6) 4.系统软件设计 (10) 4.1 程序设计 (10) 4.2 程序流程图 (10) 四、结束语 (13) 五、参考文献 (13) 附录A 系统仿真图 (14) 附录B程序代码 (15) 一、设计题目 基于proteus仿真软件的超声波测距报警控制器设计

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 国内外现状

最经典的52单片机C语言HC -SR 04超声波测距程序

/****************************************************************************** *****************************/ //HC-SR04 超声波测距模块//晶振:11。0592 /****************************************************************************** *****************************/ #include #include #define uchar unsigned char #define uint unsigned int sbit RX=P2^1; sbit TX=P2^2; unsigned int time=0; unsigned int timer=0; float S=0; bit flag =0; void moto_left() { P1=0x02; } void moto_forward() { P1=0x0a; } /********************************************************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.87)/100; //算出来是cM if(flag==1) //超出测量 { flag=0; } if(S<15&&S>0) { moto_left(); }

超声波测距电路图

超声波测距电路图 超声波测距电路原理和制作 由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。 二、超声波测距原理 1、超声波发生器 为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。

2、压电式超声波发生器原理 压电式超声波发生器实际上是利用压电晶体的谐振 来工作的。超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。 3、超声波测距原理 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 图1 超声波传感器结构 这就是所谓的时间差测距法。 < 三、超声波测距系统的电路设计 图2 超声波测距电路原理图

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;

相关文档
最新文档