图3-4:显示单元图
3.2.4报警声响电路单元
本单元采用,一只5伏的蜂鸣器作为报警声响输出,由三极管BG7进行驱动,当测量距离小于1.00m时,蜂鸣器发出:滴、滴、滴??的报警声响。
图3-4:报警声响单元图
11
四.系统软件设计
4.1 主程序设计
超声波测距的软件设计主要由主程序、超声波发生子程序、超声波接收程序及显示子程序组成。超声波测距的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言编程。
主程序首先是对系统环境初始化,设定时器0为计数,设定时器1定时。置位总中断允许位EA。进行程序主程序后,进行定时测距判断,当测距标志位cl==1,即进行测量一次,程序设计中,超声波测距频度是2次/秒。测距间隔中,整个程序主要进行循环显示测量结果。当调用超声波测距子程序后,首先由单片机产生6-8个频率为38.46kHz超声波脉冲,加载的超声波发送头上。超声波头发送完送超声波后,立即启动内部计时器T0进行计时,为了避免超声波从发射头直接传送到接收头引起的直射波触发,这时,单片机需要延时约1.5 -2ms时间(这也就是超声波测距仪会有一个最小可测距离的原因,称之为盲区值)后,才启动对单片机P3.7脚的电平判断程序。当检测到P3.7脚的电平由高转为低电平时,立即停止T0计时。由于采用单片机采用的是12 MHz的晶振,计时器每计一个数就是1μs,当超声波测距子程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(2)计算,即可得被测物体与测距仪之间的距离。
设计时取15℃时的声速为340 m/s则有: d=(c×t)/2=172×T0/10000cm其中,T0为计数器T0的计算值。 测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。 4.2 超声波测距子程序 void csbcj()
//超声波测距子程序
{ if(cl==1) {
TR1=0; TH0=0x00; TL0=0x00; i=20;
//超声波脉冲个数10个
12
while(i--) { csbout=!csbout; } TR0=1; i=15; while(i--) { } i=0; while(csbint) { i++; if(i>=1000) 出接收回波处理程序 csbint=0; } TR0=0; TH1=0x9E; TL1=0x57; t=TH0; t=t*256+TL0; s=t*csbc/2;
TR1=1; cl=0; } }
//判断接收回路是否收到超声波的回波
//如果达到一定时间没有收到回波,则将csbint置零,退
//计算测量结果
13
4.3 超声波测距程序流程图
初始化 开始
14 显示 显示值= - - - 距离>上限值 启动定时器 =1 测量标志 =0 超声波测距 Y =N 距离<盲区值 显示值= C C C =N测量段码转换 设定段码转换 N 距离<报警值 Y 报警输出
4.4 超声波测距程子序流程图
发送超声波 N 时间=1s? Y超声波测距
N 延时避开盲区 启动计时器T0
收到回波否? Y预设时间? N Y
停止计时
计算测量值
结束 五.调试及性能分析
5.1调试步骤
我们的步骤是先焊接各个模块,焊接完每个模块以后,再进行模块的单独测试,以确保在整个系统焊接完能正常的工作,原件安装完毕后,将写好程序的AT89C2051
机装到测距板上,通电后将测距板的超声波头对着墙面往复移动,看数码管的显示结果会不会变化,在测量范围内能否正常显示。如果一直显示“- - -”,
15