超声波倒车报警器(3)

2019-02-15 11:01

}

}

}

displaynum(distance1); //显示距离、温度 displaynum2(distance2); displaynum3(tmp);

4.2 超声波测距程序

超声波接收程序主要是利用外中断检测返回超声波信号,一旦接收到返回超声波信号(即INT引脚出现高电平),立即启动定时器,并延时14ms。若14ms内回波电平由高变低,则触发中断,关闭计时器,保存计时器值,并将测距成功标志字赋值1。如果14ms后还未收到结束信号,则测距不成功。

其程序流程图如图4-2所示。

图 4-2

10

其距源程序如下:

void measure1() //测距1 {

uint time; Trig1=0;

TMOD=0x01; //设置T0为计时器工作方式1 EA=0; // Trig1=1; // delay12us(); Trig1=0; succeed_flag=0;

EA=1; // TH0=0; TL0=0;

while(Echo1 == 0); // EX0=1;

TR0=1; // delay(14); // TR0=0; EX0=0;

if(succeed_flag == 1){ // time=timeH*256+timeL; distance1=time*speed; }

if(succeed_flag == 0){ // distance1=30;

}

}

关中断 发出声波 开中断, 等待回波电平 计时开始 等待电平跳变 测距成功,计算距离 测距不成功,距离值为3m 11

void measure2() //测距2,同上 {

uint time; Trig2=0; TMOD=0x10; EA=0; Trig2=1; delay12us(); Trig2=0; succeed_flag=0; EA=1;

TH1=0; TL1=0; while(Echo2 == 0); EX1=1;

TR1=1; delay(14); TR1=0; EX1=0;

if(succeed_flag == 1){ time=timeH*256+timeL; distance2=time*speed; } if(succeed_flag == 0){ distance2=30; }

}

12

void timerstop1() interrupt 0 //外中断0,控制T0 {

EX0=0; timeH =TH0; timeL =TL0; succeed_flag=1; }

void timerstop2() interrupt 2 //外中断1,控制T1 { EX1=0;

timeH =TH1; timeL =TL1; succeed_flag=1; }

需要说明的是,主程序中已经设置相关语句用于检测距离值的有效性,3m为无效数据。 4.3 1602显示程序

设计使用的1602液晶为5V电压驱动,可显示两行,每行16个字符。 1602的写操作时序如图4-3所示:

图 4-3

13

程序流程如图4-4所示

图 4-4

时序图中的延时,因厂家而定,一般在纳秒级。因为单片机时序为微秒级,故程序中可不作延时,但稳定性的角度考虑,仍作简短延时。

1602显示源程序如下: void write_com(uchar com){ }

void write_dat(uchar com){

lcdrs=0; //写入指令 P0=com;

delay(5); //短暂延时 lcden=1; delay(5); lcden=0;

lcdrs=1; //写入数据 P0=com; delay(5); lcden=1;

14


超声波倒车报警器(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012年福建成人高考复习重点(各科试题精选) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: