首页资源分类嵌入式处理器51内核 > l298n驱动程序

l298n驱动程序

已有 445008个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签:12

分    享:

文档简介

L298n驱动程序单片机pwm波

文档预览

(1) #include #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;x>0;x--) for(y=125;y>0;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 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 保持原来状态 PWM = 0;//灯亮 } } (3) /***************电子电机驱动模块直流电机控制程序**************************/ #include sbit IN1=P1^0; sbit IN2=P1^1; sbit IN3=P1^2; sbit IN4=P1^3; sbit EN1=P1^4; sbit EN2=P1^5; unsigned int pwm_H; unsigned int pwm_L; /***********初始函数函数**********************************/ /*日期:2012年2月2日 */ /*版本号 V1.2*/ /*说明:初始化系统,调用速度设置函数前请先初始化*/ void InitSpeed() { TMOD=0X01; TL0=0; TH0=0; TR0=1; ET0=1; EA=1; } /***********速度设置函数**********************************/ /*日期:2012年2月2日 */ /*版本号 V1.2*/ /*说明:0-1000级速度,值越高速度越快*/ void SetSpeed(unsigned int num) { if(num<1000) { pwm_L=65535-num; pwm_H=65536-(1001-num); } else return ; } /***********速度设置函数**********************************/ /*日期:2012年2月2日 */ /*版本号 V1.2*/ /*说明:左转设置函数*/ void TurnLeft() { IN1=0; IN2=1; IN3=0; IN4=1; } /***********速度设置函数**********************************/ /*日期:2012年2月2日 */ /*版本号 V1.2*/ /*说明:右转设置函数*/ void TurnRight() { IN1=1; IN2=0; IN3=1; IN4=0; } /************电机使能*********************************/ /*日期:2012年2月2日 */ /*版本号 V1.2*/ /*说明:右转设置函数*/ void MotorGo() { EN1=0; EN2=0; } void main() { InitSpeed(); TurnRight(); MotorGo(); SetSpeed(999); while(1); } /*******定时器0中断服务程序*************/ void Timer0() interrupt 1 using 1 { static char stepFlag; TR0=0; if(stepFlag==1) { TL0=pwm_H; TH0=pwm_H>>8; EN1=0; //电机1不使能 EN2=0; //电机2不使能 stepFlag=0; } else { TL0=pwm_L; TH0=pwm_L>>8; EN1=1; //电机1使能 EN2=1; //电机2使能 stepFlag=1; } TR0=1; }

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。