[英]Why "lcd_puts" doesn't display the value of a variable at LCD 16*2?
我试图通过以下用 Codevision 编写的代码在 proteus 模拟器的 LCD 上显示一个值:
sprintf(buffer,"Temp=%f\xdfC\n",temp);
lcd_puts(buffer);
但是 temp 的值并没有出现在 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);
}
}
对于 CodeVision,您需要将Configure Project
对话框中的(s)printf Features
设置更改为float, width, precision
。
\\x
转义序列是有问题的,因为只要有有效数字,它就会一直读取字符串。 在您的情况下,您告诉它打印等效于十六进制数0xdfc
的符号表字符,这不是本意。 如果你不走运,这会以某种方式破坏缓冲区,这会导致一些随机输出。
通过结束文字来修复代码并在它之后开始一个新的:
sprintf(buffer, "Temp=%f\xdf" "C\n", temp);
一个体面的编译器会警告您不要越界访问符号表。
对于 CodeVision,您需要将 Configure Project 对话框中的 (s)printf Features 设置更改为 float、width、precision
它对我有用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.