左转跟右转都是可以的,但是前进或后退的时候四个I/O口都输出的是1,求大神帮忙看看是哪里出问题了,下面是程序:
//头文件:
#include <reg52.h>
//IO引脚定义:
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
//以上为电机驱动板输入引脚定义,
//IN1和IN2控制左轮电机,输出对应的OU1和OUT2接左轮电机,
//IN3和IN4控制右轮电机,输出对应的OU3和OUT4接右轮电机
//宏定义
#define L_go IN1=0;IN2=1 //左轮前进
#define L_back IN1=1;IN2=0 //左轮后退
#define L_stop IN1=0;IN2=0 //左轮停止,两个输出1也可以
#define R_go IN3=0;IN4=1 //右轮前进
#define R_back IN3=1;IN4=0 //右轮后退
#define R_stop IN3=0;IN4=0 //右轮停止,两个输出1也可以
#define car_go L_go; R_go //小车前进
#define car_back L_back;R_back //小车后退
#define car_left R_go;L_stop //小车左转弯
#define car_right L_go;R_stop //小车右转弯
#define car_stop L_stop;R_stop //小车停车
//#define car_left_360 R_go;L_back //小车向左360度转,也可以认为是大转弯
//#define car_right_360 L_go;R_back //小车向右360度转,也可以认为是大转弯
//数据定义
unsigned char l_buf[3];//串口接收缓冲
unsigned char l_bufcc;//接收个数索引
//延时
void Delay(unsigned int t)
{
unsigned int c;
while(t--){
c=10000;
while(c--);
}
}
/************************************************************************/
void sint() interrupt 4 //中断接收3个字节
{
if(RI){ //是否接收中断
RI=0;
l_buf[l_bufcc]=SBUF;
l_bufcc++;
if(l_bufcc==3) l_bufcc=0;
}
}
/************************************************************************/
void main(void)
{
TMOD=0x20;
TH1=0xFd; //11.0592M晶振,9600波特率
TL1=0xFd;
SCON=0x50;
PCON=0x00;
TR1=1;
ES=1;
EA=1;
while(1){
switch(l_buf[2]){//比较按键码,进入相应处理
case 'A'://前进
car_go;
Delay(1);
break;
case 'B'://后退
car_back;
Delay(1);
break;
case 'C'://左转
car_left;
Delay(1);
break;
case 'D'://右转
car_right;
Delay(1);
break;
case 'F'://停止
car_stop;
break;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>