📄 l298控制两电机onlypokou.txt
字号:
#include <c8051f310.h>
#include <stdio.h>
#include <math.h> #include <Intrins.h>
#include <absacc.h>
sbit sd0 = P0^0; //PWM,定左轮速度
sbit sd1 = P0^1; //
sbit fx0=P0^2; //电机方向 左
sbit fx1=P0^3;//右
unsigned j,k,m;
void sysclk(void) //内部晶振
{
OSCICL=0x2D; //20MHZ
OSCICN=0xc2;// 10MHZ
CLKSEL=0x00;
}
void pio(void)
{
P0MDIN=0xff;
P0MDOUT=0x03; //1为推挽(开关能力强)必须推挽,开漏没输出0000 0011
P0SKIP = 0x0fc; //P0口跳转方式 1111 1100 P0.0 P0.1做PWM (pwm为内部资源用到了不能跳过)
XBR0=0x00;
XBR1=0xc2;//选择CEX0,CEX1分别为pwm0,pwm1的输出口
}
void pwm(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允许PCA工作
PCA0MD=0x02; //PCA时钟为4分频
PCA0CPM0=0x42; //设置0轮为8位PWM输出
PCA0CPL0=0;
PCA0CPH0=156;
PCA0CPM1=0x42; //设置1轮为8位PWM输出
PCA0CPL1=0;
PCA0CPH1=156;
}
void delay(m)
{
unsigned i;
for(i=0;i<200;i++)
{
for(j=0;j<m;j++);
{_nop_(); _nop_();}
}
}
main( )
{
PCA0MD &=~0x40;// 关闭
sysclk();
pio();
pwm() ;
fx0=1;//电机转动方向
sd0=1;
fx1=1;//电机转动方向
sd1=1;
while(1)
{
fx0=1;
fx1=1;
PCA0CPH0=210;
PCA0CPH1=210;
delay(500);//两电机慢速向前
fx0=1;
fx1=1;
PCA0CPH0=126;
PCA0CPH1=126;
delay(500);//两电机中速向前
fx0=1;
fx1=1;
PCA0CPH0=0;
PCA0CPH1=0;
delay(500);//两电机快速向前
fx0=1;
fx1=1;
PCA0CPH0=255;
PCA0CPH1=100;
delay(500);//转弯
fx0=1;
fx1=1;
PCA0CPH0=10;
PCA0CPH1=10;//快速前进
delay(500);
fx0=1;
fx1=1;
PCA0CPH0=100;
PCA0CPH1=255;
delay(500); //转弯
fx0=1;
fx1=1;
PCA0CPH0=156;
PCA0CPH1=156;
delay(500); //中速前进
fx0=1;
fx1=1;
PCA0CPH0=255;
PCA0CPH1=255;
delay(500);//停止
fx0=0;
fx1=0;
PCA0CPH0=156;
PCA0CPH1=156;
delay(500); //反向前进
fx0=0;
fx1=0;
PCA0CPH0=255;
PCA0CPH1=255;
delay(500);//停止
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -