当前位置:文档之家› 倒车雷达程序(超声波测距)

倒车雷达程序(超声波测距)

disp_buf[3]=(uchar)(temp2%10);//提取个位值
}
//------------------------------------------------------------------------------------------------------------------------------
{
dula=1;
P0=table[disp_buf[0]];//显示千位
Dot=1;//显示小数点
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
Delay_ms(1);
dula=1;
P0=table[disp_buf[1]];//显示百位
dula=0;
P0=0xff;
wela=1;
disp_buf[0]=(uchar)(distance/1000);//提取千位值
temp1=(uint)(distance%1000);
disp_buf[1]=(uchar)(temp1/100);//提取百位值
temp2=(uchar)(temp1%100);
disp_buf[2]=(uchar)(temp2/10);//提取十位值
//定时/计数器0中断服务函数:如果测量距离超过4米时,定时计数器会溢出产生中断
//------------------------------------------------------------------------------------------------------------------------------
//显示函数:将距离值显示在数码管上
//------------------------------------------------------------------------------------------------------------------------------
void Display()
//主函数
//------------------------------------------------------------------------------------------------------------------------------
void main()
{
uchar i;
caculate()
{
uint temp1,temp2;
distance=time*172;//计算距离
distance/=1000;//单位换算成毫米
distance+=10;//校正误差
if(distance<=500)//离障碍物半米时,告警声音间隔短
warming=1;
else
warming=0;//有障碍物是发出一般性警告,告警声音间隔长
Display();
beer=0;
for(b=0;b<5;b++)
{
Display();
}
}
if(1==warming)//障碍物离车的距离小于0.5米,蜂鸣器发出急促的告警声音
{
uchar c;
beer=1;
for(c=0;c<20;c++)
Display();
beer=0;
}
TH0=0x00;//定时计数器清零,为下次测量做准备
while(1)
{
for(i=0;i<100;i++)//测量开始之前数码管清零
Display();
Trig=1;//发送超声波,持续时间为20us
delay_us();
Trig=0;//停止发送超声波
while(INT0==0);//等待Echo端口电平变高
TR0=1; //定时器0开始计时
while(INT0==1);//等待Echo端口电平变低
void external0() interrupt 1
{
TR0=0;//停止计数
TH0=0x00;
TL0=0x00;//T0清零
LED=~LED;//点亮发光二极管
Delay_ms(3);
LED=1;
}
//------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------
#include <reg52.h>
#define uint unsigned int
TR0=0; //停止计时
EA=0;//关闭总中断
ET0=0;//关闭T0中断
time=256*TH0+TL0;//读取时间
caculate();//调用数值计算函数
if(0==warming)//障碍物离车的距离大于0.5米
{
uchar a,b;
beer=1;
for(a=0;a<100;a++)//调用数码管显示程序来做延时
开发时间:2014年5月7日星期三姓名:杨言安地点:山西大学
//-----------------------------------------------------------------------------------------------------------------------------
//短延时函数:用于超声波发射
//------------------------------------------------------------------------------------------------------------------------------
void delay_us()
sbit LED=P1^1;//发光二极管,用于显示是否超出测量范围
sbit beer=P2^3;//蜂鸣器控制口
bit warming;//告警位变量
ulong time;//时间变量,单位为us
ulong distance;//距离变量
uchar code table[]={0x3f,0x06,0x5b,0x4f,
INT0=0;//将外部中断0拉低,为检测电平变化做准备
Trig=0;//将触发端拉低
LED=1;//关闭发光二极管
TMOD=0x09;//打开定时计数器门控卫(GATE0=1)且让定时计数器工作在16位计数模式下
TH0=0x00;//初始化定时/计数器0
TL0=0x00;
EA=1;//开总中断
ET0=1;//开定时器T0中断
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
Delay_ms(1);
}
//------------------------------------------------------------------------------------------------------------------------------
//名称:简易倒车雷达
//-----------------------------------------------------------------------------------------------------------------------------
//说明:单片机控制超声波模块时时测量汽车后面障碍物的距离(测量范围为3cm--4m),//并将距离值显示在数码管上。当汽车后面有障碍物时数码管会显示障碍物的距离同时告警//电路发出"嘀嘀嘀"的声音,当障碍物离汽车的距离小于0.5米时告警电路发出"嘀嘀嘀"的声//音的频率增加,以此提醒车主注意安全。(单片机型号STC89C52,晶振频率12MHz,超声波模块HC-SR04)
//数值计算:计算距离并校正,最后将其拆分成单个的数字存取到显示缓存中,供数码管//显示时调用
//------------------------------------------------------------------------------------------------------------------------------
{
uint i,j;
for(i=xms;i>0;i--)
for(j=115;j>0;j--);
}
//------------------------------------------------------------------------------------------------------------------------------
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};//共阴数码管段代码
uchar data disp_buf[]={0x00,0x00,0x00,0x00};//显示缓存
//------------------------------------------------------------------------------------------------------------------------------
相关主题