Pornind de la articolul precedent vom adauga un display LCD ceasului realizat cu ajutorul circuitului PCF8563.

Displayul este pe magistrala I2C si se conecteaza conform acestui articol.

O poza cu functionarea acestui montaj este mai jos:

Sketchul folosit pentru acest montaj este urmatorul:

#include "Wire.h"
#define PCF8563address 0x51
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

String days[] = {"Duminica", "Luni", "Marti", 
    "Miercuri", "Joi", "Vineri", "Sambata" };
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
String luna[] = {"Ianuarie", "Februarie", "Martie", 
    "Aprilie", "Mai", "Iunie", 
    "Iulie", "August", "Septembrie",
    "Octombrie", "Noiembrie", "Decembrie"};
    
void setup() {
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Ceas cu PCF8563");
  delay(1500);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("electronicstore");
  lcd.setCursor(13, 1);
  lcd.print(".ro");
  delay(2500);
  lcd.clear();
  Wire.begin();
}

void loop() {
 readPCF8563();
   
  afisare();
  lcd.setCursor(3, 1);
  lcd.print(days[dayOfWeek]);
  delay(1000);
  lcd.clear();
  afisare();
  lcd.setCursor(3, 1);
  lcd.print(dayOfMonth, DEC);
  lcd.print(" ");
  luna_mod = month -1;
  lcd.print(luna[luna_mod]);
  delay(1000);
  lcd.clear();
  afisare();
  lcd.setCursor(6, 1);
  lcd.print("20");
  lcd.print(year, DEC);
  delay(1000);
  lcd.clear();
}
  
void readPCF8563()
{
  Wire.beginTransmission(PCF8563address);
  Wire.write(0x02);
  Wire.endTransmission();
  Wire.requestFrom(PCF8563address, 7);
  second     = bcdToDec(Wire.read() & B01111111); 
  minute     = bcdToDec(Wire.read() & B01111111); 
  hour       = bcdToDec(Wire.read() & B00111111); 
  dayOfMonth = bcdToDec(Wire.read() & B00111111);
  dayOfWeek  = bcdToDec(Wire.read() & B00000111);  
  month      = bcdToDec(Wire.read() & B00011111);  
  year       = bcdToDec(Wire.read());
}

byte bcdToDec(byte value)
{
  return ((value / 16) * 10 + value % 16);
}

void afisare() {
  readPCF8563();
  lcd.setCursor(1, 0);
  lcd.print("Ora: ");
  lcd.print(hour, DEC);
  lcd.print(":");
  if (minute < 10) { lcd.print("0"); }
  lcd.print(minute, DEC);
  lcd.print(":");
  if (second < 10) { lcd.print("0"); }
  lcd.print(second, DEC);
}

Un filmulet cu montajul in functiune poate fi vazut mai jos:

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.