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

内容发布更新时间 : 2024/5/10 13:26:55星期一 下面是文章的全部内容请认真阅读。

.

} }

void IR_IN(void) interrupt 2 {

unsigned char j,k,N=0; EX1 = 0; IRdelay(5); if (TRIG==1) { EX1 =1; return; }

//确认IR信号出现

while (!TRIG) //等IR变为高电平,跳过9ms的前导低电平信号。 {IRdelay(1);}

for (j=0;j<4;j++) //收集四组数据 {

for (k=0;k<8;k++) //每组数据有8位 {

while (TRIG) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {IRdelay(1);}

while (!TRIG) //等 IR 变为高电平 {IRdelay(1);}

while (TRIG) //计算IR高电平时长 {

IRdelay(1);

N++; if(N>=30) {EX1=1; return;} //0.14ms计数过长自动离开。

} //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0; }//end for k

}//end for j

if(IRCOM[2]!=~IRCOM[3]) //判断数据码与数据反码是否正确 真确返回 { EX1=1; return; }

EX1 = 1;

'.

.

}

void time1_suspend1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断0 4 串口中断 {

TH1=0Xec; //装入初值定时一次为0.0005s 2000hz TL1=0x78; time_2++; //控制PWM 脉冲计数 if(state_total!=3) //判断进入按键是否按下 进入状态1 避障 或者 { state_2=1; //退出按键判断 }

/* if(time_2>100) { time_2=0; } else if(time_2<=SPEED) { PWM_g; //频率为2000hz的占空比为高电平的方波 } else { PWM_l; //为低电平 } */ }

void IRdelay(unsigned char x) //x*0.14MS用于红外遥控 {

unsigned char i; while(x--) {

for (i = 0; i<13; i++) {} } }

void Delay10ms(void) //用于按键检测误差 {

unsigned char a,b,c; for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--); }

void delay(uint dat) //延时函数用于初始化 {

uint i;

for(i=dat;i>0;i--)

'.

0 循迹 .

{ _nop_(); } }

void delay_100ms(uint ms) //延时函数用于超声波 {

uint i,j;

for(i=ms;i>0;i--) for(j=200;j>0;j--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } }

//小车前进 void run(void) {

PWM=0X56; }

//小车后退

void back(void) {

PWM=0XA9; TR1=1; time_2=0;

while(time_2<=100); //延时0.2s TR1=0; }

//小车停止

void stop(void) {

PWM=0X00; }

//小车左转180 void left_180() {

//PWM=0X59; //左两轮反转,右两轮正转 PWM=0X50; //右两轮正转 TR1=1; time_2=0;

while(time_2<=150); //延时0.2s

'.

.

time_2=0;

while(time_2<=150); //延时0.2s }

//小车左转 90 void left_90(void) {

PWM=0X59; //左两轮反转,右两轮正转 //PWM=0X50; //右两轮正转 TR0=1; time_1=0;

while(time_1<=20); //延时0.2s TR0=0; }

//小车左转 120 void left_120(void) {

PWM=0X59; //左两轮反转,右两轮正转 // PWM=0X50; //右两轮正转 TR0=1; time_1=0;

while(time_1<=60); //延时0.4s TR0=0; }

//小车右转 90

void right_90(void) {

PWM=0XA6; //左两轮正转 右两轮反转 //PWM=0X06; //左两轮正转 TR0=1; time_1=0;

while(time_1<=20); //延时0.2s TR0=0; }

//小车右转 120

void right_120(void) {

PWM=0XA6; //左两轮正转 右两轮反转 // PWM=0X06; //左两轮正转 TR0=1; time_1=0;

while(time_1<=60); //延时0.4s TR0=0;

'.