diff options
author | Linnnus <[email protected]> | 2024-04-09 09:20:05 +0200 |
---|---|---|
committer | Linnnus <[email protected]> | 2024-04-09 09:20:05 +0200 |
commit | 45e0f39612122163d0be114610bc7d99ec6fea84 (patch) | |
tree | 73ea75614669599d74e7eff1dee14a9ee48888f1 /display_driver/display_driver.ino |
Initial commit
Diffstat (limited to 'display_driver/display_driver.ino')
-rw-r--r-- | display_driver/display_driver.ino | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/display_driver/display_driver.ino b/display_driver/display_driver.ino new file mode 100644 index 0000000..dd95d18 --- /dev/null +++ b/display_driver/display_driver.ino @@ -0,0 +1,42 @@ +const uint8_t sipo_strobe_pin = 6; + +const uint8_t sipo_data_pin = 7; + +const uint8_t sipo_clock_pin = 8; + +void setup() { + Serial.begin(9600); + + pinMode(sipo_strobe_pin, OUTPUT); + pinMode(sipo_data_pin, OUTPUT); + pinMode(sipo_clock_pin, OUTPUT); +} + +void loop() { + for (int i = 0; i < 9999; ++i) { + showNumber(i); + delay(1000); + } +} + +void showNumber(int value) { + if (value > 9999) { + Serial.println("warning: truncating value"); + value = 9999; + } + + for (int i = 3; i >= 0; --i) { + uint8_t digit = value % 10; + value /= 10; + + const uint8_t ALL_LATCHED = 0xF0; + shiftToSipo(ALL_LATCHED - (16 << i) + digit); + shiftToSipo(ALL_LATCHED + digit); + } +} + +void shiftToSipo(uint8_t bits) { + digitalWrite(sipo_strobe_pin, LOW); + shiftOut(sipo_data_pin, sipo_clock_pin, MSBFIRST, bits); + digitalWrite(sipo_strobe_pin, HIGH); +}
\ No newline at end of file |