找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1584|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

求教這個(gè)藍(lán)牙遙控小車?yán)锏膕tr函數(shù)有什么功能

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:435624 發(fā)表于 2019-1-19 14:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  #include<AT89x51.H>
        #define Leftgo      {P1_2=1,P1_3=0;}      //左電機(jī)前
        #define Leftback    {P1_2=0,P1_3=1;       //左電機(jī)后
        #define LeftStop    {P1_2=0,P1_3=0;}      // 左電機(jī)停            
        #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;   //藍(lán)牙
        bit  flag    =0;  
        bit  flag_bz =0;  //紅外避障
       
        unsigned char  i=0;
        unsigned char  dat=0;
        unsigned char  buff[5]=0;//接受緩沖字節(jié)



        #define   Lled   P2^6         //左紅外傳感器
        #define   Rled   P2^5         //右紅外傳感器
       
        sbit BUZZ = P2^1;    //蜂鳴器          
/************************************************************************/       
//延時(shí)函數(shù)       
   void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}

/************************************************************************/
//字符串發(fā)送函數(shù)
          void send_str( )             // 傳送字符
    {
            unsigned char i = 0;
            while(str[i] != '\0')
           {
                SBUF = str[i];
                while(!TI);                                // 等待字符串送
                TI = 0;                                        //清楚字符串送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }       
    }
       
                  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          //中斷接受三個(gè)字節(jié)
{

    if(RI)                         //是否接受中斷
    {
       RI=0;
       dat=SBUF;
       if(dat=='O'&&(i==0)) //接受數(shù)據(jù)第一幀
         {
            buff[i]=dat;
            flag=1;        //開始接受數(shù)據(jù)
         }
       else
      if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=2)
      {i=0;flag=0;flag_ly=1 ;}  //停止接收
     }
         }
}
/*********************************************************************/                 
        void main(void)
{
    P1=0X00;              //關(guān)電機(jī)
                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)            //右邊檢測(cè)到紅外信號(hào)
                                  {
                                            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')        //第一個(gè)字節(jié)為0,第二個(gè)字節(jié)為N,第三個(gè)字節(jié)為控制碼
                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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:164602 發(fā)表于 2019-1-19 20:37 | 只看該作者
就是串口發(fā)送字符串嘛。
不過,這個(gè)程序我沒有看得很懂:程序好像是控制小車的吧,那么就應(yīng)該是另一個(gè)程序發(fā)送字符串,這個(gè)程序來執(zhí)行,它為什么要發(fā)送字符串?不懂
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表