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

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

QQ登錄

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

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

單片機(jī)+藍(lán)牙模塊如何接收10進(jìn)制數(shù)據(jù)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:900977 發(fā)表于 2021-5-10 22:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下是源程序,“shu”是個(gè)變量,當(dāng)我用藍(lán)牙向單片機(jī)發(fā)送1的時(shí)候,單片機(jī)會(huì)將“shu”統(tǒng)計(jì)到的數(shù)發(fā)送給藍(lán)牙,但是藍(lán)牙接收到的數(shù)只能16進(jìn)制顯示,如果不選的十六進(jìn)制顯示的話,出現(xiàn)亂碼!!!現(xiàn)在是如何解決,能讓藍(lán)牙接收到的數(shù)據(jù)十進(jìn)制顯示???各位大哥積極提個(gè)建議,謝謝了!

單片機(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;
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':

                                             
                                                                                                      
                                                        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:889094 發(fā)表于 2021-5-10 23:15 | 只看該作者
前面程序結(jié)構(gòu)很好,只是為什么要把串口處理放在主函數(shù)中?
還是單獨(dú)弄個(gè)串口服務(wù)程序的好。參考單片機(jī)手冊(cè)中串口服務(wù)例程,我前段時(shí)間我自己寫(xiě)的串口服務(wù)函數(shù)少了一點(diǎn)點(diǎn)就中間出現(xiàn)莫名的問(wèn)題。
可以參考下面兩個(gè)函數(shù)
void Uart1_Int() interrupt 4                                        //串口1
{
        if(RI)
        {  
                   tmp = SBUF;                   //暫存接收到的數(shù)據(jù)
            RI = 0;
        }
        if(TI)
        {
                TI=0;
                busy=0;
        }
}
void send(unsigned char a)      //單字節(jié)數(shù)據(jù)發(fā)送
{                 
         while(busy);   
      busy=1;
          SBUF=a;

}

回復(fù)

使用道具 舉報(bào)

板凳
ID:858964 發(fā)表于 2021-5-11 01:47 | 只看該作者
我做過(guò)一個(gè)項(xiàng)目,(單片機(jī)+藍(lán)牙串口模塊)接收來(lái)自手機(jī)的的數(shù)據(jù),
例如,接收到4個(gè)16進(jìn)數(shù)分別是0x38,0x39,0x35,0x32,
這4個(gè)數(shù)是ASCII碼,對(duì)應(yīng)的十進(jìn)制數(shù)值就是8952。
回復(fù)

使用道具 舉報(bào)

地板
ID:277550 發(fā)表于 2021-5-11 08:58 | 只看該作者
單片機(jī)中的int ? 是2個(gè)字節(jié),unsigned int也是,所以,根據(jù)數(shù)據(jù)的長(zhǎng)度,直接移位就可以。
回復(fù)

使用道具 舉報(bào)

5#
ID:900977 發(fā)表于 2021-5-11 09:42 來(lái)自觸屏版 | 只看該作者
Kxuan163 發(fā)表于 2021-5-11 01:47
我做過(guò)一個(gè)項(xiàng)目,(單片機(jī)+藍(lán)牙串口模塊)接收來(lái)自手機(jī)的的數(shù)據(jù),
例如,接收到4個(gè)16進(jìn)數(shù)分別是0x38,0x39, ...

我的也是接受到16進(jìn)制,0x01就是1,0x02就是2,不懂怎么搞了
回復(fù)

使用道具 舉報(bào)

6#
ID:900977 發(fā)表于 2021-5-11 09:45 來(lái)自觸屏版 | 只看該作者
devcang 發(fā)表于 2021-5-11 08:58
單片機(jī)中的int ? 是2個(gè)字節(jié),unsigned int也是,所以,根據(jù)數(shù)據(jù)的長(zhǎng)度,直接移位就可以。

可以移位處理嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:900977 發(fā)表于 2021-5-11 11:01 | 只看該作者
birdzhyli 發(fā)表于 2021-5-10 23:15
前面程序結(jié)構(gòu)很好,只是為什么要把串口處理放在主函數(shù)中?
還是單獨(dú)弄個(gè)串口服務(wù)程序的好。參考單片機(jī)手冊(cè) ...

我現(xiàn)在的1問(wèn)題是,如何把接收到的16進(jìn)制轉(zhuǎn)為十進(jìn)制,就是接收到的以十進(jìn)制顯示
回復(fù)

使用道具 舉報(bào)

8#
ID:919213 發(fā)表于 2021-5-11 11:14 | 只看該作者
這個(gè)MCU和藍(lán)牙是通過(guò)uart通信嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:401564 發(fā)表于 2021-5-12 00:15 | 只看該作者
16進(jìn)制轉(zhuǎn)換成10進(jìn)制,那不是很簡(jiǎn)單的事情嗎?
但問(wèn)題是在顯示那:16進(jìn)制實(shí)際上是3位10進(jìn)制,顯示程序肯定是不一樣的了
比如:0xFF=255,
如果是16進(jìn)制顯示,就只要兩個(gè)位置
如果你要10進(jìn)制顯示,那就要3個(gè)位置
至于處理,倒也簡(jiǎn)單,0xFF進(jìn)行算法和取模運(yùn)算,就會(huì)得到2,5,5,得到這三個(gè)數(shù),然后分別顯示就行了
回復(fù)

使用道具 舉報(bào)

10#
ID:889094 發(fā)表于 2021-5-12 01:06 來(lái)自觸屏版 | 只看該作者
羅大韓 發(fā)表于 2021-5-11 11:01
我現(xiàn)在的1問(wèn)題是,如何把接收到的16進(jìn)制轉(zhuǎn)為十進(jìn)制,就是接收到的以十進(jìn)制顯示

你要發(fā)送的不是16進(jìn)制數(shù),你要發(fā)送的是字符串12345,先把你的數(shù)字轉(zhuǎn)化成字符串,然后再發(fā),方法簡(jiǎn)單,每一位都+字符0就是對(duì)應(yīng)的字符了,cbai=shu%1000/100+'0'
回復(fù)

使用道具 舉報(bào)

11#
ID:139866 發(fā)表于 2021-5-12 09:34 | 只看該作者
你發(fā)送的是一串?dāng)?shù)字,不論是10進(jìn)制還是16進(jìn)制都不改變他的大小,如果你想顯示的是10進(jìn)制字符串,那就在單片機(jī)端先把數(shù)字按位轉(zhuǎn)換成16進(jìn)制數(shù),比如155D,轉(zhuǎn)換成1H,5H,5H,再把16進(jìn)制數(shù)字加上0X30,串口助手那里選中ASCII顯示,就能顯示155這個(gè)字符串
回復(fù)

