jason900506 發表於 2015-7-21 15:58:31

LCD顯示問題

各位大大,日前測試Arduino+LCD,遇到顯示的問題,請先進們指教~剛開始顯示正常(Driver RPM=3,數值3顯示正常)



(Driver RPM=120,數值120也顯示正常),但之後數值回到6的時候,卻顯示為600,數值回到88的時候,卻顯示為880







下列為程式碼:
//腳位定義
#define KeyPadPin   A0               //Analog按鍵
//按鍵參數
#define Offset          10
#define SelectADC       639            //按鍵Select Analog值
#define LeftADC         408            //按鍵Left Analog值
#define UpADC         99             //按鍵Up Analog值
#define DownADC         256            //按鍵Down Analog值
#define RightADC      0            //按鍵Right Analog值
//按鍵旗標
int val ;
union{
unsigned char Val;
struct
{
      unsigned Select:1;         //Select按鍵被按下旗標
      unsigned Left:1;         //Left按鍵被按下旗標
      unsigned Up:1;             //Up按鍵被按下旗標
      unsigned Down:1;         //Down按鍵被按下旗標
      unsigned Right:1;          //Right按鍵被按下旗標
      unsigned :1;               //保留
      unsigned :1;               //保留
      unsigned :1;               //保留
};
}KeyDown;
//按鍵參數
int KeyVal;
unsigned char KeyDownOld;            //按鍵舊值暫存器
unsigned int KeySelectVal,             //Select按鍵按下計數器
             KeyLeftVal,               //Left按鍵按下計數器
             KeyUpVal,               //Up按鍵按下計數器
             KeyDownVal,               //Down按鍵按下計數器
             KeyRightVal,            //Right按鍵按下計數器
             dontPressVal;             //未按下按鍵
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
/* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 9
* LCD D4 pin to digital pin 4
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 6
* LCD D7 pin to digital pin 7
* LCD BL pin to digital pin 10
* KEY pin to analogl pin 0
*/
LiquidCrystal lcd(8,9,4,5,6,7);                               //腳位定義 lcd(RS,E,D4,D5,D6,D7);
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("MotorRPM =");
lcd.setCursor(0, 1);
lcd.print("Driver RPM =");
   }
//***************************
//******* Main Loop *********
//***************************
void loop()
{
    val = analogRead(1);
    Serial.println(val);
    int rpm = map(val,0,1023,0,120);
       lcd.setCursor(12,1);
       lcd.print(rpm);
             }

ates1687 發表於 2015-7-21 19:29:14

回復 1# jason900506


   你好像少加 lcd.clear 這個函數在這個程式碼裡面

已經很久沒用LCD寫,只告訴你以往的經驗(有碰過轉速表數字回不來的難題)

lostsnow 發表於 2015-7-28 18:01:58

本帖最後由 lostsnow 於 2015-7-29 13:23 編輯

這是正常的狀況,當你顯示 120 數字拆開分別是,
百位數字 1 是第 8 個字,2 是第 9 個字,0 是第 10 個字(依你的圖)..
之後在顯示 6 應該會出現 620 才對,中間可能你有做了什麼,
因為顯示是「從左至右」,所以 6 會在第 8 個字,後面沒字了就維持之前的值。

解決的方法有很多,最簡單的是在印數字之前印些空白 "    "

如果要整個 clear 的話,字串要重新顯示,把 setup() 的 print 內容移至 loop()

walkerman15 發表於 2015-7-29 16:34:50

lcd.setCursor(12,1);
lcd.print(rpm);
這兩行改成
lcd.setCursor(12,1);
lcd.print("    ");
lcd.setCursor(12,1);
lcd.print(rpm);
就可以解決你的問題

jason900506 發表於 2015-8-5 16:35:24

加入 lcd.print("    ");解決問題了,感謝各位大大的協助!!
void loop()
{
    val = analogRead(1);
    Serial.println(val);
    int driverrpm = map(val,0,1023,0,120);
   lcd.setCursor(12,0);   
      lcd.print("950");
       lcd.setCursor(12,1);
      lcd.print("    ");   
       lcd.setCursor(12,1);
      lcd.print(driverrpm);
頁: [1]
查看完整版本: LCD顯示問題