标签:
这个代码我拿到的时候是改过的,原来是控制四轮小车的代码,后面改成控制三轮的了。
代码:
#include <reg52.h>//在这里01是向前走,10是想后走
sbit H1=P0^1;
sbit H2=P0^2;
sbit H3=P0^3;
sbit H4=P0^4;
//--定义使用的IO口--//
sbit PWM1=P3^1;
sbit PWM2=P3^2;
sbit PWM3=P3^3;
sbit PWM4=P3^4;
sbit ena=P3^5;
sbit enb=P3^6;
//--定义一个全局变量--//
unsigned char timer1;
void Time1Config();
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void speed1(unsigned int d)//直走,通过改变d的值改变速度
{
Time1Config();
while(1)
{
if(timer1>100) //PWM周期为100*0.5ms
{
timer1=0; break;
}
if(timer1 < d) //改变d这个值可以改变直流电机的速度
{
PWM1=0;
PWM2=1;
PWM3=0;
PWM4=1;
ena=1;
enb=1;
}
else
{
PWM1=0;
PWM2=0;
PWM3=0;
PWM4=0;
ena=0;
enb=0;
}
}
}
void speed2(unsigned int d)//向左转
{
Time1Config();
while(1)
{
if(timer1>100)
{
timer1=0; break;
}
if(timer1 < d)
{
PWM1=1;
PWM2=0;
PWM3=0;
PWM4=1;
ena=1;
enb=1;
}
else
{
PWM1=0;
PWM2=0;
PWM3=0;
PWM4=0;
ena=0;
enb=0;
}
}
}
void speed3(unsigned int d)//向右转
{
Time1Config();
while(1)
{
if(timer1>100) //PWM周期为100*0.5ms
{
timer1=0; break;
}
if(timer1 < d) //改变30这个值可以改变直流电机的速度
{
PWM1=0;
PWM2=1;
PWM3=1;
PWM4=0;
ena=1;
enb=1;
}
else
{
PWM1=0;
PWM2=0;
PWM3=0;
PWM4=0;
ena=0;
enb=0;
}
}
}
void speed4(unsigned int d)
{
Time1Config();
while(1)
{
if(timer1>100) //PWM周期为100*0.5ms
{
timer1=0; break;
}
if(timer1 < d) //改变d这个值可以改变直流电机的速度
{
PWM1=0;
PWM2=0;
PWM3=0;
PWM4=0;
ena=0;
enb=0;
}
else
{
PWM1=0;
PWM2=0;
PWM3=0;
PWM4=0;
ena=0;
enb=0;
}
}
}
void main()
{ while(1)
{
if(H3==1&&H2==1&&H1==0||H3==1&&H2==0&&H1==0)
{
speed2(10) ;}//偏右了,应该向左转
if(H3==0&&H2==1&&H1==0||H3==1&&H2==1&&H1==1||H3==1&&H2==0&&H1==1||H3==0&&H2==0&&H1==0)
{ speed1(15) ;}//直走
if(H3==0&&H2==0&&H1==1||H3==0&&H2==1&&H1==1)
{ speed3(10) ;}向右转
}
}
/*******************************************************************************
* 函 数 名 : Time1Config
* 函数功能 : 设置定时器
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1Config()//记时器
{
TMOD|= 0x10; //设置定时计数器工作方式1为定时器
//--定时器赋初始值,12MHZ下定时0.5ms--//
TH1 = 0xFE;
TL1 = 0x0C;
ET1 = 1; //开启定时器1中断
EA = 1;
TR1 = 1; //开启定时器
}
/*******************************************************************************
* 函 数 名 : Time1
* 函数功能 : 定时器1的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 = 0xFE; //重新赋初值
TL1 = 0x0C;
timer1++;
}
标签:
原文地址:http://blog.csdn.net/xiaolonggezte/article/details/51371408