簡體   English   中英

為什么“lcd_puts”不顯示 LCD 16*2 上的變量值?

[英]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);
    }
}

需要將此參數添加到編譯器:

-Wl,-u,vfprintf -lprintf_flt -lm

沒有這個將被%f忽略

更多信息在avr-libc 文檔中

對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM