十进制转十六进制c语言函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十进制转十六进制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;
}
}。