1744|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

十进制转十六进制c语言函数 [复制链接]

如何接收串口调试助手发来的十六进制数据,并以十六进制的形式显示在LCD上。比如串口调试助手上发送十六进制数据3C,单片机带的LCD上也显示3C。单片机接收到来自电脑串口的数据0x3C后,存储到一个变量中,当我们调用显示数字的函数时,实际上显示出来的是十进制的数据,例如发送0x3C,会显示十进制数据60。看来要想显示十六进制,还不是那么容易。十六进制中,包含0~9数字,还包含A~F字母,看来要想显示,必须要用显示字符的函数而不能用显示数字的函数了。

但是不能直接调用显示字符的函数。因为要想显示3C,实际上是要显示2个字符,你如果直接把数据带进去,实际上他会认为是一个字符的ASCII码。

于是我们要把发过来的数据变换成两个字符,用下面的公式:

 shi = rece_data/16; // 获取第一位
 ge  = rece_data%16; // 获取第二位

然后把数字转换成字符:

 switch(shi)
 {
 case 0:shi='0';break;
 case 1:shi='1';break;
 case 2:shi='2';break;
 case 3:shi='3';break;
 case 4:shi='4';break;
 case 5:shi='5';break;
 case 6:shi='6';break;
 case 7:shi='7';break;
 case 8:shi='8';break;
 case 9:shi='9';break;
 case 10:shi='A';break;
 case 11:shi='B';break;
 case 12:shi='C';break;
 case 13:shi='D';break;
 case 14:shi='E';break;
 case 15:shi='F';break;
 default:break;
 }
 switch(ge)
 {
 case 0:ge='0';break;
 case 1:ge='1';break;
 case 2:ge='2';break;
 case 3:ge='3';break;
 case 4:ge='4';break;
 case 5:ge='5';break;
 case 6:ge='6';break;
 case 7:ge='7';break;
 case 8:ge='8';break;
 case 9:ge='9';break;
 case 10:ge='A';break;
 case 11:ge='B';break;
 case 12:ge='C';break;
 case 13:ge='D';break;
 case 14:ge='E';break;
 case 15:ge='F';break;
 default:break;
 }

然后就可以显示了:

 LCD_ShowChar(xpos, ypos, shi);
 LCD_ShowChar(xpos+8, ypos, ge);

实践图片欣赏:

十六进制发送

十六进制显示

总结一下,实际上用到的原理是十进制转十六进制函数。把这个功能封装一下,如下所示:

void char DecToHex(redata)
{
unsigned char shi,ge;

redata = UART->RBR;
shi = redata/16;
ge  = redata%16;
switch(shi)
{
case 0:shi='0';break;
case 1:shi='1';break;
case 2:shi='2';break;
case 3:shi='3';break;
case 4:shi='4';break;
case 5:shi='5';break;
case 6:shi='6';break;
case 7:shi='7';break;
case 8:shi='8';break;
case 9:shi='9';break;
case 10:shi='A';break;
case 11:shi='B';break;
case 12:shi='C';break;
case 13:shi='D';break;
case 14:shi='E';break;
case 15:shi='F';break;
default:break;
}
switch(ge)
{
case 0:ge='0';break;
case 1:ge='1';break;
case 2:ge='2';break;
case 3:ge='3';break;
case 4:ge='4';break;
case 5:ge='5';break;
case 6:ge='6';break;
case 7:ge='7';break;
case 8:ge='8';break;
case 9:ge='9';break;
case 10:ge='A';break;
case 11:ge='B';break;
case 12:ge='C';break;
case 13:ge='D';break;
case 14:ge='E';break;
case 15:ge='F';break;
default:break;
}

}
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表