资源描述:
《智能循迹避障小车完整程序(亲测好使).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、/*******************************************//利用51定时器产生PWM波来调节电机速度//速度变化范围从0-100可调//使用三路做寻迹使用,哪一路检测在黑线哪一路为//高电平//没检测到黑线表示有反射对应输出低电平信号*********************************************/#include#defineuintunsignedint#defineucharunsignedchar/*电机四个接口定义*/sbitin1=P0^0;sbitin2=P0^
2、1;sbitin3=P0^2;sbitin4=P0^3;/*计时器*/ucharj,k,i,a,A1,A2,second,minge,minshi;sbitdula=P2^6;sbitwela=P2^7;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcodetable2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xf
3、c,0xb9,0xde,0xf9,0xf1};voiddelay(uchari){for(j=i;j>0;j--)for(k=110;k>0;k--);}voiddisplay(ucharsh_c,ucharg_c,ucharmin_ge,ucharmin_shi){dula=1;P0=table[sh_c];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(5);dula=1;P0=table[g_c];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(5);dula=1;P0
4、=table[min_shi];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table2[min_ge];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(5);}/*左、中、右三路循迹传感器接口定义*/sbitzuo=P1^0;sbitzhong=P1^1;sbityou=P1^2;/*避障接口定义*/sbitbz_zuo=P1^3;sbitbz_zhong=P1^4;sbitbz_you=P1^5;ucharcount=0;/*利用定时器0定时
5、中断,产生PWM波*/voidInit_timer(){TH0=(65535-10)/256;TL0=(65535-10)%256;TMOD=0x01;TR0=1;ET0=1;EA=1;}/*左轮速度调节程序*/voidzuolun(ucharspeed){if(count<=speed)//count计数变量{in1=1;in2=0;}else{in1=0;in2=1;}}voidyoulun(ucharspeed)//同上{if(count<=speed){in3=1;in4=0;}else{in3=0;in4=1;}}voidInline()/
6、/检测黑线信号{uchartemp;temp=P1;switch(temp){case0x01:zuolun(0);youlun(90);break;//左侧循迹传感器压线,小车向左前修正case0x02:zuolun(100);youlun(100);break;//中间循迹传感器压线,保持直走此处两值使电机速度保持相同case0x04:zuolun(90);youlun(0);break;//右侧循迹传感器压线,小车向右前修正case0x08:zuolun(90);youlun(0);break;//左侧避障传感器有信号小车右转case0x10:
7、zuolun(90);youlun(0);break;//中间避障传感器有信号小车左转case0x20:zuolun(90);youlun(0);break;//右侧避障传感器有信号小车左转}/*if(zuo==1){zuolun(10);youlun(50);}elseif(zhong==1){zuolun(99);youlun(99);}elseif(you==1){zuolun(50);youlun(10);}*/}voidmain()//主函数{Init_timer();//调用函数while(1){Inline();minge=0;mins
8、hi=0;second++;if(second==60)second=0,minge++;A1=second