[英]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.