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

QQ登錄

只需一步,快速開(kāi)始

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

藍(lán)牙串口如何一次發(fā)送兩個(gè)字符數(shù)據(jù)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:900977 發(fā)表于 2021-5-16 12:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下是源代碼,現(xiàn)在只能發(fā)送0-9或者是單個(gè)字符數(shù)據(jù),如何改成一次可以發(fā)送兩個(gè)或者兩個(gè)以上的字符數(shù)據(jù),比如發(fā)送10,11之類兩位數(shù)的數(shù)據(jù)???
#include <reg52.h>

#include <intrins.h>
#define uint unsigned int           //用"uint"代替"unsigned int"   無(wú)符號(hào)整數(shù)
#define uchar unsigned char                                        //用"uchar"代替"unsigned char" 無(wú)符號(hào)字符
unsigned char tmp;
uint bai;
sbit h1=P2^0;   //四個(gè)紅外傳感器
sbit h2=P2^1;
sbit h3=P2^2;
sbit h4=P2^3;
uint shu=0;
uint ji1,ji2,ji3,ji4;





void init();   //串口初始化

void send(unsigned char a);     //單字節(jié)發(fā)送函數(shù)

void ctrl(); //接收處理函數(shù)



void main()

{

                   init();

          while(1)

          {         

                  if(RI==1)                     //是否有數(shù)據(jù)到來(lái)

                  {

                   RI = 0;

                  tmp = SBUF;                   //暫存接收到的數(shù)據(jù)

                                       ctrl();

                                       }      

          }

}



void init()        //串口初始化

{

                   ES=0;                                                                       //關(guān)中斷

                     SCON = 0x50;                        // REN=1允許串行接受狀態(tài),串口工作模式1,

                                                                                                         //10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)),波特率可變



                     TMOD = 0x20;                        //定時(shí)器1工作于方式2,8位自動(dòng)重載模式,用于產(chǎn)生波特率

          TH1=TL1=0xFD;                       //波特率9600



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

          TR1 = 1;                                                                  //定時(shí)器1開(kāi)始工作,產(chǎn)生波特率

                                                                                                         //發(fā)送標(biāo)志位置0

                     TI=0;                                                                        //接收標(biāo)志位置0

                     RI=0;



                     //EA=0;

               ES=1;






                                                  

}



void send(unsigned char a)      //單字節(jié)數(shù)據(jù)發(fā)送

{                                                                //注意:若單片機(jī)TXD(P3.1)無(wú)上拉能力,必須在P3.1端接上拉電阻。本次測(cè)試需要接上拉電阻

         TI=0;         

         SBUF=a;

         while(TI==0);

         TI=0;





}



void ctrl()                      //接收處理函數(shù)

{

                                     switch(tmp)

                                       {

                                            case '1':

                                                                bai=shu%10+'0';
                                                                                                      
                                                        send(shu);

                                                        break;                                          

                                                                           }



        if(ji1==0&&ji2==0&&ji3==0&&ji4==0)                                                //如果四個(gè)紅外傳感器都感應(yīng)到人
   {      
   shu=4;                                                                                                                                                                //則說(shuō)明4人到場(chǎng)
   }  
     if(ji1==1&&ji2==1&&ji3==1&&ji4==1)                                        //如果四個(gè)紅外傳感器都沒(méi)有感應(yīng)到人
   {
   shu=0;                                                                                                                                                                //則0人到場(chǎng),全部曠課
   }

      

        if(ji1==0&&ji2==0&&ji3==0&&ji4==1)                                                //如果有三個(gè)傳感器感應(yīng)到人,則說(shuō)明三人到場(chǎng)
        {
        shu=3;
        }
                if(ji1==0&&ji2==0&&ji3==1&&ji4==0)
        {
        shu=3;
        }
                if(ji1==0&&ji2==1&&ji3==0&&ji4==0)
        {
        shu=3;
        }
                if(ji1==1&&ji2==0&&ji3==0&&ji4==0)
        {
        shu=3;
        }




        if(ji1==0&&ji2==0&&ji3==1&&ji4==1)                                                //如果兩個(gè)傳感器感應(yīng)到人,則兩人到場(chǎng)
        {
        shu=2;
        }
                if(ji1==1&&ji2==1&&ji3==0&&ji4==0)
        {
        shu=2;
        }
                if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=2;
        }
                if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
        {
        shu=2;
        }

                   if(ji1==0&&ji2==1&&ji3==0&&ji4==1)
        {
        shu=2;
        }

                           if(ji1==1&&ji2==0&&ji3==1&&ji4==0)
        {
        shu=2;
        }

                                      if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=2;
        }

                           if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
        {
        shu=2;
        }





                   if(ji1==0&&ji2==1&&ji3==1&&ji4==1)                                                        //如果有一個(gè)傳感器感應(yīng)到人,說(shuō)明一人到場(chǎng)
        {
        shu=1;
        }


                                   if(ji1==1&&ji2==0&&ji3==1&&ji4==1)
        {
        shu=1;
        }

                           if(ji1==1&&ji2==1&&ji3==0&&ji4==1)
        {
        shu=1;
        }

                           if(ji1==1&&ji2==1&&ji3==1&&ji4==0)
        {
        shu=1;
        }

  if(h1==0)                                                //此處是紅外傳感器的感應(yīng)觸發(fā),無(wú)實(shí)際意義,下同
  {
  ji1=0;  //低電平觸發(fā)
  }
  else
  {
  ji1=1;
  }

    if(h2==0)
  {
  ji2=0;
  }
  else
  {
  ji2=1;
  }

    if(h3==0)
  {
  ji3=0;
  }
  else
  {
  ji3=1;
  }

    if(h4==0)
  {
  ji4=0;
  }
  else
  {
  ji4=1;
  }

}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:900977 發(fā)表于 2021-5-16 14:42 | 只看該作者
就是我用藍(lán)牙發(fā)送數(shù)字1給單片機(jī),單片機(jī)有反應(yīng)有反饋,現(xiàn)在我想改成發(fā)送數(shù)字15給單片機(jī),它也能有反應(yīng)
就是發(fā)送一位數(shù)字和兩位數(shù)字的區(qū)別,程序怎么改啊???大哥們能不能給點(diǎn)建議,,謝謝大家了

