还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
Main.cttinclude^common.h〃ttinclude motor.h〃#include timer.h〃uchar speedl;uchar speedr;sbit out=P37void main{Pl=Oxff;flag_l=0;flag_r=0;sensorldata=0;sensor_rdata=0;avoidkeyfunc=0;findline_keyfunc=0;motor stop;ini=0;〃左电机正转in2=1;in3=1;〃右电机正转in4=0;ENA=flag_l;ENB=flagr;}void motor_r//电机前进函数ini=1;〃左电机正转in2=0;in3=0;〃右电机正转in4=1;ENA=flag_l;ENB=flag_r;MOTOR.Httifndef_MOTOR_H#define_MOTOR_H—extern void motor_go;extern void motor_stop;extern voidmotor_r;extern voidmotor_l;ttendifTimei.cttinclude reg
52.httinclude common.h〃ttinclude main.h〃sbit sensor_l=P26;sbit sensor_r=P27;sbit kl=P30;sbit k2=P31;sbit k3=P32;//sbit buzzer=P37;uint num,numl,num2,num3,num4;bit sensor_ldata;bit sensor rdata;uchar sensor;bit flagl;bit f1ag_r;bit avoidkeyfunc;bit findline_keyfunc;void timerinit{TMOD=0X01;THO=65536-100/256;TLO=65536-100%256;TRO=1;〃定时器开关ETO=1;〃中断开关EA=1;}////void timer_0interrupt1TRO=0;THO=65536-100/256;//
0.InsTLO65536-100%256;二num++;numl++;nuni2++;num3++;num4++;/xlxxlxxlx%tx vfx%fx vfxvtx^tx^lx%lx%lz^£z1^vlx/XTV^TxTxxTsxT^rx^r%xTs^TXXTV*TXTX^TXTX xTxxTx每隔Ims扫描循迹传感器/1~^-*v~\11Y~Y~\1|个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个/JL JL\11UIIIO-------1/num3=0;sensor=Pl;/**********************************************左边电机速度控制**********************************************/ifnum speed1flag_l=1;〈ifnumspeed1flagl=0;if num==100num=0;/**********************************************右边电机速度控制**********************************************/ifnumlspeedr ifnumlspeed_r flag_r=0;if numl==100numl=0;/********************************************每隔21ns扫描避障传感器£**£^*£**£**X*/r-I-/y--»«*7——•1\«YY\不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不/\iILllIlzS乙)num2=0;sensor Idata=sensor」;sensor rdata=sensorr;/*lx*Jx*Jx*Jz*lz*lxsi*st**Jx*lx*Jx*lxvl*1**1^xlxxlx*lx*A*si*vt**Jxvlx*Jxsi*si*six*Jx*Jxxlx*lx*£*sixsi*six*Jx/XTS T^TXTS^TSZTSXTSXTSXTSTXZTS✓!1^XTSTXXj✓TX#TSZTXXTX^TSXTS✓TXX7XTSXTSXTSXTSXTXZTSTX#TSZTSZTSXjSXjSXTSTX✓TSXTS»✓TXTS每隔10ms按盘扫描一次**************************************************/jfnum4==10num4=0;ifkl=0〃使能按键findline_keyfunc=1;avoid keyfunc=0;ifk2==0〃避障功能键avoid_keyfunc=1;findline keyfunc=0;ifk3==0avoid_keyfunc=0;findline_keyfunc=0;////////////////////////////////////////////////TRO=1;TIMER.H ttifndefTIMER H^define_TIMERJI—extern bitflag_l;extern bitflag_r;extern bitsensor_ldata;extern bitsensor rdata;extern ucharsensor;extern bitavoid keyfunc;extern bitfindlinekeyfunc;extern voidtimerinit;#endifCOMMON.II#ifndef_COMMON_H^define COMMON_Httinclude reg
52.httinclude intrins.h#define uintunsigned int#define ucharunsigned char#endiftimerinit;while1/sixlxsi*si*%IxJxvlx^L*%Jx*Jx vlxxlxsix^L*1^£*si*six%lxsixvL*vizvizvlx*lxlxsixsixsi*sixsixsixlzsi**Jx%lxvL*xl*/xTxxTxyy*zv*✓v*xTxxrs7x*rs*rsxrsxrsxrs^rs*TsXV*TSXV*XTXXTSyrs✓v*xTxxrs*rx XTXxrxxrxXTX✓Tx✓TxxrsTTx✓TsxTxxvsxvsxTsx*SxTxjxXTX*Tsxi循迹功能vlx*Jx*Jzxl*^1**lx xlx*lzxlz*lzvt**Ixxf^1^xlz*A*xl*vlx*Jx*lz*Jx^1*xL*xl**A**X*/ZTSXTST%XTSXjSXjX✓TS✓T%TsXT%✓jSXTS^TSXTSZTSXTSXTSXlXTXT%✓TSZTS✓TSXTSTSZTSZTX✓!rSrSXTS✓»XTXZTSTSZTSZTXXTSXTSXT%XT%XTSXTSXTSXT%XTSZTSXT%XTSXTSXTSXTSXTS^TSTX^TS^TS/whilefindline_keyfunc/xlx^lzvL**Jx^L*^fxsi*si*%£zvizvlxvizsixsL*sixvlxlxvYxvl*%lzsixvlxxL*vL**Jxsix%lx%lxsixsi*sixsix*Jxlz%L*^lx%L**lzsi*sixvlxxlx*Jx*Jx sixvlxL*si*si*six/XT*XT*XTXXjXXjXXT*✓TSXT*XjSXjXXjXXTXXT^X^X^XTX✓TX✓TXxrsXT*XTS✓TX✓Tx✓TXXTX#T*TZTX✓TSZ7X✓1XjSXTS✓jX✓TX✓TXXT*✓V*XjS✓jS✓jX*TXXTX XT**TSXV^^jSXTX✓TX正常情况下前进1^st*si**1**5^*5^*^**1;**J**J**5^/ZTSXTSXTSXTXZJS✓TxXjXXTX✓TxXT^XTSXTS^7XX|XXTXXjXXTSXVSX|X✓Jx✓Tx✓TXXIXXT^XTSX7XXTXxjxXlXXTXXT%✓TxZ|XxjxxjxXTXXTXX|SX|SZ|XZ7XXJXXIXXTXXTSX|SX|SX7XXTXXTX^T\XTSXTSX|XX7XxjxXTXXTSXTSXTSxjxzTxXIXXTS/if sensor==0x27motor_go;speed r47;speed_l=50;/vlxvL*vL*vL*vL*\L*si*1^*1**1;*^1*/XTXXTSXTSX|SX|^X7X XTSXTSX|SZ|SXIXXT^XTXXTSXVSX|X✓JX✓TXXlXXTSXT%XTXXjXXIXXjXXlXXTXXT^XgSZjXX7XZTX*TXXTSZ|XZ|SZ7XXjXZTXXlXXTSXTXX|SX|SZ7XXjXXTXXTXXTSXTSX7XZ7XXTXXT^XTSXT*^TXZjS#TXXTXXtSX1S如果小车偏左*1**1**1**4**4*1**dol*v!viol*1*1**1**1**1**1*^1**1**1^*J1**1**1*vjxtx1^1**1^*lzL^1^1**1**1**Jol*tzlzlz/*Ts*7^r*r*xT^zTv*T%r*zT^Zrx*7^zT^ZT%xT%*7^*Tx*T%^T%zT^ZT^✓TXZTXXTXZTX^TXXJX XT^^T%*TX*7^r^/ifsensor==0x37sensor==0x17sensor==OxOfsensor=Oxlf sensor0x3f二二motor r;speedl=45;ifspeed_r30speed_r一;speed_r=31;/xlx^lzvL**Jx^L*^fxsi*si*%£zvizvlxvizsixsL*sixvlxlxvYxvl*%lzsixvlxxL*vL**Jx six%lx%lx^lxsixsi*sixsix*Jxlz%L*^lx%L**lzsi*sixvlxxlx*Jx*JxsixvlxL*si*si*six/XT*XT*XTXXjXXjXXT*✓TSXT*XjSXjXXjXXTXXT^X^X^XTX✓TX✓TXxrsXT*XTS✓TX✓Tx✓TXXTX#T*TZTX✓TSZ7X✓1XjSXTS✓jX^TX✓TX✓TXXT*✓V*XjS✓jS✓jX*TXXTX XT**TSXV^^jSXTX✓TX如果小车偏右*A**»L*xlzxlz*lzsL**A*xlxxlz*Jxxlz*lxxlx*lz vL*xlz*A**lxsix*lx*lxxL*^L*xl*vlx*Jx*Jz^L**A*A**A**X*^1*1*xl*six*£**lxxlxxlxxlzxl**A*six/ifsensor==0x67sensor==0x47sensor==0x87sensor==0xc7sensor==0xe7^TSXT%XT%XTXXTSXTSXTSXTSXTSXI^^TSXTS^TS#TSZTSXTSj✓TS✓TSZTSXTSXTSXTS✓TSXTS^TSZTS^TSXTSTSr*XTS^TSTX✓TS✓TS✓TS^|SXTSXTS✓TX✓!✓TSXT%XTSXTSXTSTX✓TSXTSZTSXTSXTS^TS^TSTSZTSXTSXT*^TSXjXXTSTSZTS/motor_l;speed=45;speed」一一;ifspeedl==30speedl=31;////////////////////////////////////////////////////////////////////////vt*vL**^*^*^*^*^vL*vL*vL*/xTxXTSzjsZTSzjxxjsxTsxTxxTs xTxzrxzTxxTxxrxxrxxrxzr*xjxxTxxrsxrxzjx✓Tszjx xrszjszjxzrxXTSxTxxTsxjxxrsxTxzjxxrxzjxxrxXTXXTSXTSXJXZTXXTX✓1XTXXTSZTS XTXXTSXTSXTXXTXZTSXTX#TX*避障功能xix vXzvlx^Txvlx vxxsXz v£zsXx xfxx£xx£xxlxxfxvlxvlx^Txxfxxjvxj%xj%xjxxjxxjxxjx✓J^xj%✓jxxjx#jxzj%/whileavoid keyfunc/^**lx*X*xlz^iz^lz^L**X**lx*lz*lz^L*^Jzlzxlz*Jz^lzslz*lz/^IXTSXTSXTXXTXXTSTST%XTSXT^^JX^T%XTSXTSXT^XTSXTX^TS^TXXTST%XT%^TSX7X✓TSxTxXT%TSXTS^TXTX^TXTXTXTS^TXXjX^TX^JXTXXTSXTSTS^TXXTXXTXTXXTSXTSjXTS^T*7XXTSXT%XT^^THXT如果没有检测到有障碍物KLZ xt^^Xzxtz7,71xtzx!JKJSX^KIZxtzKIZSAZAZX^vt^KJ%tzSAZizX^^XzvA^^£zsAzsXzvtzxlzKKZSX^£^sX^xtz/*T*r%jsr**r^*rx*TV#T%#rS#r%xT^✓TxXixXr*^r**T*Xr^✓r*ZiSxTxZ^ZgXZivZr*ZiSZr%*T**rxZT*zT^✓**1^JSTSr%ZX✓r**jS*y*✓r^/ifsensor_ldata==1sensor_rdata==1motor_go;speedl=48;speed_r=50;/*JzlzsL**A**Jx^lzsi**A**lxst**Jx*Jx*lx*Jx*lx*X**X*six*X**Jx*Jxsi*sixsi**Jxvlx*JxsL*si*xl*st*sixsix*lx*lx*£**£*sixsix*Jx*X*xL*xL*si**A*lx*lx*JxsL*/^TSxixpsTxxTx7xv\yrxxrsxTsXT*xjxr\✓!xvs^Tsxrsxrxjxjx^rxzrsrs✓rs✓rs✓Tx✓rsxrs7xxTx✓rS*rx^TSXTXXTSJX✓TX✓rs^rxxp*rsxTxTxXTS✓TxxvsvsxysTsxTsxrs✓1xixi^如果检测到右边有障碍物%Jxv1^vL*v|xv|xv*x.!.vL*7/7/..!*♦!/7“
7.!/.!■■!■7,、!♦7/7”7”!”♦!*
7..!/7/
7.%*xvlxvlxvL*vix%|xvixvl*%tx%lxx^zvL*、♦],7,■!.!”.!”.!“■!”7-7/♦!♦.!♦#TXXIXlXTSXT^TXXTSXTST%XjXXjS^TXXTS✓TST%TSXTSXTXTXTSTSXT%XT%XTS^TX^7XTXXT%T%XT%ZTXXTSXJXTXTXTXZTSZT^TS ZT%XTSTSZTXX|XZTV✓TXXTS✓r%^T%XTS^TST%XT%XTS^TS/ifsensor_ldata==1sensor_rdata==0motor_go;speed_l一;speed_r=100;ifspeed1==10speed_l=11;/^lz^lz*Jz*Jz*1^^lzxlz*Jzv£**1^%lxxlz*A**lz*lx*1^*4**Jz*Jz*Jx*lx*lz*A*£z/XTST^^TXXjX^TXX7XTSr*XT%X^XTSXTX✓TS*TST%XTSXTSXTST*TXTST%XTSXTS^TS^7VTSXT%ZTSTs^T✓TX✓TXXTXTS^TSXTS^TS✓TST^TSXIXTS^T%XT%XTXXTSXTSXTSX^XTSXTXXTX如果左边检测到有障碍物*5^*»!**i*^1**it**il**il**il*^1**1*Si**1**A**^^*^*^**ii**i*/zjxXTXxrxrxx7xxTxxixxTxxTxxTxrxTxxixxTxxjxxrsxrxxrxxrxZTXxjxXTXXT*ZJXxjxXTXXTSXTSXTXZTXZJXXTSXTXXTSXT^XTSXTSZT*XTXxjx#rsxrxx*xxTxXTXZTXxrxXTxrxxrs^jx/ifsensor_ldata0sensor_rdata1=二=二motor_go;speedr一一;speedl=100;ifspeed_r10speedr=11;二二/xl*xlzxlz*1xlxxlxxlx*Jz*lx*lzvlxxlxxlzxlz*Jzvt*sixxlxxl^xlz*A**A**A*^1*xl^*A**A**A**X*six^L**lzxlx*£**lxsi*vlxxlz^lzxL*xl*lx%lx/XjXT%TXTXTSXTXXTSTSXTSXTSXTXXT%✓!✓FSTSXTSXTS^TXXTS✓1✓FSXTSXTS^TS*TSZTS✓TSTSTSXTSTX^TX✓%✓!✓!XTSXTSX|SXTS✓TSXTSXTSXTSXTS^7XTSXT^XTSXTSXTS^TX如果都检测到有障碍物K|xtzxt*xL^s£^s£^sAz^LZXZ KJxtzxtz^XzKIZ TzTzxtzAxKJK|K!ZA^Azxtzxtz/jXZr%xTx*T^*T%^r\Zr%✓Txr^Txzp*yjxr*Zr**T**|SXjxTX✓r**rx/ifsensor ldata==0sensor rdata==0motor go;speed100;」=speed_l=10;}//////////////////////////////////////}/////////////////////////////////////motor_stop;MAIN.II ttifndefMAIN_H#define MAIN_H—extern ucharspeed_l;extern ucharspeed_r;ttendifMotor,c#includecommon.h〃#include timer.h〃sbit ini=P2^0;sbit in2=P21;//左电机sbit in3=P22;sbit in4=P2-3;〃右电机sbit ENA=P24;//只有当ENA二1时左电机才能转sbit ENB=P25;//只有ENB.//////////////////voidmotor_go〃电机前进函数ini=1;〃左电机正转in2=0;in3=1;〃右电机正转in4=0;ENA二flag」;ENB=flag_r;voidmotor_stop{ini=1;〃左电机正转in2=0;in3:1;〃右电机正转in4=0;ENA=0;ENB=0;。