summaryrefslogtreecommitdiff
path: root/display_driver
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2024-04-09 09:20:05 +0200
committerLinnnus <[email protected]>2024-04-09 09:20:05 +0200
commit45e0f39612122163d0be114610bc7d99ec6fea84 (patch)
tree73ea75614669599d74e7eff1dee14a9ee48888f1 /display_driver
Initial commit
Diffstat (limited to 'display_driver')
-rw-r--r--display_driver/display_driver.ino42
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