找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求教大神,现在是蓝牙遥控小车,想在程序里加红外蔽障怎么写

[复制链接]
跳转到指定楼层
楼主
ID:125799 发表于 2016-6-8 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在是单纯的蓝牙遥控小车,想在小车前面加两个红外对管蔽障,程序怎么写
这是程序
#include<AT89x51.H>

    #define Left_1_led        P3_4         //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
        #define Left_2_led        P3_5         //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2       

    #define Right_1_led       P3_6         //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
        #define Right_2_led       P3_7         //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4

        #define Left_moto_go      {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}    //左边两个电机向前走
        #define Left_moto_back    {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}         //左边两个电机向后转
        #define Left_moto_Stop    {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}    //左边两个电机停转                     
        #define Right_moto_go     {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}        //右边两个电机向前走
        #define Right_moto_back   {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}        //右边两个电机向前走
        #define Right_moto_Stop   {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}        //右边两个电机停转   

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

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

        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[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)
{

         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[i]=dat;
            flag=1;        //开始接收数据
         }
       else
      if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=2)
      {i=0;flag=0;flag_REC=1 ;}  // 停止接收
     }
         }
}
/*********************************************************************/                 
/*--主函数--*/
        void main(void)
{
        TMOD=0x20;  
    TH1=0xFd;                     //11.0592M晶振,9600波特率
    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_str2( );
                          leftrun();
                          break;
                      case right:                                                // 右转
                          send_str3( );
                          rightrun();
                          break;
                      case stop:                                                // 停止
                           send_str4( );
                          stoprun();
                          break;

             }

                                         
         }
        }
}                                  
       

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

使用道具 举报

沙发
ID:125799 发表于 2016-6-8 11:08 | 只看该作者
顶一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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