找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1291|回复: 1
打印 上一主题 下一主题
收起左侧

求教这个蓝牙遥控小车里的str函数有什么功能

[复制链接]
跳转到指定楼层
楼主
ID:435624 发表于 2019-1-19 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  #include<AT89x51.H>
        #define Leftgo      {P1_2=1,P1_3=0;}      //左电机前
        #define Leftback    {P1_2=0,P1_3=1;       //左电机后
        #define LeftStop    {P1_2=0,P1_3=0;}      // 左电机停            
        #define Rightgo     {P1_4=1,P1_5=0;}
        #define Rightback   {P1_4=0,P1_5=1;
        #define RightStop   {P1_4=0,P1_5=0;}

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

        #define uint    unsigned int   
        #define uchar   unsigned char  

        char code str[] =  "向前!\n";
        char code str1[] = "向后!\n";
        char code str2[] = "向左\n";
        char code str3[] = "向右!\n";
        char code str4[] = "停!\n";

        bit  flag_ly=0;   //蓝牙
        bit  flag    =0;  
        bit  flag_bz =0;  //红外避障
       
        unsigned char  i=0;
        unsigned char  dat=0;
        unsigned char  buff[5]=0;//接受缓冲字节



        #define   Lled   P2^6         //左红外传感器
        #define   Rled   P2^5         //右红外传感器
       
        sbit BUZZ = P2^1;    //蜂鸣器          
/************************************************************************/       
//延时函数       
   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[i] != '\0')
           {
                SBUF = str[i];
                while(!TI);                                // 等待字符串送
                TI = 0;                                        //清楚字符串送标志
                i++;                                        // 下一个字符
           }       
    }
       
                  void send_str1( )      
    {
            unsigned char i = 0;
            while(str1[i] != '\0')
           {
                SBUF = str1[i];
                while(!TI);
                TI = 0
                i++;
           }       
    }       

                          void send_str2( )
    {
            unsigned char i = 0;
            while(str2[i] != '\0')
           {
                SBUF = str2[i];
                while(!TI);       
                TI = 0;
                i++;       
           }       
    }       
                   
                          void send_str3()   
    {
            unsigned char i = 0;
            while(str3[i] != '\0')
           {
                SBUF = str3[i];
                while(!TI);       
                TI = 0
                i++;
           }       
    }       

              void send_str4()  
    {
            unsigned char i = 0;
            while(str4[i] != '\0')
           {
                SBUF = str4[i];
                while(!TI);
                TI = 0;
                i++;
           }       
    }       
                   
                   
/************************************************************************/
     void  run(void)
{

         Leftgo ;  
         Rightgo ;
}


     void  backrun(void)
{

         Leftback ;
         Rightback ;
}


     void  rightrun(void)
{


          Leftgo ;
         Rightback ;
}


     void   leftrun(void)
{

         
         Leftback ;
         Rightgo ;
}

     void  stoprun(void)
{

         LeftStop ;
         RightStop ;
}

/************************************************************************/
void sint() interrupt 4          //中断接受三个字节
{

    if(RI)                         //是否接受中断
    {
       RI=0;
       dat=SBUF;
       if(dat=='O'&&(i==0)) //接受数据第一帧
         {
            buff[i]=dat;
            flag=1;        //开始接受数据
         }
       else
      if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=2)
      {i=0;flag=0;flag_ly=1 ;}  //停止接收
     }
         }
}
/*********************************************************************/                 
        void main(void)
{
    P1=0X00;              //关电机
                BUZZ=0;
                delay(50);
                BUZZ=1;
    TMOD=0x20;  
    TH1=0xFd;                     //11.0952,9600波特率
    TL1=0xFd;
    SCON=0x50;  
    PCON=0x00;
    TR1=1;
          ES=1;   
    EA=1;   
        while(1)
        {
           if(flag_bz == 1)       //切换到避障模式
      {
         if(Lled==1&&Rled==1)

                         run();
                       
                          else
                         {                          
                                      if(Lled==1&&Rled==0)            //右边检测到红外信号
                                  {
                                            leftrun();       
                                           delay(40);

                             }
                          
                                           if(Rled==1&&Lled==0)       
                                  {          
                                     
                                         
                                           rightrun();
                                          delay(40);

                                  }
                                                                  if(Rled==0&&Lled==0)       
                                  {          
                                    backrun();
                                        delay(40);
                                        rightrun();       
                                        delay(90);
                                  }
                        }

        }
          
          if(flag_ly==1)
           {
                flag_ly=0;
                if(buff[0]=='O'&&buff[1]=='N')        //第一个字节为0,第二个字节为N,第三个字节为控制码
                switch(buff[2])
             {
                      case up :       
                          send_str( );
                          flag_bz = 1;
                          break;

                      case down:
                           send_str1( );
                           flag_bz = 0;
                          backrun();
                          break;

                      case left:
                           send_str3( );
                          leftrun();
                          flag_bz = 0;
                          break;

                      case right:
                          send_str2( );
                          rightrun();
                          flag_bz = 0;
                          break;

                      case stop:
                           send_str4( );
                          stoprun();
                          flag_bz = 0;
                          break;

             }

                                         
         }
        }
}       

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2019-1-19 20:37 | 只看该作者
就是串口发送字符串嘛。
不过,这个程序我没有看得很懂:程序好像是控制小车的吧,那么就应该是另一个程序发送字符串,这个程序来执行,它为什么要发送字符串?不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表