l298n电机驱动直流电机各种程序.docVIP

  • 159
  • 0
  • 约3.51千字
  • 约 6页
  • 2020-12-17 发布于浙江
  • 举报
(1) #includereg51.h #define uchar unsigned char #define uint unsigned int sbit INPUT1 = P1^0; //控制口 sbit INPUT2 = P1^1; sbit INPUT3 = P1^2; sbit INPUT4 = P1^3; sbit ENA = P1^4; //产生PWM波 sbit ENB = P1^5; uint MA=0,MB=0; uint SpeedA=20;//50%占空比 uint SpeedB=20; void delay(uint z) { uint x,y; for(x=z;x0;x--) for(y=125;y0;y--); } void main(void) { delay(1000) ; delay(1000) ; INPUT1=1; INPUT2=0; INPUT3=1; INPUT4=0; TH0 = 0xF4; TL0 = 0x48; TH1 = 0xF4; TL1 = 0x48; TMOD = 0x11; TR0 = 1; TR1 = 1; ET0 = 1; ET1 = 1; EA = 1; while(1){} } void time0_int() interrupt 1 using 1 { TR0=0; TH0=0xF4; TL0=0x48; MA++; if(MA SpeedA){ ENA = 1; } else ENA = 0; if(MA == 40){ MA = 0; } TR0 = 1; } void time1_int() interrupt 3 using 1 { TR1=0; TH1=0xF4; TL1=0x48; MB=MB + 1; if(MB SpeedB){ ENB=1; } else ENB = 0; if(MB == 40){ MB = 0; } TR1 = 1; } (2) #include reg52.h sbit KEY1 = P3^1; sbit PWM = P1^5; unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;//定义高电平时间 void delay(unsigned int cnt) { while(--cnt); } main() { unsigned char PWM_Num;//定义档位 TMOD |=0x01;//定时器设置 1ms in 12M crystal TH0=(65536-1000)/256; TL0=(65536-1000)%256;//定时1mS IE= 0x82; //打开中断 TR0=1; CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步 while(1) { if(!KEY1) { delay(10000); if(!KEY1) { PWM_Num++; if(PWM_Num==4)PWM_Num=0; switch(PWM_Num){ case 0:P1=0xFE;PWM_ON=0;break;//高电平时长 case 1:P1=0xFD;PWM_ON=4;break; case 2:P1=0xFB;PWM_ON=6;break; case 3:P1=0xF7;PWM_ON=8;break; default:break; } } } } } /********************************/ /* 定时中断 */ /********************************/ void tim(void) interrupt 1 using 1 { static unsigned char count; // TH0=(65536-1000)/256; TL0=(65536-1000)%256;//定时1mS if (count==PWM_ON) { PWM = 1; //灯灭 } count++; if(count == CYCLE) { count=0; if(PWM_ON!=0) //如果左右时间是0 保持原来

文档评论(0)

1亿VIP精品文档

相关文档