1. 程式人生 > >STC89C52微控制器通過HC-06藍芽模組與Android手機通訊

STC89C52微控制器通過HC-06藍芽模組與Android手機通訊

STC89C52通過HC-06藍芽模組與Android手機通訊

如需轉載請標明出處:http://blog.csdn.net/itas109 

QQ技術交流群:129518033

 2017-11-04補充

注意問題:

1.確保上位機波特率為9600

2.確保下位機的波特率為9600,下位機的晶振應該為11.0592MHz

3.本教程中接收指令的是字元1、2、3,不是16進位制的0x01、0x02、0x03

4.可能跟上拉電阻有關係,但是不少人反應不需要上拉電阻,時間長了我也不知道了

環境
         1
、任意微控制器開發板即可(當時用的晶片STC90C516RD+),約定為下位機
          2
、無線藍芽串列埠透傳模組 HC-06從機
          3

windows xp作業系統
          4
、Android智慧手機(藍芽串列埠通訊助手軟體),約定為上位機

二、連線的部分電路圖(有整合板子的直接插上就可以了,但是要注意若微控制器的TXD無上拉能力需要加上拉電阻)

      上拉電阻的阻值有人問我,我當時用的是1KΩ。

三、下位機測試程式

(各位大神如果分數比較多可以贊助我一下,就1個積分)

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

STC90C51RD+與HC-06藍芽連線:

         藍芽  STC90C51RD+

         RXD    TXD

         TXD    RXD

其他連線:

         P2.0、P2.1、P2.3分別接一個指示燈

 

!!!!

!!!!注意:若微控制器TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻

!!!!

 

手機採用藍芽串列埠通訊助手

最後已改用Android自編藍芽通訊軟體

                                               By itas109

                                               http://blog.csdn.net/itas109

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

#include <reg52.h>

#include <intrins.h>

unsigned char tmp;

unsigned int c=0;

 

sbit led1=P2^0;                      //指示燈0

sbit led2=P2^1;                           //指示燈1

sbit led3=P2^3;                           //指示燈3

 

void init();   //串列埠初始化

void send(unsigned char a);     //單位元組傳送函式

void ctrl(); //接收處理函式

 

void main()

{

                   init();

          while(1)

          {         

                  if(RI==1)                     //是否有資料到來

                  {

                   RI = 0;

                  tmp = SBUF;                   //暫存接收到的資料

                                       ctrl();

                                       }      

          }

}

 

 void init()        //串列埠初始化

 {

                   ES=0;                                                                       //關中斷

                     SCON = 0x50;                        // REN=1允許序列接受狀態,串列埠工作模式1,

                                                                                                         //10位UART(1位起始位,8位資料位,1位停止位,無奇偶校驗),波特率可變

 

                     TMOD = 0x20;                        //定時器1工作於方式2,8位自動過載模式,用於產生波特率

          TH1=TL1=0xFD;                       //波特率9600 (本次測試採用晶振為11.0592)

          

          PCON &= 0x7f;                       //波特率不倍增

          TR1 = 1;                                                                  //定時器1開始工作,產生波特率

                                                                                                         //傳送標誌位置0

                     TI=0;                                                                        //接收標誌位置0

                     RI=0;

                     

                     //EA=0;

               ES=1;

 

 

          led1=0;                                    //初始化設定3個指示燈全亮

                     led2=0;

                     led3=0;

 }

   

void send(unsigned char a)      //單位元組資料傳送

{                                                                //注意:若微控制器TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻

         TI=0;         

         SBUF=a;

         while(TI==0);

         TI=0;

 

         if(c%2)                                           //傳送指示燈標誌,每接收一次,此燈亮滅交替

          led3=1;

         else

          led3=0;

         c++;

} 

 

void ctrl()                      //接收處理函式

{

                                     switch(tmp)

                                       {

                                            case '1':

                                                        led1=1;                           //收到字元1,指示燈0滅

                                                        send(tmp);

                                                        break;                                           

                                               case '2':                                         //收到字元2,指示燈1滅

                                                         led2=1;

                                                         send(tmp);

                                                         break;

                                               case '3':                                   //收到字元3,指示燈0、1亮

                                                         led1=0;

                                                         led2=0;

                                                         send(tmp);

                                                         break;

                                               case '4':                                         //收到字元4,指示燈0、1滅

                                                          led1=1;

                                                          led2=1;

                                                          send(tmp);

                                                          break;

                                               case '5':                                         //收到字元5,指示燈3亮

                                                        led3=0;

                                                        send(tmp);

                                                        break;

                                               default:                   //其他,燈全滅

                                                          led1=1;

                                                          led2=1;

                                                          led3=1;

                                                          send(tmp);

                                       }

}


四、上位機軟體可以用藍芽串列埠通訊助手軟體

覺得文章對你有幫助,請掃描二維碼捐贈給博主,謝謝!



如需轉載請標明出處:http://blog.csdn.net/itas109 

QQ技術交流群:129518033