预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共57页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PW碉速+循迹-智能小车程序〃T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K的上拉电阻。/晶振采用12M,产生的PWM的频率约为1Hz*/#include<reg51h>#include<mathh>#defineucharunsignedchar#defineuintunsignedintsbiten1=P3A4;/*L29的EnableA*/sbiten2=P3A5;/*L298的EnableB*/sbits1=P1A0;/*L298的Input1*/sbits2=P1A1;/*L298的Input2*/sbits3=P1A3;/*L298的Input3*/sbits4=P1A2;/*L298的Input4*/sbitR=P2A0;sbitC=P2A1;sbitL=P2A2;sbitkey=P1A4;uchart=0;伸断计数器*/ucharm仁0;/电机1速度值*/ucharm2=0;/*电机2速度值*/uchartmp1,tmp2;/*电机当前速度值*/电机控制函数index-电机号(1,2);speed电机速度(0-1)*/voidmotor(ucharindex,charspeed){if(speedv=1){if(index==1)/电机1的处理*/{m1=abs(speed);/*取速度的绝对值*/s1=1;s2=0;}if(index==2)/电机2的处理*/(m2=abs(speed);/*电机2的速度控制*/s3=1;s4=0;}voidBack(void)(s1=0;s2=1;s3=1;s4=0;}voidGO(void){s1=1;s2=0;s3=1;s4=0;}voidTL(void)(sl=l;s2=0;s3=0;s4=l;}voidTR(void){sl=0;s2=l;s3=l;s4=0;}voidSTOP(void){sl=l;s2=l;s3=l;s4=l;voiddelay(uintj)简易延时函数*/for(j;j>0;j-);}*/voiddelay(uintz){uintx,y;for(x=z;x>0;—)for(y=110;y>0;y-);}voidmain()uchari=0j=0;TMOD=0x02;/*设定TO的工作模式为2,位自动重置定时器,每过几个机器周期,计数器加一TH0=0x9B;/*装入定时器的初值,计数1次溢出*/TL0=0x9B;/*装入时间常数勺EA=1;/*开中断*/ET0=l;/定时器0允许中断引TR0=1;/*启动定时器0*/whilQ){if(key==1){/电机实际控制演示*/if(i<=1)正转加速{motor(1,i);motor(2,i);delay(50);i;++}else{GO();}}else{EA=0;while(1){if((L|C|R)==0)STOP();if(L&R)GO();if(L==0){while(C){TL();}}if(R==0)(while(C)(TR().;}}voidtimer0()interrupt1/*中T断服务程序*/(if(t==0)/*个1PWM周期完成后才会接受新数值*/(tmp1=m1;tmp2=m2;}if(t<tmp1)en1=1;elseen1=0;产生电机1的PWM信号*/if(t<tmp2)en2=1;elseen2=0;/*生电机2的PWM信号*/t++;if(t>=1)t=0;/个1PWM信号由1次中断产生*/}#include<intrinsh>#include<AT89X52.h>*****************************************个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个**************************************个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个*咬定义区***********************