繁体   English   中英

使用 C 将 uint32_t 十六进制值转换为 ascii 十进制 LCD

[英]conversion of a uint32_t hex value to an ascii decimal LCD using C

我只是想知道是否有人对如何将 uint32_t 十六进制值转换为 ascii 十进制值并将其显示到 LCD 有任何见解。 算法会有所帮助,因此我可以使用 C 代码对其进行编程。 我得到的十六进制值来自我采用并转换为 LCD 的 ADC。 ADC 数据给出 16 位值,lcd 为 16x2

无效的 Hex2DecToLCD(){

算法在这里

}

问候

void Hex_To_BCD_To_LCD(uint32_t ADCData)

 {

   char BCD[5];

   uint32_t Dig_0, Dig_1, Dig_2, Dig_3, Dig_4;

   int i = 0;

   uint32_t temp = 0x0;

   uint32_t bin_inp = ADCData;

   bin_inp *= 0x8; // scale up the ADC value

   temp  = bin_inp;

   Dig_4 = temp/10000;

   BCD[4] = Dig_4 + 0x30;

   temp  = temp - (Dig_4 * 10000);
   Dig_3 = temp/1000;
   BCD[3] = Dig_3 + 0x30;
   temp  = temp - (Dig_3 * 1000);

   Dig_2 = temp/100;
   BCD[2] = Dig_2 + 0x30;
   temp  = temp - (Dig_2 * 100);

   Dig_1 = temp/10;
   BCD[1] = Dig_1 + 0x30;
   temp  = temp - (Dig_1 * 10);

   Dig_0 = temp;
   BCD[0] = Dig_0 + 0x30;

 //Data to LCD
for (i =0; i < 5; i++){

     Data_To_LCD(BCD[i++]);

   }
}

Julien 在 2015 年提供的答案可能有效,但我认为它的格式和方法可以改进一点。

我的微控制器依赖于uint8_t来获取大多数整数值,包括通过 UART 传输 ASCII 字节。

我希望这个答案能帮助任何正在寻找一个简单的uint32_t替代%lu in printf的人。

#include <stdint.h>

void putDwordDecimalValue(uint32_t value) {
    if (value == 0) {
        putChar('0');
        return;
    }

    uint32_t valueCopy;
    valueCopy = value;

    int length = 0;
    while (valueCopy != 0) {
        length++;
        valueCopy /= 10;
    }

    int i;
    uint8_t asciiDigits[10];  // Max size of 4294967295 => 10 digits
    for (i = 0; i < length; i++) {
        uint8_t lastDigit = value % 10;
        value /= 10;
        asciiDigits[length - (i + 1)] = 0x30 + lastDigit; // 0x30 = 0 in ASCII
    }

    for (i = 0; i < length; i++)
        putChar(asciiDigits[i]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM