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

QQ登錄

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

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

求助:串口助手HEX發(fā)送數(shù)據(jù),51單片機(jī)接收,用LCD1602顯示。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:220156 發(fā)表于 2017-12-16 15:23 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
當(dāng)串口助手HEX發(fā)送45時(shí),LCD1602顯示并不是35,而是69 ,
  1. void Usart() interrupt 4
  2. {
  3.         uchar D1,D2,D3,Data;
  4.         EA = 0;
  5.         Data=SBUF;   //出去接收到的數(shù)據(jù)
  6.         RI = 0;        //清除接收中斷標(biāo)志位

  7.         D1 = Data/100;
  8.         Data = Data%100;
  9.         D2 = Data/10;
  10.         D3 = Data%10;
  11.         LcdWriteCom(0xC0 + 8);
  12.         LcdWriteData(D1+0x30);
  13.         LcdWriteData(D2+0x30);
  14.         LcdWriteData(D3+0x30);

  15.         EA = 1;
  16. }          
復(fù)制代碼
通過(guò)發(fā)現(xiàn)修改了一下
  1. void Usart() interrupt 4
  2. {
  3.         uchar D1,D2,D3,Data;
  4.         EA = 0;
  5.         Data=SBUF;         //出去接收到的數(shù)據(jù)
  6.         RI = 0;               //清除接收中斷標(biāo)志位

  7.         if(Data < 100 && Data >= 0)                 //輸入十進(jìn)制數(shù)小于64
  8.         {       
  9.                 D1 = Data%16;                        //個(gè)位
  10.                 Data = Data/16;
  11.                 D2 = Data%16;                        //十位
  12.                 D3 = 0;       
  13.         }
  14.         if(Data >= 100 && Data < 256)                //輸入十進(jìn)制數(shù)大于等于64 小于100
  15.         {
  16.                  D1 = Data%16;                        //個(gè)位
  17.                 Data = Data/16;
  18.                 D2 = Data%16;                        //十位
  19.                 D3 = 0;               
  20.         }       
  21.         LcdWriteCom(0xC0 + 8);
  22.         LcdWriteData(D3+0x30);
  23.         LcdWriteData(D2+0x30);
  24.         LcdWriteData(D1+0x30);
  25.         EA = 1;
  26. }
復(fù)制代碼

這個(gè)原因是:45是通過(guò)十六進(jìn)制發(fā)送,即4*16+5*1=69。
有個(gè)疑問(wèn):串口助手發(fā)送45,單片機(jī)接收的不也應(yīng)該是45嗎?應(yīng)該只是傳輸是以十六進(jìn)制傳輸?!
現(xiàn)在的結(jié)果是:
  我最高發(fā)送十進(jìn)制99(十六進(jìn)制255),發(fā)送十進(jìn)制100/101(十六進(jìn)制256/257)就顯示000/001了(好像是Hex發(fā)送時(shí)只能使兩位數(shù),100就是發(fā)送10  0, 101就是10  1);

我想問(wèn)下就是:1.我要串口發(fā)送十進(jìn)制數(shù)大于100(如125),這樣現(xiàn)在的程序轉(zhuǎn)換就不行了,應(yīng)該怎么傳輸125這個(gè)數(shù)?
                                   (定義數(shù)組,再依次傳 1 , 2 , 5 ,在LCD顯示???)
                        2.我之后是想通過(guò)兩個(gè)藍(lán)牙模塊進(jìn)行兩個(gè)單片機(jī)之間傳輸據(jù)(如距離,壓力等數(shù)據(jù))。

希望大家能給些解答與建議




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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2017-12-16 21:54 | 只看該作者
串口發(fā)送一幀數(shù)據(jù)范圍0x00~0xff,大于0xff的數(shù)值需要分段發(fā)送,接收后按自定義通訊協(xié)議再?gòu)?fù)原。你用串口助手發(fā)送100并不是你想象的10進(jìn)制100,而是自動(dòng)分為16進(jìn)制2幀0x10和0x00發(fā)送。你要傳輸125可以直接發(fā)送7D就可以了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:220156 發(fā)表于 2017-12-17 09:32 | 只看該作者
本帖最后由 瘋狂的小吉 于 2017-12-17 10:32 編輯
wulin 發(fā)表于 2017-12-16 21:54
串口發(fā)送一幀數(shù)據(jù)范圍0x00~0xff,大于0xff的數(shù)值需要分段發(fā)送,接收后按自定義通訊協(xié)議再?gòu)?fù)原。你用串口助 ...

謝謝您的解答,有所收獲。

又有個(gè)串口HEX模式傳輸問(wèn)題:
      1. (這里是直接輸16進(jìn)制)串口發(fā)送7d,通過(guò)一種轉(zhuǎn)換,LCD顯示125,
          轉(zhuǎn)換形式為
  1. D1 = Data/100;                //        百位
  2.         Data = Data%100;        
  3.         D2 = Data/10;                  //        十位
  4.         D3 = Data%10;                //  個(gè)位

  5.         LcdWriteCom(0xC0 + 8);
  6.         LcdWriteData(D1+0x30);
  7.         LcdWriteData(D2+0x30);
  8.         LcdWriteData(D3+0x30);
復(fù)制代碼

      2.(直接輸十進(jìn)制)串口發(fā)送31,通過(guò)轉(zhuǎn)換,LCD顯示31
       31——0x31——49-轉(zhuǎn)換-——31
       F:\7_單片機(jī)\藍(lán)牙傳輸血壓數(shù)據(jù)\捕獲.PNG
  1.         D1 = Data%16;                        //個(gè)位
  2.                 Data = Data/16;
  3.                 D2 = Data%16;                        //十位
  4.                 D3 = 0;        
  5.         LcdWriteCom(0xC0 + 8);
  6.         LcdWriteData(D3+0x30);
  7.         LcdWriteData(D2+0x30);
  8.         LcdWriteData(D1+0x30);
復(fù)制代碼

關(guān)于轉(zhuǎn)換現(xiàn)在很亂

然后就是這兩種方法,我要通過(guò)藍(lán)牙傳輸十進(jìn)制數(shù)(125),我要選擇第一種,用單片機(jī)將125轉(zhuǎn)化為十六進(jìn)制,再通過(guò)藍(lán)牙模塊傳輸給其他設(shè)備應(yīng)該可行吧(感覺(jué)有點(diǎn)跑題),,還是麻煩幫助下。

捕獲.PNG (2.18 KB, 下載次數(shù): 51)

捕獲.PNG

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:262595 發(fā)表于 2017-12-17 11:29 | 只看該作者
我有hex文件但不知道怎么發(fā)
回復(fù)

使用道具 舉報(bào)

5#
ID:220156 發(fā)表于 2017-12-17 14:31 | 只看該作者
簡(jiǎn)近樹(shù) 發(fā)表于 2017-12-17 11:29
我有hex文件但不知道怎么發(fā)

你說(shuō)的是燒錄進(jìn)單片機(jī)的那個(gè)hex文件嗎?
我這里是單片機(jī)串口助手發(fā)送的數(shù)據(jù)(以HEX模式傳輸 即以十六進(jìn)制的形式)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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