使用道具 舉報(bào)

12#
ID:900977 發(fā)表于 2021-5-13 16:59 | 只看該作者
birdzhyli 發(fā)表于 2021-5-12 01:06
你要發(fā)送的不是16進(jìn)制數(shù),你要發(fā)送的是字符串12345,先把你的數(shù)字轉(zhuǎn)化成字符串,然后再發(fā),方法簡(jiǎn)單,每 ...

謝謝了,我用你的方法實(shí)現(xiàn)了
回復(fù)

使用道具 舉報(bào)

13#
ID:900977 發(fā)表于 2021-5-13 16:59 | 只看該作者
天ノ憶 發(fā)表于 2021-5-12 09:34
你發(fā)送的是一串?dāng)?shù)字,不論是10進(jìn)制還是16進(jìn)制都不改變他的大小,如果你想顯示的是10進(jìn)制字符串,那就在單片 ...

謝謝了
回復(fù)

使用道具 舉報(bào)

14#
ID:900977 發(fā)表于 2021-5-13 17:00 | 只看該作者
Kxuan163 發(fā)表于 2021-5-11 01:47
我做過(guò)一個(gè)項(xiàng)目,(單片機(jī)+藍(lán)牙串口模塊)接收來(lái)自手機(jī)的的數(shù)據(jù),
例如,接收到4個(gè)16進(jìn)數(shù)分別是0x38,0x39, ...

謝謝您的建議,使用
回復(fù)

使用道具 舉報(bào)

15#
ID:900977 發(fā)表于 2021-5-13 17:00 | 只看該作者
天ノ憶 發(fā)表于 2021-5-12 09:34
你發(fā)送的是一串?dāng)?shù)字,不論是10進(jìn)制還是16進(jìn)制都不改變他的大小,如果你想顯示的是10進(jìn)制字符串,那就在單片 ...

謝謝您的建議
回復(fù)

使用道具 舉報(bào)

16#
ID:879348 發(fā)表于 2021-5-13 17:25 | 只看該作者
sprintf函數(shù)變換成字符串發(fā)送
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 最新日韩av | 黄色毛片免费看 | 在线观看中文字幕dvd播放 | 国产在线视频一区二区董小宛性色 | 日产精品久久久一区二区福利 | 精品久久久久久久久久久久久久 | 亚洲成人一区 | 亚洲综合精品 | 国产成人精品一区二 | 久热中文字幕 | 久在线 | 国产农村妇女毛片精品久久麻豆 | 神马久久久久久久久久 | 日韩精品成人在线 | 色www精品视频在线观看 | 亚洲精品乱码久久久久久蜜桃 | 日韩精品视频在线 | 欧美成人免费在线视频 | 国产精品免费在线 | 久久青青| 国产精品123区 | 亚洲成人免费观看 | 精品久久久久久亚洲精品 | 亚洲成人一区二区三区 | 亚洲欧洲一区二区 | 国产一区二区在线视频 | www亚洲精品| 玖玖国产 | 免费国产视频在线观看 | 久草在线 | 欧美精品一区二区免费 | 欧美一区二区大片 | 欧美性乱 | 亚洲第一在线 | 一区二区三区视频 | 日本免费在线观看视频 | 日韩成人中文字幕 | 国产乱码精品一区二区三区五月婷 | 国产美女在线观看 | 国产日韩精品久久 | 国产第一区二区 |