概述
这个代码我拿到的时候是改过的,原来是控制四轮小车的代码,后面改成控制三轮的了。
代码:
#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++;
}
最后
以上就是犹豫银耳汤为你收集整理的小车转向及速度控制的全部内容,希望文章能够帮你解决小车转向及速度控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复