智能小车循迹、避障、红外遥控C语言代码 下载本文

内容发布更新时间 : 2024/12/22 16:15:55星期一 下面是文章的全部内容请认真阅读。

.

}

/************************************ 自动避障模块

************************************/

void display(uchar temp) //判断障碍距离小车的距离,左转180,前进,峰呤器报警1602显示

{ uint ge,shi,bai,i;

if((temp<=20)&&(temp>2)) //小于15厘米 小车后退 再左转 { back(); left_180(); } if(count>=20) {bai=temp/100; //1602显示数据 date_data[5]=bai; shi=(temp0)/10; date_data [6]=shi; ge=temp0; date_data[7]=ge; for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(date_data[i]+48); } count=0; } }

void bizhang_test() { int i,j=0;

uchar distance_dat; delay(50); for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh7[i]); } while(1) { run(); EA=0; //关总中断 TRIG=1; // 发射20us脉冲信号 delay(30);

'.

.

TRIG=0;

while(ECHO==0); //等待接收信号 state=0; //标志清零 EA=1; //开总中断 EX0=1; //打开外部中断0 P3.2外部中断0引脚 此时为高电平 TH0=0x00; //定时器0 初值 TL0=0x00;

TF0=0; // 定时器0方式1计数溢出标志 TR0=1; // 定时器0方式1启动定时器1

while(state!=1);

EX0=0; // 关闭外部中断0 TR0=0; // 关闭定时器0中断 TF0=0; // 定时器1方式1计数溢出标志 if(state==1) //检测到障碍物计算离障碍物的距离 { time=(timeH*4.352+timeL*0.017); //设定超声波的速度为340m/s 计数一次1us distance_dat=time; } else //未检测到障碍物 无返回信号 {

distance_dat=0; } distance[j]=distance_dat; j++; if(j==3) { if(distance[0]>distance[1]) {} else { distance[0]=distance[1]; } if(distance[0]>distance[2]) {} else { distance[0]=distance[2]; } if(distance[0]>distance[3]) {} else { distance[0]=distance[3];

'.

定时 } distance_dat=distance[0]; j=0; display(distance_dat); } count++; } }

void xunji_test() { int i; delay(50); for(i=0;i<8;i++) {

LCD1602_WriteCom(0x80+i);

LCD1602_WriteData(ENCHAR_PuZh6[i]); } while(1) {

// delay(10); state_1=HW;

DAT=state_1&(0x0f); //判断低4位的状态 switch(DAT) { case 0x00: run(); break; case 0x01: right_120(); break; case 0x02: right_90(); break; case 0x04: left_90(); break; case 0x06: run(); break; case 0x03: right_120(); break; case 0x08: left_120();

'.

.

每隔5ms检测一次 .

break; case 0x0c: left_120(); break; default: run(); break; } } }

void hongwai_test() { int i; delay(60); for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh8[i]); } // TR1=1; while(1) { Number=IRCOM[2]; switch(Number) {

case 0x18:

'.

PWM=0X56; //前进 for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh1[i]); } break; case 0x08: PWM=0X50; //右两轮正转 左转 for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh4[i]); } break; case 0x1c: PWM=0X00;