u/NoGround6989

Image 1 — How do I display a digital clock on the HD44780 display in CRUMB Circuit Simulator?
Image 2 — How do I display a digital clock on the HD44780 display in CRUMB Circuit Simulator?
Image 3 — How do I display a digital clock on the HD44780 display in CRUMB Circuit Simulator?
▲ 15 r/ArduinoHelp+1 crossposts

How do I display a digital clock on the HD44780 display in CRUMB Circuit Simulator?

I need to create a functional digital clock in CRUMB. I've never worked with circuits before. I believe the clock is working, but it's not displaying correctly; only meaningless characters are appearing. I will include the specifications I followed, the connections, and the code I put in Main.c:

Display HD44780 Arduino NANO
1 (VSS) GND
2 (VDD) 5V
3 (V0) 5V
4 (RS) D12
5 (RW) GND
6 (E) D11
11 (D4) D5
12 (D5) D4
13 (D6) D3
14 (D7) D2
15 (A) 5V + resistor 220Ω
16 (K) GND

1. Power source (DC 12V)

Source 12V Arduino NANO
Positive (+) VIN
Negative (-) GND

Code in Main.c

#define RS 12

#define E 11

#define D4 5

#define D5 4

#define D6 3

#define D7 2

int h = 12;

int m = 0;

int s = 0;

unsigned long tmp = 0;

void cmd(unsigned char c) {

digitalWrite(D4, (c >> 4) & 1);

digitalWrite(D5, (c >> 5) & 1);

digitalWrite(D6, (c >> 6) & 1);

digitalWrite(D7, (c >> 7) & 1);

digitalWrite(RS, 0);

digitalWrite(E, 1);

delay(50);

digitalWrite(E, 0);

delay(50);

digitalWrite(D4, c & 1);

digitalWrite(D5, (c >> 1) & 1);

digitalWrite(D6, (c >> 2) & 1);

digitalWrite(D7, (c >> 3) & 1);

digitalWrite(E, 1);

delay(50);

digitalWrite(E, 0);

delay(50);

}

void dat(unsigned char d) {

digitalWrite(D4, (d >> 4) & 1);

digitalWrite(D5, (d >> 5) & 1);

digitalWrite(D6, (d >> 6) & 1);

digitalWrite(D7, (d >> 7) & 1);

digitalWrite(RS, 1);

digitalWrite(E, 1);

delay(50);

digitalWrite(E, 0);

delay(50);

digitalWrite(D4, d & 1);

digitalWrite(D5, (d >> 1) & 1);

digitalWrite(D6, (d >> 2) & 1);

digitalWrite(D7, (d >> 3) & 1);

digitalWrite(E, 1);

delay(50);

digitalWrite(E, 0);

delay(50);

}

void init() {

pinMode(RS, 1);

pinMode(E, 1);

pinMode(D4, 1);

pinMode(D5, 1);

pinMode(D6, 1);

pinMode(D7, 1);

delay(200);

cmd(0x33);

delay(50);

cmd(0x32);

delay(50);

cmd(0x28);

delay(50);

cmd(0x0C);

delay(50);

cmd(0x06);

delay(50);

cmd(0x01);

delay(100);

}

void pos(int c, int r) {

if(r == 0) cmd(0x80 + c);

else cmd(0xC0 + c);

}

void print(char *t) {

while(*t) dat(*t++);

}

void num(int n) {

dat('0' + n / 10);

dat('0' + n % 10);

}

void setup() {

init();

pos(0, 0);

print(" RELOGIO ");

pos(0, 1);

print(" DIGITAL ");

delay(3000);

init();

}

void loop() {

if(millis() - tmp >= 1000) {

tmp = millis();

s++;

if(s >= 60) {

s = 0;

m++;

if(m >= 60) {

m = 0;

h++;

if(h >= 24) {

h = 0;

}

}

}

pos(0, 0);

print("Hora: ");

num(h);

dat(':');

num(m);

dat(':');

num(s);

print(" ");

pos(0, 1);

if(h >= 12) print(" PM ");

else print(" AM ");

if(s % 2 == 0) print(" [*] ");

else print(" [ ] ");

}

}

u/NoGround6989 — 12 days ago