久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3388|回復: 11
打印 上一主題 下一主題
收起左側

藍牙串口如何一次發送兩個字符數據啊?

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

#include <intrins.h>
#define uint unsigned int           //用"uint"代替"unsigned int"   無符號整數
#define uchar unsigned char                                        //用"uchar"代替"unsigned char" 無符號字符
unsigned char tmp;
uint bai;
sbit h1=P2^0;   //四個紅外傳感器
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);     //單字節發送函數

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



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

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

                                                                                                         //發送標志位置0

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

                     RI=0;



                     //EA=0;

               ES=1;






                                                  

}



void send(unsigned char a)      //單字節數據發送

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

         TI=0;         

         SBUF=a;

         while(TI==0);

         TI=0;





}



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

{

                                     switch(tmp)

                                       {

                                            case '1':

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

                                                        break;                                          

                                                                           }



        if(ji1==0&&ji2==0&&ji3==0&&ji4==0)                                                //如果四個紅外傳感器都感應到人
   {      
   shu=4;                                                                                                                                                                //則說明4人到場
   }  
     if(ji1==1&&ji2==1&&ji3==1&&ji4==1)                                        //如果四個紅外傳感器都沒有感應到人
   {
   shu=0;                                                                                                                                                                //則0人到場,全部曠課
   }

      

        if(ji1==0&&ji2==0&&ji3==0&&ji4==1)                                                //如果有三個傳感器感應到人,則說明三人到場
        {
        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)                                                //如果兩個傳感器感應到人,則兩人到場
        {
        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)                                                        //如果有一個傳感器感應到人,說明一人到場
        {
        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)                                                //此處是紅外傳感器的感應觸發,無實際意義,下同
  {
  ji1=0;  //低電平觸發
  }
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:900977 發表于 2021-5-16 14:42 | 只看該作者
就是我用藍牙發送數字1給單片機,單片機有反應有反饋,現在我想改成發送數字15給單片機,它也能有反應
就是發送一位數字和兩位數字的區別,程序怎么改啊???大哥們能不能給點建議,,謝謝大家了

回復

使用道具 舉報

板凳
ID:900977 發表于 2021-5-16 14:44 | 只看該作者
就是我用藍牙發送數字1給單片機,單片機有反應,現在我想改成發送數字15有反應
就是發送一位數字和兩位數字的區別,程序怎么改啊大哥們,謝謝大家了!!!!

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

7#
ID:367369 發表于 2021-5-17 15:31 | 只看該作者
羅大韓 發表于 2021-5-16 14:44
就是我用藍牙發送數字1給單片機,單片機有反應,現在我想改成發送數字15有反應
就是發送一位數字和兩位數 ...

發0-255 都是可以直接發的,就是0x00--0xff都是可以一個字節實現的
回復

使用道具 舉報

8#
ID:900977 發表于 2021-5-17 15:34 | 只看該作者
game灬boy 發表于 2021-5-17 15:31
發0-255 都是可以直接發的,就是0x00--0xff都是可以一個字節實現的

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

使用道具 舉報

9#
ID:900977 發表于 2021-5-17 15:36 | 只看該作者
game灬boy 發表于 2021-5-17 15:31
發0-255 都是可以直接發的,就是0x00--0xff都是可以一個字節實現的

我發送的是字符,接收到也是字符,我想實現發送字符15,她能讀到我發的是15,而不是只讀到1讀不到5,該怎么改呢?
回復

使用道具 舉報

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

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

使用道具 舉報

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

我還說了一個使用緩沖數組,要是覺得麻煩那你發送十六進制0xff
回復

使用道具 舉報

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

你可以參考我發過的ESP8266控制電機的那個貼子,那個發送了8個字節,你可以根據需要發你要的兩個字節自行修改,那是在學校寫的邏輯也是比較簡單
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区电影 | 伊人久久一区二区 | 亚洲一区亚洲二区 | www.99re5.com| 成人在线看片 | 午夜精品久久 | 亚洲午夜电影 | 欧美一级二级在线观看 | 久久电影一区 | 亚洲性爰 | 麻豆精品国产91久久久久久 | 日本不卡一区二区三区在线观看 | 久久九九色 | 亚洲国产精品久久久久 | 成人h视频在线 | 亚洲精品一区中文字幕 | 国产成人福利在线观看 | 97人澡人人添人人爽欧美 | 国产久 | 精品亚洲91 | 麻豆视频在线免费观看 | 国产精品亚洲精品日韩已方 | 在线视频国产一区 | 精品美女在线观看 | 久久999| 日韩欧美国产一区二区三区 | 亚洲欧美综合 | 99久久精品国产一区二区三区 | 在线永久看片免费的视频 | 国产精品欧美一区二区三区不卡 | 欧美乱淫视频 | 一区二区三区视频在线免费观看 | 亚洲欧美在线一区 | 国产在线视频一区二区 | 久久国产精品91 | 91精品国产91| 亚洲精品亚洲人成人网 | 国产成人一区二区三区 | 欧美xxxx色视频在线观看免费 | 国产 欧美 日韩 一区 | 免费观看一级视频 |