The HPDL-1414 is a 16-segment LED display with four printable fields that is over twenty years old. It has a red GaAsP screen to which we can add the epithet "smart", because it is capable of printing alphanumeric characters on its fields. The screen is controlled by a CMOS integrated circuit embedded in a plastic housing.This circuit contains RAM, ASCI II decoder, multiplexer and LED drivers. Thanks to these features, no additional components are needed to connect this display to the microcontroller.
More displays can be connected in series, where for each subsequent one it is necessary to assign another GPIO to the WR pin, similar to the SPI interface.
This time I will show you how to make an interesting mini Retro-look Clock with such a displays, as well as the way in which static and moving text can be written on it. For this purpose I wrote a super simple code, and a Schematic diagram.
The device is very simple to make and consists of several components:
If you want to make your own PCB for this project, or for any other electronic project, PCBway is a great choice for you. PCBway is one of the most experienced PCB manufacturing company in China in field of PCB prototype and fabrication. They have a large online community where you can find a Open Source projects, and you can also share your project there. From my personal experience I can tell you that on this community you can find many useful projects with alredy designed PCBs, from where you can place an order directly.
As I mentioned earlier, the link below provides separate codes for static text or moving text at the beginning before the correct time appears. When switching on, the moving text appears first, and then the correct time, in the form of hours, minutes and seconds. In front of the displays I put a darkened film for better visibility of the digits.
With the code itself we can set the exact time of the clock, which we need to enter in the lines:
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
rtc.adjust(DateTime(2022, 8, 26, 23, 07, 0)); //Exact time on the moment of uploading
Then we need to upload the code once again with the same lines commented out
Finally, the device is mounted in a suitable box made of PVC plastic with thicknesses of 3mm and 5mm, and covered with self-adhesive colored wallpaper.
#include <HPDL1414.h>
#include <RTClib.h>
#include <Wire.h>
const byte dataPins [ 7 ] = { 2 , 3 , 4 , 5 , 6 , 7 , 8 } ; // Segment data pins: D0 - D6
const byte addrPins [ 2 ] = { A1 , A2 } ; // Segment address pins: A0, A1
const byte wrenPins [ ] = { A0 , A3 }; // Write Enable pins (left to right)
RTC_DS3231 rtc;
char msg[] = " *** MICRO CLOCK - MIRCEMK *** ";
char t[32];
HPDL1414 hpdl ( dataPins , addrPins , wrenPins , sizeof ( wrenPins ) ) ;
void setup ( ) {
Serial.begin(9600);
Wire.begin();
hpdl.begin ( ) ;
hpdl.clear ( ) ;
for (byte i = 0; i < (sizeof(msg) / sizeof(char)); i++) {
for (byte j = 0; j < 16; j++) {
hpdl.setCursor(j);
if (i + j < (sizeof(msg) / sizeof(char))) {
hpdl.print(msg[i + j]);
} else {
hpdl.print(" ");
}
}
delay(200);
}
rtc.begin();
//rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
//rtc.adjust(DateTime(2022, 8, 26, 23, 07, 0));
}
void loop ( ) {
DateTime now = rtc.now();
sprintf(t, "%02d-%02d-%02d", now.hour(), now.minute(), now.second());
hpdl.clear();
hpdl.print(t);
}
#include <HPDL1414.h>
#include <RTClib.h>
#include <Wire.h>
const byte dataPins [ 7 ] = { 2 , 3 , 4 , 5 , 6 , 7 , 8 } ; // Segment data pins: D0 - D6
const byte addrPins [ 2 ] = { A1 , A2 } ; // Segment address pins: A0, A1
const byte wrenPins [ ] = { A0 , A3 }; // Write Enable pins (left to right)
RTC_DS3231 rtc;
char t[32];
HPDL1414 hpdl ( dataPins , addrPins , wrenPins , sizeof ( wrenPins ) ) ;
void setup ( ) {
Serial.begin(9600);
Wire.begin();
hpdl.begin ( ) ;
hpdl.printOverflow(true);
hpdl.clear ( ) ;
hpdl.print("*-TIME-*");
delay(3000);
hpdl.clear();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
//rtc.adjust(DateTime(2022, 8, 226, 20, 19, 0));
}
void loop ( ) {
DateTime now = rtc.now();
sprintf(t, "%02d-%02d-%02d", now.hour(), now.minute(), now.second());
hpdl.clear();
hpdl.print(t);
}