为什么“lcd_puts”不显示LCD 16*2上的变量值?

ahy6op9u  于 2023-01-25  发布在  其他
关注(0)|答案(3)|浏览(180)

我尝试通过以下代码在Proteus模拟器的LCD上显示数值,这些代码是在Codevision中编写的:

sprintf(buffer,"Temp=%f\xdfC\n",temp);
lcd_puts(buffer);

但温度值未出现在LCD的“temp=”前面!

整个代码为:

#include <mega16.h>
 #include <delay.h>
 #include <stdio.h>
 #include <alcd.h> 

 char buffer[32];
 float temp=26.3457;  

void main(void){    
    lcd_init(16);

    while(1){

      lcd_clear();
      sprintf(buffer,"Temp=%f\xdfC\n",temp);
      lcd_puts(buffer);
      delay_ms(1500);
    }
}
4uqofj5v

4uqofj5v1#

需要将此参数添加到编译器:

-Wl,-u,vfprintf -lprintf_flt -lm

如果没有,将忽略%f
更多信息在avr-libc文档中

kmb7vmvb

kmb7vmvb2#

对于CodeVision,您需要将Configure Project对话框中的(s)printf Features设置更改为float, width, precision

dfddblmv

dfddblmv3#

\x转义序列是有问题的,因为只要字符串中有有效数字,它就会一直阅读字符串。在您的示例中,您告诉它打印与十六进制数0xdfc等效的符号表字符,但这不是您的本意。如果您不走运,这将以某种方式损坏缓冲区,从而导致一些随机输出。
通过结束文本并在其后开始一个新文本来修复代码:

sprintf(buffer, "Temp=%f\xdf" "C\n", temp);

一个好的编译器会警告您不要越界访问符号表。

相关问题