超声波测速系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:超声波测距系统

一、设计目的:

1、通过本次课程设计加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解。

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

二、设计任务:

利用单片机及外围接口电路(显示接口电路)设计制作超声波测距仪器,用LED把测距仪距被测物的距离显示出来。

三、具体要求:

1.使用软件Proteus 7 Professional测试仿真调试,并在keil环境下编写程序并调试。

2.在面包板上进行初步仿真测试,设计好布线以及焊接排序。

3.在PCB板上焊接元器件电路,并进行测试得出实验结果。

四、设计原理

(一)硬件设计

1.超声波测距原理

超声波测距原理是通过超声波发射器向某一方向发射超声波(一般为40KHz 的超声波),在发射时刻的同时开始计时,超声波在空气中传播时碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为v ,而根据计时器记录的测出发射和接收回波的时间差△t ,就可以计算出发射点距障碍物的距离S ,即: S = v•△t /2

超声波测距仪原理框图

(1)单片机最小系统

单片机最小系统电路,由主控器STC89C52、时钟电路和复位电路三部分组成。单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。

(2)晶振电路

位单片机提供时钟频率

(3)复位电路

复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

总的电路图如下:

(二)软件设计

软件分为两部分,主程序和中断服务程序。主程序完成初始化工作、超声波发射和接收,距离计算、结果的输出。外部中断服务子程序主要完成时间值的读取。主程序首先是对系统环境初始化,设置定时器T1工作模式为16位定时计数器模式。置位总中断允许位EA。然后给Trig一个20us的高电平,然后在Echo 引脚等待其变为高电平,一旦输出了高电平,表明超声波已开始发射,此刻即计时,等待Echo变为低电平,即触发外部中断0的跳变沿方式中断。读取当前定时器的值,换算成时间,乘以波速,即得到测距距离。

程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0-9

unsigned char led[]={0x40,0x79,0x24,

0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的位码

sbit SMG_q = P2^0; //定义数码管的千位

sbit SMG_b = P2^1; //定义数码管的百位

sbit SMG_s = P2^2; //定义数码管的十位

sbit SMG_g = P2^3; //定义数码管的个位

sbit Trig = P2^7; //发送波形

sbit Echo = P3^2; //回波产生中断

sbit test = P1^0; //指示灯控制端

uint succeed_flag,time,timeH,timeL; //succeed_flag测试成功标志位void delayms(uint z) //延时毫秒

{

uint x,y;

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

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

}

void delay_20us() //延时20微秒函数

{

uchar a ;

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

}

//*******数码管显示数据转换程序********************//

void display(uint temp)

{

uchar ge,shi,bai,qian;

qian=temp/1000;

bai=temp%1000/100;

shi=temp%1000%100/10;

ge=temp%10;

SMG_q=0;

P0=table[qian]; //查找定义好的数码管段值与P0口

delayms(2); //加入短暂延时

P0=0Xff; //清除数码管显示,因是共阳型,

SMG_q=1; //关闭千位数码管

SMG_b=0; //选择百位数码管

P0=table[bai]; //查找定义好的数码管段值与P0口

delayms(2); //加入短暂延时

P0=0Xff; //清除数码管显示,因是共阳型,

SMG_b=1; //关闭百位数码管

SMG_s=0; //选择十位数码管

P0=led[shi]; //查找定义好的数码管段值与P0口

delayms(2); //加入短暂延时

P0=0Xff; //清除数码管显示,因是共阳型,

SMG_s=1; //关闭十位数码管

SMG_g=0; //选择个位数码管

P0=table[ge]; //查找"2"定义好的数码管段值与P0

delayms(2); //加入短暂延时

P0=0Xff; //清除数码管显示,因是共阳型,

SMG_g=1; //关闭个位数码管

}

相关文档
最新文档