蓝牙小车程序求纠正

2019-07-15 23:38发布

#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int

uchar Buffer[4]={0};//从串口接收的数据
sbit Left_Positive=P1^0;
sbit Left_Negative=P1^1;
sbit Right_Positive=P1^2;
sbit Right_Negative=P1^3;
/***************************************************
*名称:Com_int()
*功能:串口中断子函数
*输入:无
*输出:无
***************************************************/
void Com_int(void) interrupt 4
{
RI = 0;            //令接收中断标志位为0(软件清零)
Buffer[0]= SBUF-48;   //将接收到的数据送入变量 UART_data
while(TI == 0);    //检查发送中断标志位
TI = 0;
}
/***************************************************
*名称:Com_Init()
*功能:串口初始化,晶振11.0592,波特率是9600,使串口中断
*输入:无
*输出:无
***************************************************/
void Com_Init(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xfd;   //设置波特率为9600
TL1=0xfd;
TR1=1;       //启动定时器1
ES=1;        //开串口中断
EA=1;        //开总中断
}
/***************************************************
*名称:Moto_Forward()
*功能:电机1,2启动,都是前进,整车表现为前进
*输入:无
*输出:无
***************************************************/
void Moto_Forward()
{
Right_Negative=0;
Left_Positive=1;
Left_Negative=0;
Right_Positive=1;
}
/**************************************************
*名称:Moto_Backward()
*功能:电机1,2启动,都是后退,整车表现为后退
*输入:无
*输出:无
**************************************************/
void Moto_Backward()
{
Left_Positive=0;
Right_Positive=0;
Right_Negative=1;
Left_Negative=1;
}
/*************************************************
*名称:Moto_TurnLeft()
*功能:电机1后退,电机2前进,整车表现为左转
*输入:无
*输出:无
*************************************************/
void Moto_TurnLeft()
{
Left_Negative=1;
Right_Positive=1;
Right_Negative=0;
Left_Positive=0;
}
/*************************************************
*名称:Moto_TurnRight()
*功能:电机1前进,电机2后退,整车表现为右转
*输入:无
*输出:无
*************************************************/
void Moto_TurnRight()
{
Right_Negative=1;
Left_Negative=0;
Left_Positive=1;
Right_Positive=0;
}
/*************************************************
*名称:Moto_Stop()
*功能:电机1停止,电机2停止,整车表现为停止
*输入:无
*输出:无
*************************************************/
void Moto_Stop()
{
Right_Negative=0;
Left_Negative=0;
Left_Positive=0;
Right_Positive=0;
}
void main()
{
Com_Init();  //串口初始化//P1=0;
while(1)
{
  switch(Buffer[0])
  {
   case 0:Moto_Stop();break;
   case 1:Moto_Forward();break;
   case 2:Moto_Backward();break;
   case 3:Moto_TurnLeft();break;
   case 4:Moto_TurnRight();break;
   default:break;
  }
}   
}

以上是程序,上电后,蓝牙传送1 2 3 4,都只有左电机会动,右点机不动,请问指导
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
2329274825
1楼-- · 2019-07-16 00:15
{:1:}{:1:}{:1:}{:1:}{:1:}{:1:}{:1:}
xtaso_135
2楼-- · 2019-07-16 06:07
{:9:}{:9:}
默之墨桥
3楼-- · 2019-07-16 08:32
是不是应该把switch语句放到通讯中断里啊
dongyumin
4楼-- · 2019-07-16 13:28
那肯定是你MCU控制右电机这部分电路的问题。和程序无关。
寂寞的喇嘛
5楼-- · 2019-07-16 14:57
 精彩回答 2  元偷偷看……
11hwu2
6楼-- · 2019-07-16 19:10
串口中断里面的语句会不会有问题?  每次发送和接收数据都进中断,然后Buffer[0]里的数据都会减去48.  不过实在想不通有发送什么数据吗?

一周热门 更多>