将'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 控制器上转换 unsigned
、signed
、float
和 double
,您可以使用以下函数:
无符号 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() 就是答案!
谢谢大家
我正在研究 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 控制器上转换 unsigned
、signed
、float
和 double
,您可以使用以下函数:
无符号 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() 就是答案!
谢谢大家