找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4987|回复: 4
收起左侧

求助:串口助手HEX发送数据,51单片机接收,用LCD1602显示。

[复制链接]
ID:220156 发表于 2017-12-16 15:23 | 显示全部楼层 |阅读模式
当串口助手HEX发送45时,LCD1602显示并不是35,而是69 ,
  1. void Usart() interrupt 4
  2. {
  3.         uchar D1,D2,D3,Data;
  4.         EA = 0;
  5.         Data=SBUF;   //出去接收到的数据
  6.         RI = 0;        //清除接收中断标志位

  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. }          
复制代码
通过发现修改了一下
  1. void Usart() interrupt 4
  2. {
  3.         uchar D1,D2,D3,Data;
  4.         EA = 0;
  5.         Data=SBUF;         //出去接收到的数据
  6.         RI = 0;               //清除接收中断标志位

  7.         if(Data < 100 && Data >= 0)                 //输入十进制数小于64
  8.         {       
  9.                 D1 = Data%16;                        //个位
  10.                 Data = Data/16;
  11.                 D2 = Data%16;                        //十位
  12.                 D3 = 0;       
  13.         }
  14.         if(Data >= 100 && Data < 256)                //输入十进制数大于等于64 小于100
  15.         {
  16.                  D1 = Data%16;                        //个位
  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. }
复制代码

这个原因是:45是通过十六进制发送,即4*16+5*1=69。
有个疑问:串口助手发送45,单片机接收的不也应该是45吗?应该只是传输是以十六进制传输?!
现在的结果是:
  我最高发送十进制99(十六进制255),发送十进制100/101(十六进制256/257)就显示000/001了(好像是Hex发送时只能使两位数,100就是发送10  0, 101就是10  1);

我想问下就是:1.我要串口发送十进制数大于100(如125),这样现在的程序转换就不行了,应该怎么传输125这个数?
                                   (定义数组,再依次传 1 , 2 , 5 ,在LCD显示???)
                        2.我之后是想通过两个蓝牙模块进行两个单片机之间传输据(如距离,压力等数据)。

希望大家能给些解答与建议




回复

使用道具 举报

ID:213173 发表于 2017-12-16 21:54 | 显示全部楼层
串口发送一帧数据范围0x00~0xff,大于0xff的数值需要分段发送,接收后按自定义通讯协议再复原。你用串口助手发送100并不是你想象的10进制100,而是自动分为16进制2帧0x10和0x00发送。你要传输125可以直接发送7D就可以了。
回复

使用道具 举报

ID:220156 发表于 2017-12-17 09:32 | 显示全部楼层
本帖最后由 疯狂的小吉 于 2017-12-17 10:32 编辑
wulin 发表于 2017-12-16 21:54
串口发送一帧数据范围0x00~0xff,大于0xff的数值需要分段发送,接收后按自定义通讯协议再复原。你用串口助 ...

谢谢您的解答,有所收获。

又有个串口HEX模式传输问题:
      1. (这里是直接输16进制)串口发送7d,通过一种转换,LCD显示125,
          转换形式为
  1. D1 = Data/100;                //        百位
  2.         Data = Data%100;        
  3.         D2 = Data/10;                  //        十位
  4.         D3 = Data%10;                //  个位

  5.         LcdWriteCom(0xC0 + 8);
  6.         LcdWriteData(D1+0x30);
  7.         LcdWriteData(D2+0x30);
  8.         LcdWriteData(D3+0x30);
复制代码

      2.(直接输十进制)串口发送31,通过转换,LCD显示31
       31——0x31——49-转换-——31
       F:\7_单片机\蓝牙传输血压数据\捕获.PNG
  1.         D1 = Data%16;                        //个位
  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);
复制代码

关于转换现在很乱

然后就是这两种方法,我要通过蓝牙传输十进制数(125),我要选择第一种,用单片机将125转化为十六进制,再通过蓝牙模块传输给其他设备应该可行吧(感觉有点跑题),,还是麻烦帮助下。
捕获.PNG

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:262595 发表于 2017-12-17 11:29 | 显示全部楼层
我有hex文件但不知道怎么发
回复

使用道具 举报

ID:220156 发表于 2017-12-17 14:31 | 显示全部楼层
简近树 发表于 2017-12-17 11:29
我有hex文件但不知道怎么发

你说的是烧录进单片机的那个hex文件吗?
我这里是单片机串口助手发送的数据(以HEX模式传输 即以十六进制的形式)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表