回復(fù)

使用道具 舉報(bào)

板凳
ID:900977 發(fā)表于 2021-5-16 14:44 | 只看該作者
就是我用藍(lán)牙發(fā)送數(shù)字1給單片機(jī),單片機(jī)有反應(yīng),現(xiàn)在我想改成發(fā)送數(shù)字15有反應(yīng)
就是發(fā)送一位數(shù)字和兩位數(shù)字的區(qū)別,程序怎么改啊大哥們,謝謝大家了。。!

回復(fù)

使用道具 舉報(bào)

地板
ID:139866 發(fā)表于 2021-5-16 18:09 | 只看該作者
中斷處理函數(shù)呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:452950 發(fā)表于 2021-5-16 21:08 | 只看該作者
  用printf("%d",x);       
回復(fù)

使用道具 舉報(bào)

6#
ID:367369 發(fā)表于 2021-5-17 15:30 | 只看該作者
串口收發(fā)的寄存器為一個(gè)字節(jié),可以定義一個(gè)發(fā)送緩沖區(qū)的數(shù)組和一個(gè)接收緩沖區(qū)數(shù)組,
一個(gè)一個(gè)字節(jié)的發(fā),先發(fā)SENDBUF[0],再發(fā)SENDBUF[1];
一個(gè)一個(gè)的收,將接收的第一個(gè)存到RECVBUF[0],第二個(gè)存到RECVBUF[1];然后將數(shù)據(jù)取走清空緩沖區(qū)
回復(fù)

使用道具 舉報(bào)

7#
ID:367369 發(fā)表于 2021-5-17 15:31 | 只看該作者
羅大韓 發(fā)表于 2021-5-16 14:44
就是我用藍(lán)牙發(fā)送數(shù)字1給單片機(jī),單片機(jī)有反應(yīng),現(xiàn)在我想改成發(fā)送數(shù)字15有反應(yīng)
就是發(fā)送一位數(shù)字和兩位數(shù) ...

發(fā)0-255 都是可以直接發(fā)的,就是0x00--0xff都是可以一個(gè)字節(jié)實(shí)現(xiàn)的
回復(fù)

使用道具 舉報(bào)

8#
ID:900977 發(fā)表于 2021-5-17 15:34 | 只看該作者
game灬boy 發(fā)表于 2021-5-17 15:31
發(fā)0-255 都是可以直接發(fā)的,就是0x00--0xff都是可以一個(gè)字節(jié)實(shí)現(xiàn)的

我是直接發(fā)送字符15,但是程序里邊,case'15'這樣寫不行呀,我發(fā)送字符15過(guò)去,它只讀第一位,也就是只讀1
回復(fù)

使用道具 舉報(bào)

9#
ID:900977 發(fā)表于 2021-5-17 15:36 | 只看該作者
game灬boy 發(fā)表于 2021-5-17 15:31
發(fā)0-255 都是可以直接發(fā)的,就是0x00--0xff都是可以一個(gè)字節(jié)實(shí)現(xiàn)的

我發(fā)送的是字符,接收到也是字符,我想實(shí)現(xiàn)發(fā)送字符15,她能讀到我發(fā)的是15,而不是只讀到1讀不到5,該怎么改呢?
回復(fù)

使用道具 舉報(bào)

10#
ID:900977 發(fā)表于 2021-5-17 15:44 | 只看該作者
game灬boy 發(fā)表于 2021-5-17 15:30
串口收發(fā)的寄存器為一個(gè)字節(jié),可以定義一個(gè)發(fā)送緩沖區(qū)的數(shù)組和一個(gè)接收緩沖區(qū)數(shù)組,
一個(gè)一個(gè)字節(jié)的發(fā),先 ...

大哥,能幫我寫寫嗎?在原來(lái)的程序上改一下,我真的找了好多例子但是都不能接收兩個(gè)字符的,你幫我寫一下好嗎,謝謝你
回復(fù)

使用道具 舉報(bào)

11#
ID:367369 發(fā)表于 2021-5-18 15:09 | 只看該作者
羅大韓 發(fā)表于 2021-5-17 15:36
我發(fā)送的是字符,接收到也是字符,我想實(shí)現(xiàn)發(fā)送字符15,她能讀到我發(fā)的是15,而不是只讀到1讀不到5,該怎 ...

我還說(shuō)了一個(gè)使用緩沖數(shù)組,要是覺(jué)得麻煩那你發(fā)送十六進(jìn)制0xff
回復(fù)

使用道具 舉報(bào)

12#
ID:367369 發(fā)表于 2021-5-18 15:12 | 只看該作者
羅大韓 發(fā)表于 2021-5-17 15:44
大哥,能幫我寫寫嗎?在原來(lái)的程序上改一下,我真的找了好多例子但是都不能接收兩個(gè)字符的,你幫我寫一下 ...

你可以參考我發(fā)過(guò)的ESP8266控制電機(jī)的那個(gè)貼子,那個(gè)發(fā)送了8個(gè)字節(jié),你可以根據(jù)需要發(fā)你要的兩個(gè)字節(jié)自行修改,那是在學(xué)校寫的邏輯也是比較簡(jiǎn)單
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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