在LCD显示器上指示RTC的AM / PM

时间:2016-09-23 10:27:21

标签: time arduino lcd real-time-clock

所以我有这个Arduino程序,其目标是在LCD显示屏上显示实时(基于我的电脑)。我已经正确配置了时间和日期,但唯一剩下的问题是我不知道如何让程序正确地指示它是PM还是AM。这是迄今为止的代码:

#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);

}

1 个答案:

答案 0 :(得分:0)

您确切知道它的上午和何时下午。所以请稍后再说:

 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"