2016-09-23 98 views
0

所以我有這個Arduino程序,其目標是在液晶顯示器上顯示實時(基於我的電腦)。我已經正確配置了時間和日期,但唯一剩下的問題是我不確定如何讓程序正確地指出它是PM還是AM。以下是目前爲止的代碼:在LCD顯示屏上顯示RTC的AM/PM

#include <DS1307RTC.h> 

#include <LiquidCrystal.h> 

#include <Wire.h> 

#include <Time.h> 

LiquidCrystal lcd(12,11,5,4,3,2); 

void setup() { 

    Serial.begin(9600); 

    while (!Serial) ; // wait for serial 

    delay(200); 

    Serial.println("DS1307RTC Read Test"); 

    Serial.println("-------------------"); 

} 

void loop() { 

    tmElements_t tm; 

    if (RTC.read(tm)) { 

    Serial.print("Ok, Time = "); 

    print2digits2(tm.Hour); 

    Serial.write(':'); 

    print2digits2(tm.Minute); 

    Serial.write(':'); 

    print2digits2(tm.Second); 

    Serial.print(", Date (D/M/Y) = "); 

    Serial.print(tm.Day); 

    Serial.write('/'); 

    Serial.print(tm.Month); 

    Serial.write('/'); 

    Serial.print(tmYearToCalendar(tm.Year)-2000); 

    Serial.println(); 

    lcd.begin(8,2); // columns, rows. use 16,2 for a 16x2 LCD, etc. 

    lcd.clear(); // start with a blank screen 

    lcd.setCursor(0,0); 

    // lcd.print(tm.Hour); 

    if (tm.Hour>12) 
    { 
     tm.Hour = tm.Hour - 12; 
    print2digits(tm.Hour); 
    } 
    else 
    { 
    print2digits(tm.Hour); 
    } 
    lcd.print(":"); 

    // lcd.print(tm.Minute); 

    print2digits(tm.Minute); 
    lcd.print(":"); 

    //lcd.print(tm.Second); // change this text to whatever you like. keep it clean. 
    print2digits(tm.Second); 

    lcd.setCursor(0,1); // set cursor to column 0, row 1 

    lcd.print(tm.Month); 

    lcd.print("/"); 

    lcd.print(tm.Day); 

    lcd.print("/"); 

    lcd.print(tmYearToCalendar(tm.Year)-2000); 

    } 
    else { 

    if (RTC.chipPresent()) { 

     Serial.println("The DS1307 is stopped. Please run the SetTime"); 

     Serial.println("example to initialize the time and begin running."); 

     Serial.println(); 

    } 
    else { 

     Serial.println("DS1307 read error! Please check the circuitry."); 

     Serial.println(); 

    } 

    delay(9000); 

    } 

    delay(1000); 

} 

void print2digits(int number) { 

    if (number >= 0 && number < 10) { 

    lcd.print('0'); 

    } 

    lcd.print(number); 

} 
void print2digits2(int number) { 

    if (number >= 0 && number < 10) { 

    Serial.print('0'); 

    } 

    Serial.print(number); 

} 

回答

0

您確切地知道什麼時候是AM,什麼時候是PM。因此,只要保持它以後:

bool pm = false; 
if (tm.Hour>12) 
{ 
    tm.Hour = tm.Hour - 12; 
    print2digits(tm.Hour); 
    pm = true; 
} 
else 
{ 
    print2digits(tm.Hour); 
} 

及更高版本:

lcd.print(pm ? " PM" : " AM"); // print PM if pm is set to true, otherwise "AM"