将“ uint8_t”,“ float”和“ unsigned char”转换为“ char”以进行LCD显示

问题描述

我正在使用工作正常的LCD显示屏开发AtMega88PA。

我从互联网上有2种工作方法:

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转换为Decimal,否则进行转换。 无符号字符是相同的-由于某些原因,当我尝试显示无符号字符时,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,base);

基数可以是:

  • 2表示二进制
  • 十进制十进制
  • 十六进制的十六进制

缓冲区大小必须在数字的宽度范围内进行调整(例如,对于无符号字符0-255(十进制),最大4个数字是必需的,最大数字必须是转义序列'\ 0')。

双2 ASCII

double data = 3.14;
char buffer[20];

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

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

浮点转换参数:

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

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

这些功能可以在stdlib.h中找到。有一个示例库here在其中实现。

转换后,您只需致电

lcd_puts(buffer);

也许有帮助

,

snprintf()是答案!

谢谢大家

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...