为毛我的程序,蓝牙控制小车木有反应,求高人指点

2019-07-16 09:27发布

/*********控制小车行驶************/
#include "reg52.h"
#define UCHAR unsigned char
#define UP  'A'
#define DOWN  'B'
#define LEFT  'C'
#define RIGHT 'D'
#define STOP  'F'
sbit RB=P1^0;     //右后轮
sbit rb=P1^1;
sbit RF=P1^2;      //右前轮
sbit rf=P1^3;
sbit LB=P1^4;     //左后轮
sbit lb=P1^5;
sbit LF=P1^6;     //左前轮
sbit lf=P1^7;
UCHAR count=0,flag=0,len=0,h=0,r[3]=0,flag_con=0;
unsigned int a;
/***************小车运动细节*************************/
/***********小车前进部分*****************/
void L_forward(UCHAR num)      // 小车左排轮前进,num可调整占空比
{
   LF=1;lf=0;
   LB=0;lb=1;
  if(count<=num)
{
LF=1;
lb=1;
}
else
{
LF=0;
lb=0;
}

}
void R_forward(UCHAR num)      //小车右排轮前进,num可调整占空比
{
    RB=1;rb=0;
   RF=0;rf=1;
  if(count<=num)
{
RB=1;
rf=1;
}
else
{
RB=0;
rf=0;
}

}
/***************小车后退部分********************/
void L_drawback(UCHAR num)  //小车左排轮后退,num可调整占空比
{
   LF=0;lf=1;
   LB=1;lb=0;
if(count<=num)
   {
   lf=1;
   LB=1;
   }  
else
      {
   lf=0;
   LB=0;
   }
}
void R_drawback(UCHAR num)  //小车右排轮后退,num可调整占空比
{
   RB=0;rb=1;
   RF=1;rf=0;
if(count<=num)
   {
   rb=1;
   RF=1;
   }  
else
      {
   rb=0;
   RF=0;  
   }
}
/*********小车的基本运动状态*************/
void stop()       //小车停止
{
      RB=0;rb=0;
   RF=0;rf=0;
   LF=0;lf=0;
   LB=0;lb=0;
}
void forward(UCHAR num)  //小车前进,num可调整占空比
{
L_forward(num);
R_forward(num);
}
void drawback(UCHAR num)  //小车后退,num可调整占空比
{
L_drawback(num);
R_drawback(num);
}
void B_round(UCHAR L,UCHAR R)    //小车后退转弯
{           //L控制左排轮速度
L_drawback(L);        //R控制右排轮速度
R_drawback(R);
}
void F_round(UCHAR L,UCHAR R)    //小车前进转弯
{           //L控制左排轮速度
L_forward(L);        //R控制右排轮速度
R_forward(R);
}
void turn_right45()   //前进右转45度
{
for(a=500;a>0;a--)
{
  R_drawback(20);
     L_forward(40);
   
}
}
void turn_right90()     //前进右转90度
{
for(a=500;a>0;a--)
  {
  R_drawback(50);
     L_forward(50);
   
  }
}
void turn_left45()      //前进左转45度
{
for(a=500;a>0;a--)
  {
  R_forward(40);
     L_drawback(20);
   
  }
}
void turn_left90()      //前进左转90度
{
for(a=650;a>0;a--)
  {
  R_forward(50);
     L_drawback(50);
   
  }
}
void delay(UCHAR ms)   
{
UCHAR i,j;
for(i=ms;i>0;i--)
  for(j=110;j>0;j--);
}
void main()
{
TMOD=0x21;
TH0=(65536-9)/256;
TL0=(65536-9)%256;
TH1=0xfd;     
TL1=0xfd;        //装初值
ET0=1;
TR0=1;
TR1=1;      //定时器中断1打开
REN=1;      //允许串行口接受数据
SM0=0;      
SM1=1;      //串行口工作方式位01,10位异步收发,波特率可变
EA=1;            //打开总中断  
ES=1;      //打开串口中断
stop();
while(1)
  {
  
  if(flag_con==1)
  {
   flag_con=0;
   if(r[0]=='O'&&r[1]=='N')
   {
    ES=0;
    SBUF=r[2];
       while(!ti);
    TI=0;
    ES=1;
    switch(r[2])
    {
     case UP: forward(80);break;
     case DOWN: drawback(80);break;
     case LEFT: turn_left45();break;
     case RIGHT: turn_right45();break;
     case STOP:  stop();break;
     default:break;
    }
   
   }
   
  }  

}
}
void timer()interrupt 1
{
TH0=(65536-9)/256;
TL0=(65536-9)%256;
count++;
if(count>=100)
  {count=0;}
}
void inser() interrupt 4
{
if(RI)
{
RI=0;
h=SBUF;
if(h='O'&&(len=0))
{
   flag=1;
   r[len]=h;
   flag=1;
}
else if(flag==1)
{
  len++;
  r[len]=h;
  if(len>2)
  {
  len=0;flag=0;flag_con=1;
  }
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
笔画张
1楼-- · 2019-07-16 14:32
 精彩回答 2  元偷偷看……
naturlly
2楼-- · 2019-07-16 19:02
笔画张 发表于 2014-4-28 16:29
童鞋  提问请参考http://bbs.elecfans.com/jishu_426327_1_1.html这个 你这个代码又多 也不用文字描述。。 ...


好吧~受教了,多谢了~问题也已经解决了
z00
3楼-- · 2019-07-16 20:31
naturlly 发表于 2014-4-28 21:55
好吧~受教了,多谢了~问题也已经解决了

最好能把解决方法也说一下 
z00
4楼-- · 2019-07-17 01:11
可以先判断是否接收到数据 然后判断接收的数据是否满足协议要求
依然落叶飘零
5楼-- · 2019-07-17 03:44
首先得确定单片机能不能正常接收数据。然后再看看电机驱动程序有没问题,一步步找出问题所在。

评分

参与人数 1积分 +10 收起 理由 zhou2sheng + 10 感谢您的参与,您的支持是我们最大的动力..

查看全部评分

一周热门 更多>