当前位置:首页 > 基于超声波测距的智能小车设计 - 图文
}
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
共分享92篇相关文档