基于超声波测距的智能小车设计 - 图文 联系客服

发布时间 : 星期六 文章基于超声波测距的智能小车设计 - 图文更新完毕开始阅读

}

wei2=(real_dis/100); wei3=real_dis/1000;

/*显示刷新函数函数*/ void display(void) {

switch(ledflag)

{

case

0:P1=ledcode[wei0];ledwei0=1;ledwei1=0;ledwei2=0;ledwei3=0;break;

case

1:P1=ledcode[wei1];ledwei0=0;ledwei1=1;ledwei2=0;ledwei3=0;break;

case

2:P1=ledcode[wei2];ledwei0=0;ledwei1=0;ledwei2=1;ledwei3=0;break;

case

3:P1=ledcode[wei3];ledwei0=0;ledwei1=0;ledwei2=0;ledwei3=1;break;

}

ledflag++; if(ledflag==4) ledflag=0;

delay(0x80);//768us=0.768ms//520次

}

/*报警处理函数*/ void alarm_light(void) {

if(real_dis<=10) { }

else if(real_dis<20)

39

speak=1;

{ if(alarm_flag20>=1) {

speak^=1; alarm_flag20=0; }

}

else if(real_dis<50) { if(alarm_flag50>=2) {

speak^=1; alarm_flag50=0; }

}

else if(real_dis<100) { if(alarm_flag100>=4) {

speak^=1;

alarm_flag100=0;

} } else {

speak=1;

}

}

/*系统初始化程序*/ void init()//系统初始化

40

{ }

void int0(void) interrupt 0 //关闭计数器,存计数值,置标志 {

EA=0;

//关闭中断

//关外部中断 //读取数值

temp=0xfe; P2=temp;

TMOD=0X11; //初始化定时器T0,T1用于产生40hz发射波 TH0=0x00; TL0=0x00; TH1=0x00; TL1=0x00; TF1=0; PX0=1; ET1=1; EA=1; TR1=1; IT0=0;

//启动定时器1 //外部低电平触发方式

EX0=0; TimerL=TL0; TimerH=TH0; TR0=0; TH0=0x00; TL0=0x00; dis_flag=1; }

//关闭定时器0

//距离计算标志

void time1(void) interrupt 3 {

TF1=0; TH0=0x00;

41

}

TL0=0x00; TH1=0x00; TL1=0x00; send_flag=1;

//开启接收回波中断

/*系统主函数*/ void main() {

unsigned int i,j; init(); real_dis=150; delay(0x40); while(1) {

if(send_flag==1) {

//系统初始化

//y预设初值,防止开机未发射超声波,电机锁死

/* 报警级别计数*/

alarm_flag100++; alarm_flag50++; alarm_flag20++; alarm_flag10++;

/* 报警级别计数*/

send_flag=0; count++; if(count==5) {

count=0; CLK40K();

delay(0x40); //延时,避开发射的直达声波信号,可以调节测量

42

的最小距离

}

if(dis_flag==1) {

dis_flag=0; }

distance(); EA=1; }

EX0=1;

display(); //调用显示函数

if(real_dis<=10) { } }

a=temp>>i; b=temp<<(9-i); P2=a|b;

for(j=1;j<9;j++) {

delay(300);

display(); //调用显示函数 for(i=1;i<9;i++)//循环下移

alarm_light(); }

}

43