将'uint8_t''float'和'unsigned char'转换成'char'用于LCD显示

Converting 'uint8_t' 'float' and 'unsigned char' into 'char' for LCD display

我正在研究 AtMega88PA,其 LCD 显示屏运行良好。

我从网上得到了两种工作方法:

extern void lcd_putc(char c);          // send one 'char' to LCD display e.g. lcd_putc('A')
extern void lcd_puts(const char *s);   // send more chars e.g lcd_puts("something")

这些都很好用。但是,如果我想发送 uint8_t LCD 显示奇怪的符号 - 4 条水平线。

我尝试使用以下方法投影这个整数:

lcd_putc((char) integer); 

外部和内部函数,结果相同。 我还尝试将数字从 BCD 转换为十进制或其他方式。 对于 unsigned char 也是如此 - 由于某种原因,当我尝试显示 unsigned char 时,相同的字符出现在 LCD 显示屏上。

如何在 C 中将其他数据类型转换为 char?

要在 AVR 控制器上转换 unsignedsignedfloatdouble,您可以使用以下函数:

无符号 2 ASCII

unsigned char data = 100;
char buffer[9];

ultoa(data, buffer, base);

带符号的 2 ASCII

signed char data = -10;
char buffer[9];

ltoa(data, buffer, base);

基地可以是:

  • 2 表示二进制
  • 十进制为 10
  • 十六进制为 16

缓冲区大小必须在数字的宽度内进行调整(例如,对于 unsigned char 0-255(十进制),需要 4 位最大数字 + 转义序列“\0”)。

双 2 ASCII

double data = 3.14;
char buffer[20];

// Normal form:
dtostrf(data, length, precision, buffer);

// Exponential form:
dtostre(data, buffer, precision, DTOSTR_ALWAYS_SIGN | DTOSTR_UPPERCASE);

浮点数转换参数:

  • 长度是数字的完整长度(例如 3.14 是 4)
  • 精度定义小数点右边的长度

缓冲区大小必须在数字的宽度范围内调整

The functions can be found in stdlib.h. There is a sample library here where they are implemented.

转换后您可以简单地调用

lcd_puts(buffer);

也许这有帮助

snprintf() 就是答案!

谢谢大家