单片机源程序如下:
#include "reg52.h"
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;
sbit IN4=P1^4;
unsigned char pwm_val_right=0;
unsigned char push_val_right=0;
unsigned int time=0;
unsigned char pwm_val_left=0;
unsigned char push_val_left=0;
bit right_moto_stop=1;
sbit right_moto_pwm=P2^0;
bit left_moto_stop=1;
sbit left_moto_pwm=P2^1;
void delay(unsigned int i)
{
unsigned int k;
for(k=0;k<7000;k++)
for(i=0;k
}
void pwm_out_right_moto(void)
{
if(right_moto_stop)
{
if(pwm_val_right<=push_val_right)
right_moto_pwm=1;
else
right_moto_pwm=0;
if(pwm_val_right>=100)
pwm_val_right=0;
}
else right_moto_pwm=0;
}
void pwm_out_left_moto(void)
{
if(left_moto_stop)
{
if(pwm_val_left<=push_val_left)
left_moto_pwm=1;
else
left_moto_pwm=0;
if(pwm_val_left>=100)
pwm_val_left=0;
}
else right_moto_pwm=0;
}
void time0_init()
{
TMOD=0X01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
ET0=1;
EA=1;
}
void forward(unsigned char i)
{
push_val_right=i;
push_val_left=i;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void forward1(unsigned char l)
{
push_val_right=l;
push_val_left=l;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void time0()interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
TR0=1;
time++;
pwm_val_right++;
pwm_out_right_moto();
pwm_val_left++;
pwm_out_left_moto();
}
void main()
{
unsigned char i,k;
time0_init();
while(1)
{
for(i=10;i<100;i++)
{
forward(i);
delay(10000);
}
for(k=100;k<=100;k--)
{
forward(k);
delay(10000);
}
for(i=10;i<100;i++)
{
forward1(i);
delay(10000);
}
for(k=100;k<=100;k--)
{
forward1(k);
delay(10000);
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』