我尝试通过以下代码在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);
}
}
3条答案
按热度按时间4uqofj5v1#
需要将此参数添加到编译器:
如果没有,将忽略
%f
更多信息在avr-libc文档中
kmb7vmvb2#
对于CodeVision,您需要将
Configure Project
对话框中的(s)printf Features
设置更改为float, width, precision
。dfddblmv3#
\x
转义序列是有问题的,因为只要字符串中有有效数字,它就会一直阅读字符串。在您的示例中,您告诉它打印与十六进制数0xdfc
等效的符号表字符,但这不是您的本意。如果您不走运,这将以某种方式损坏缓冲区,从而导致一些随机输出。通过结束文本并在其后开始一个新文本来修复代码:
一个好的编译器会警告您不要越界访问符号表。