基于AT89C52单片机的智能小车c语言程序
#include#define uchar unsigned char#define uint unsigned intucharpro_left=35,pro_right=35,i,j; //左右占空比标志 sbit left1=P2^1;//定义端口sbit left2=P2^0;sbit right1=P2^3;sbit right2=P2^2;sbitpleft=P2^7;sbitpright=P2^6; sbit en1=P1^0; sbit en2=P1^1; //循迹口 三个红外传感器sbitleft_red=P1^2; //白线位置sbitright_red=P1^4; //白线位置void delay(uint z){uchari;while(z--) {for(i=0;i<121;i++);}}voidinit(){left_red=0; //白线位置right_red=0;TMOD=0X01;TH0=(65536-100)/256;TL0=(65536-100)%256;EA=1;ET0=1;TR0=1;en1=1;en2=1;}void time0(void)interrupt 1//定时中断{i++;j++;if(i<=pro_right) {en1=1;} else en1=0;if(i==40) {en1=~en1;i=0;}if(j<=pro_left) {en2=1;}else en2=0;if(j==40) {en2=~en2;j=0;}TH0=(65536-100)/256;TL0=(65536-100)%256;}void straight() //走直线函数{pro_right=20;pro_left=20;left1=1;left2=0;right1=1;right2=0;}void turn_left() //左转弯函数{pro_right=0;pro_left=20;left1=1;left2=0;right1=1;right2=0; }void turn_right() //右转弯函数{pro_right=40;pro_left=0;left1=1;left2=0;right1=1;right2=0;}void turn_back() //后退(反转)函数{left1=0;left2=1;right1=0;right2=1; pro_right=20;pro_left=20;}void infrared() //循迹和避障{ uchar flag;if((pright==1)||(pleft==1)){if((left_red==1)&(right_red==0)) {flag=1;} elseif((right_red==1)&(left_red==0)) {flag=2;}elseif((left_red==0)&(right_red==0)) {flag=3;}else {flag=0;}}else if((pright==0)&(pleft==1)) {flag=4;}else if((pright==1)&(pleft==0)) {flag=5;}else if((pright==0)&(pleft==0)) {flag=6;}else {flag=0;}switch (flag) {case 0:straight();break;case 1:turn_right();delay(1000);break;case 2:turn_left();delay(1000); break;case 3:straight();delay(1000);break;case 4:turn_back();delay(1000);turn_left();delay(1000);break;case 5:turn_back();delay(1000);turn_right();delay(1000);break;case 6:turn_back();delay(1000);turn_left();delay(1000);break; default:break; }}main (){init();delay(1);while(1) {infrared(); }}