51小车行驶并用pwm降低速度的程序
时间: 2023-08-18 07:05:23 浏览: 79
以下是51单片机控制小车行驶并使用PWM降低速度的示例程序:
```C
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1 = P1^0; //定义IN1为P1.0引脚
sbit IN2 = P1^1; //定义IN2为P1.1引脚
sbit IN3 = P1^2; //定义IN3为P1.2引脚
sbit IN4 = P1^3; //定义IN4为P1.3引脚
void delay(uint x) //延时函数
{
uint i, j;
for (i = x; i > 0; i--)
for (j = 112; j > 0; j--);
}
void PWM(uint duty) //PWM函数,duty为占空比
{
TMOD &= 0xF0; //定时器0工作在模式1
TMOD |= 0x01;
TH0 = 0xFC; //定时器初值
TL0 = 0x67;
ET0 = 1; //使能定时器0中断
TR0 = 1; //启动定时器0
while (1)
{
P1 = 0xFF; //P1置高
delay(duty); //延时一段时间
P1 = 0x00; //P1置低
delay(1000 - duty); //延时另一段时间
}
}
void main()
{
IN1 = 0;
IN2 = 1; //电机1正转
IN3 = 0;
IN4 = 1; //电机2正转
PWM(500); //占空比为50%
}
void timer0() interrupt 1 //定时器0中断服务程序
{
TH0 = 0xFC; //重新给定时器初值
TL0 = 0x67;
}
```
在这个示例程序中,我们使用P1口控制小车的电机,其中IN1和IN2控制电机1的正转和反转,IN3和IN4控制电机2的正转和反转。我们使用了一个PWM函数,通过改变占空比来控制小车的速度。在main函数中,我们设置了电机1和电机2都正转,并且占空比为50%。在timer0中断服务程序中,我们重新设置了定时器的初值,以达到控制PWM频率的目的。
阅读全文