EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1000|回复: 0

[资料共享] 蓝牙模块手机端apk程序 单片机程序及USB驱动程序

[复制链接]

152

主题

2

回帖

549

E币

助理工程师

Rank: 3Rank: 3

积分
306
发表于 2017-4-17 15:19:28 | 显示全部楼层 |阅读模式
捕获.PNG
包含手机端apk程序还有单片机程序usb驱动等等很全的资料

所有资料下载:
蓝牙模块资料.zip (6.59 MB, 下载次数: 0)

蓝牙模块的at指令
AT指令集
1 、测试通讯
发送:AT(返回OK,一秒左右发一次)
返回:OK
2 、改蓝牙串口通讯波特率
发送:AT+BAUD1
返回:OK1200
发送:AT+BAUD2
返回:OK2400
……
1---------1200
2---------2400
3---------4800
4---------9600
5---------19200
6---------38400
7---------57600
8---------115200
9---------230400
A---------460800
B---------921600
C---------1382400
不建议用在超过115200的波特率,信号的干扰会使系统不稳定。
设置超过115200后用电脑无法使用,要用单片机编程于高于 115200 才能使用此波特率和
重新发AT命令设低波特率
用AT命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率。
3 、改蓝牙名称
发送:AT+NAMEname
返回:OKsetname
参数name:所要设置的当前名称,即蓝牙被搜索到的名称。20个字符以内。  
例:发送AT+NAMEbill_gates
     返回OKsetname

这时蓝牙名称改为bill_gates
     参数可以掉电保存,只需修改一次。 PDA 端刷新服务可以看到更改后的蓝牙名称。
4 、改蓝牙配对密码
发送:AT+PINxxxx
返回:OKsetpin
参数xxxx :所要设置的配对密码,4 个字节,此命令可用于从机或主机。从机是适配器或手
机弹出要求输入配对密码窗口时,手工输入此参数就可以连接从机。主蓝牙模块搜索从机后,
如果密码正确,则会自动配对,主模块除了可以连接配对从模块外,其他产品包含从模块的
时候也可以连接配对,比如含蓝牙的数码相机,蓝牙GPS ,蓝牙串口打印机,等等,特别地,
蓝牙GPS 为典型例子
例:发送AT+PIN8888
     返回OKsetpin
     这时蓝牙配对密码改为8888,模块在出厂时的默认配对密码是 1234。
     参数可以掉电保存,只需修改一次。  

5 、获取版权命令: AT+VERSION     
返回Linvor 则为正品



附录
1 程序

#include <reg52.h>

#include<math.h>

#include<intrins.h>

#define    ucharunsigned char

#define uint unsigned int

sbit K1=P2^0;

sbit K2=P2^1;

sbit K3=P2^2;


uchar j,pro;

uchar i;

uchar zhuangtai1 ,zhuangtai2,zhuangtai3;

sbit key1=P2^3;

sbit key2=P2^4;


sbit servor0=P0^0;  //舵机控制左右

sbit red0=P0^4;        // 右边红外接收

sbit red1=P0^2;             //左边红外接收

sbit red2=P0^3;             // 右边红外接收2

sbit red3=P0^5;             // 左边红外接收2

sbit water=P0^7;  //水泵



       //定义智能小车驱动模块输入IO

sbit IN1 =       P1^0;// 高电平1 后退(反转)

sbit IN2 = P1^1; // 高电平1 前进(正转)


sbit IN3 =       P1^2;// 高电平1 前进(正转)

sbit IN4 = P1^3; // 高电平1 后退(反转)


sbit IN5 =       P1^4;// 高电平1 后退(反转)

sbit IN6 = P1^5; // 高电平1 前进(正转)


sbit IN7 =       P1^6;// 高电平1 前进(正转)

sbit IN8 = P1^7; // 高电平1 后退(反转)


  //wifi数据定义

uchar Buffer =0;      //从串口接收的数据

uint URTAReceivedCount=0,n=1;

uchar dataTempdatatable[5],CommandDatatable[5];//数据包

uchar serVal[2];

uintpwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90,(实际是1382.4,取整得1382

uchar pwm_flag=0;

uint code ms0_5Con=461; //0.5ms计数 (实际是460.8,取整得461

uint code ms2_5Con=2304; //2.5ms计数

bit key_stime_ok;


//延时1ms

void delay_ms(uint i)//1ms延时

{

uchar x,j;

for(j=0;j<i;j++)

for(x=0;x<=148;x++);

}



/********************************************************************

* 功能 :前进

***********************************************************************/


void comeon()

{  

    IN1=0;         //左电机

        IN2=1;

        IN3=1;         //右电机

        IN4=0;

        IN5=0;         //左电机

        IN6=1;

        IN7=1;         //右电机

        IN8=0;

        delay_ms(10);

  

}


/********************************************************************

* 功能 : 左转

***********************************************************************/


void comeleft()

{

   IN1=0;           //左电机

        IN2=1;

        IN3=0;         //右电机

        IN4=1;

        IN5=0;         //左电机

        IN6=1;

        IN7=0;         //右电机

        IN8=1;

        delay_ms(10);

   

}


/********************************************************************

* 功能 : 右转。

***********************************************************************/

void comeright()

{

    IN1=1;         //左电机

        IN2=0;

        IN3=1;         //右电机

        IN4=0;

        IN5=1;         //左电机

        IN6=0;

        IN7=1;         //右电机

        IN8=0;

        delay_ms(10);

}

/********************************************************************

* 功能 : 停止

***********************************************************************/

void stop()

{

        IN1=0;         //左电机

        IN2=0;

        IN3=0;         //右电机

        IN4=0;

        IN5=0;         //左电机

        IN6=0;

        IN7=0;         //右电机

        IN8=0;

     

  delay_ms(10);

}


  

/********************************************************************

* 功能 : 后退。

***********************************************************************/

void back()

{

  

   IN1=1;           //左电机

        IN2=0;

        IN3=0;         //右电机

        IN4=1;

        IN5=1;         //左电机

        IN6=0;

        IN7=0;         //右电机

        IN8=1;

  delay_ms(10);

}


//自动浇花初始化


void INIT()                  //初始化

{


       TMOD= 0x01;      //T/C1采用16位定时器/计数器

      ET0 = 1;             //定时器1开中断

       TH0= 0xff;

   TL0 = 0xce;

       TR0=0;                       

       EA   = 1;              //CPU开中断

}


//定时0.1ms



void timer0() interrupt 1

{

EX0=0;

TH0=0xff;

TL0=0xce;

j++;

if(j<=pro)

{

servor0=1;

}

else

{

servor0=0;

}

if(j==400)  //周期20ms

{

  j=0;

  servor0=~servor0;

}

}

//右转90

voidservorr()

{

        TR0=1;

        pro=8;   //舵机转动到0°  

        delay_ms(200);

        TR0=0;

}

  //左转90

voidservorl()

{

        TR0=1;

        pro=34; //舵机转动到0°  

        delay_ms(200);

        TR0=0;

}


//转到0     

voidservorc()      //0

{

      

        TR0=1;

        pro=20; //舵机返回90°方向   

        delay_ms(200);

      

}


//循迹

void scanline()

{

       P1=0XFF;

       if(K3==0||K3==0&&K2==0){comeleft();comeleft();zhuangtai1=1;zhuangtai2=0;zhuangtai3=0;}

       //当左边检测到黑线时则 左转 状态1 1  状态2 状态3清零   

       elseif(!K1||!K1&&!K2) {     comeright();comeright ();zhuangtai1=0;zhuangtai2=1;zhuangtai3=0;}

        //当右边检测到黑线时则右转 状态2 1  状态1 状态3清零  

       elseif(!K2)  {      comeon();zhuangtai1=0;zhuangtai2=0;zhuangtai3=1;   }

      else

       {      //当没有探头检测到黑线时

              if(zhuangtai1)  {comeleft();} //  状态1 则左转

              else if(zhuangtai2)  {comeright();}//状态2 则右转

              else if(zhuangtai3)  {comeon();}     //状态3 则前进直走

              else{stop();}

              }

}




/********************************************************************

* 名称 : Send_Data()

* 功能 : 向上位机传送字符

* 输入 :

* 输出 :

***********************************************************************/

void Send_Data(uchar type,uchar cmd,uchardat)

{

  uchar data Buffer[5];//构建数据包

  uchar *p;

  uint Send_Count=0;

   p= Buffer;

  Buffer[0]=0XFF;

  Buffer[1]=type;

   Buffer[2]=cmd;

  Buffer[3]=dat;

  Buffer[4]=0XFF;     

while(1)

    {

     if(*p==0XFF)

       {

        Send_Count++;  //0XFF标志统计位

       }

     SBUF = *p;  //发送

     while(!TI)  //如果发送完毕,硬件会置位TI,等待发送完毕

          {

            _nop_();

          }

     p++;

     TI = 0;

     if(Send_Count == 2)  //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环

       {

        TI = 0;

        break;

       }  

    }

}

/********************************************************************

协议规定:

包头  类型位  数据位 数据位   结束位

0XFF  0X**   OX**   0X**     0XFF

各命令说明:

类型位   数据位  数据位 功能


0X00      0X02  0X00    前进

0X00      0X01  0X00    后退

0X00      0X03  0X00    左转

0X00      0X04  0X00    右转

0X00      0X00  0X00    停止


0X01      0X01          舵机l

0X01      0X02    .     舵机r

0X01      0X03    .     舵机c


0X02      0X01          喷水

0X02      0X02    .     不喷水

***********************************************************************/

/********************************************************************

* 名称 : Com_Int()

* 功能 : 串口中断初始化

***********************************************************************/

void Com_Init(void)

{

   

        TMOD = 0x21;

    PCON = 0x00;

    SCON = 0x50;   

    TH1 = 0xFd;    //设置波特率 9600

    TL1 = 0xFd;

    TR1 = 1;  //启动定时器1

    ES = 1;  //开串口中断

    EA = 1;  //开总中断

    IT0=0;

    EX0=1;              

}



  // 串口中断

void Com_Int(void) interrupt 4

{

uchar temp;

ES=0; //关串口中断

RI=0; //软件清除接收中断

temp=SBUF;

if(temp==0XFF && URTAReceivedCount<3)

    {

      Tempdatatable[0]=0XFF;     //包头

      URTAReceivedCount++;

    }

else

    {

      Tempdatatable[n]=temp;

      n++;

          if(URTAReceivedCount==0&&n==2)

          n=1;

    }


if(URTAReceivedCount==2)//包尾

    {

      Tempdatatable[0]=0XFF;

      Tempdatatable[4]=0XFF;

      n=1;

      URTAReceivedCount=0;  //组包完毕

      temp=' ';

     // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]);  //发送组成的数据包回去

    }


CommandDatatable[0]=Tempdatatable[0];

CommandDatatable[1]=Tempdatatable[1];

CommandDatatable[2]=Tempdatatable[2];

CommandDatatable[3]=Tempdatatable[3];

CommandDatatable[4]=Tempdatatable[4];


ES=1;//开串口中断

  


}


  //wifi控制初始化

void Timer0Init()

  {

     /*0=0.5ms, 45=1ms, 90=1.5ms, 135=2ms, 180=2.5ms

     /.5 ms初始值 F700,(12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)*/

       TMOD|= 0x01;       //使用模式116位定时器,使用"|"符号可以在使用多个定时器时不受影响         

       TH0=-ms2_5Con>>8;         //给定初值,17ms中断

       TL0=-ms2_5Con;

       EA=1;            //总中断打开

       ET0=1;           //定时器0中断打开

       TR0=1;           //定时器0开关打开                                   

  

  }



//   自动控制主程序

voidzidong() //自动浇花

{

       P0=0X7d;

       P1=0X00;

       P2=0XFF;

       INIT();

       servorc();

       while(1)

       {

       //舵机转动浇水

       if(red1==0)

              {     

                     

              while(red1==0&&red3==0)

              {        

                    stop();

                    delay_ms(100);

                        servorl();

                    delay_ms(100);

                       water=1;

                     }

                      water=0;

                 delay_ms(200);

                     servorc();


                                   

               }            

        if(red0==0)

              {     

               

                           

                   while(red0==0&&red2==0)

                     {  

                          stop();

                            delay_ms(100);

                       servorr();

                          delay_ms(100);

                        water=1;

                                  }

                         water=0;

                        delay_ms(200);

                     servorc();

                     

               }

               scanline(); //循环调用寻线子程序

       }

}




//   wifi控制主程序

      

void wifico()

{   

  

   delay_ms(50);

       water=0;

       P1=0X00;

       INIT();


   Com_Init();//串口初始化


       servorc();  

while(1)

  {

  

  if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)

     {                                                                                                                                

          switch (CommandDatatable[1])     //根据键值不同,执行不同的内容

            {

              case 0X00:  //类型位0X00,表明是控制数据包,进入控制数据case

                 switch(CommandDatatable[2])  //根据数据位的值来进行选择执行不同的动作

                           {

                             case0X00:stop();break;

                             case0X01:comeon();break;

                             case0X02:back();break;

                             case0X03:comeleft();break;

                             case0X04:comeright ();break;

                                                  default : break;

                           }

                         break;

              case 0X01:    //类型位0X01,表明是舵机数据包,进入舵机case  

                  switch(CommandDatatable[2])

                             {  case 0x01:servorr();break;

                                   case0x02:servorc();break;

                                   case0x03:servorl();break;

                                   default:  break;

                     

                      }

                     break;

                     case0X02:     

                  switch(CommandDatatable[2])

                             {  case 0x01:water=1;break;

                                   case0x02:water=0;break;

                                   

                                   default:  break;

                     

                      }

                     break;

              

              default :  break;

           }

      }

  }

}


//主函数

void main()

{     


   water=0;

   

       if(key1==0&&key2!=0)zidong();

       elseif(key2==0&&key1!=0) wifico();  

       else

       {

              water=0;

              servorc();

              stop();}

}


积分规则
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-19 11:36 , Processed in 0.066560 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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