下面的蓝牙遥控小车程序看不懂 ,求指教啊

2019-07-15 18:29发布

#include<AT89x51.H>

        //HL-1小车驱动接线定义
    #define Left_moto_go      {P1_2=0,P1_3=1;}    //左边电机向前走
        #define Left_moto_back    {P1_2=1,P1_3=0;}    //左边电机向后转
        #define Left_moto_Stop    {P1_2=0,P1_3=0;}    //左边电机停转                     
        #define Right_moto_go     {P1_6=1,P1_7=0;}        //右边电机向前走
        #define Right_moto_back   {P1_6=0,P1_7=1;}        //右边电机向后走
        #define Right_moto_Stop   {P1_6=0,P1_7=0;}        //右边电机停转   

        #define left     'C'
    #define right    'D'
        #define up       'A'
    #define down     'B'
        #define stop     'F'

        char code str[] =  "收到指令,向前! ";
        char code str1[] = "收到指令,向后! ";
        char code str2[] = "收到指令,向左! ";
        char code str3[] = "收到指令,向右! ";
        char code str4[] = "收到指令,停止! ";

        bit  flag_REC=0;
        bit  flag    =0;  
       

        unsigned char  i=0;
        unsigned char  dat=0;
    unsigned char  buff[5]=0; //接收缓冲字节



/************************************************************************/       
//延时函数       
   void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}

/************************************************************************/
//字符串发送函数                                                                                                        怎么下面发送几个一样的函数,有什么用
          void send_str( )
                   // 传送字串
    {
            unsigned char i = 0;
            while(str != '')
           {
                SBUF = str;
                while(!ti);                                // 等特数据传送
                TI = 0;                                        // 清除数据传送标志
                i++;                                        // 下一个字符
           }       
    }
       
                  void send_str1( )
                   // 传送字串
    {
            unsigned char i = 0;
            while(str1 != '')
           {
                SBUF = str1;
                while(!TI);                                // 等特数据传送
                TI = 0;                                        // 清除数据传送标志
                i++;                                        // 下一个字符
           }       
    }       

                          void send_str2( )
                   // 传送字串
    {
            unsigned char i = 0;
            while(str2 != '')
           {
                SBUF = str2;
                while(!TI);                                // 等特数据传送
                TI = 0;                                        // 清除数据传送标志
                i++;                                        // 下一个字符
           }       
    }       
                   
                          void send_str3()
                   // 传送字串
    {
            unsigned char i = 0;
            while(str3 != '')
           {
                SBUF = str3;
                while(!TI);                                // 等特数据传送
                TI = 0;                                        // 清除数据传送标志
                i++;                                        // 下一个字符
           }       
    }       

              void send_str4()
                   // 传送字串
    {
            unsigned char i = 0;
            while(str4 != '')
           {
                SBUF = str4;
                while(!TI);                                // 等特数据传送
                TI = 0;                                        // 清除数据传送标志
                i++;                                        // 下一个字符
           }       
    }       
                   
                   
/************************************************************************/
//前速前进
     void  run(void)
{

         Left_moto_go ;   //左电机往前走
         Right_moto_go ;  //右电机往前走
}

//前速后退
     void  backrun(void)
{

         Left_moto_back ;   //左电机往前走
         Right_moto_back ;  //右电机往前走
}

//左转
     void  leftrun(void)
{

         Left_moto_back ;   //左电机往前走
         Right_moto_go ;  //右电机往前走
}

//右转
     void  rightrun(void)
{

         Left_moto_go ;   //左电机往前走
         Right_moto_back ;  //右电机往前走
}
//STOP
     void  stoprun(void)
{

         Left_moto_Stop ;   //左电机往前走
         Right_moto_Stop ;  //右电机往前走
}
/************************************************************************/
void sint() interrupt 4          //中断接收3个字节
{

    if(RI)                         //是否接收中断
    {
       RI=0;
       dat=SBUF;
       if(dat=='O'&&(i==0)) //接收数据第一帧
         {
            buff=dat;
            flag=1;        //开始接收数据
         }
       else
      if(flag==1)
     {
      i++;
      buff=dat;
      if(i>=2)
      {i=0;flag=0;flag_REC=1 ;}  // 停止接收
     }
         }
}
/*********************************************************************/                 
/*--主函数--*/
        void main(void)
{
        TMOD=0x20;  
    TH1=0xFd;                     //11.0592M晶振,9600波特率 2400
    TL1=0xFd;
    SCON=0x50;  
    PCON=0x00;
    TR1=1;
        ES=1;   
    EA=1;   
         
        while(1)                                                        /*无限循环*/
        {
          if(flag_REC==1)                                    //
           {
                flag_REC=0;
                if(buff[0]=='O'&&buff[1]=='N')        //第一个字节为O,第二个字节为N,第三个字节为控制码            这里完全看不懂
                switch(buff[2])
             {
                      case up :                                                    // 前进
                          send_str( );
                          run();
                          break;
                      case down:                                                // 后退
                           send_str1( );
                          backrun();
                          break;
                      case left:                                                // 左转
                           send_str3( );
                          leftrun();
                          break;
                      case right:                                                // 右转
                          send_str2( );
                          rightrun();
                          break;
                      case stop:                                                // 停止
                           send_str4( );
                          stoprun();
                          break;

             }

                                         
         }
        }
}       
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
yefengling
1楼-- · 2019-07-15 18:29
前面的发送函数虽然一样,但是用来发送不同的字符串(str-str4),后面if函数接收到的O,N应该表示启动(ON),后面根据判断buff[2]执行不同的操作。
sbiqpl168
2楼-- · 2019-07-15 20:21
 精彩回答 2  元偷偷看……

一周热门 更多>