7-segment, up-down counter. Solution to the 2021 Week 10 Lab Practical.

Revision:
112:3e59dadc569e
Parent:
111:47b0267b8dd4
--- a/main.cpp	Tue Nov 09 20:33:18 2021 +0000
+++ b/main.cpp	Thu Nov 11 03:45:49 2021 +0000
@@ -1,77 +1,49 @@
 /*
-    Project: 21_7segmentTest_v5 (Lab Wk 10)
-    File: main.cpp
-    
-    This test program confirms hardware operation and demonstrates use of the 
-    7-segement display. It will also be used as the starting point for the 
-    Week 10 lab practical.
+    Project: 21_7segmentTest3_v5 (Lab Wk 10)
+    File: main.cpp (v. 1.0)
 
-    Display "value" from 0 to F_16 to DP (16_10) to all off (17_10) to all on 
-    (17_10) on 7-segment display.
-    
-    Note: This display function takes an integer argument to be display and a 
-    BusOut object (passed by reference) on which to display it as arguments.
-    This differs from the Week 8 Lab display function.
-    
+    This test program confirms hardware operation and demonstrates use of the
+    7-segement display. This version is the the solution to both modification 
+    parts in the 2021 week 10 lab practical.
+
     Written by: Dr. C. S. Tritt
-    Created: 11/9/21 (v. 1.0)
+    Created: 11/10/21 (v. 1.0)
 */
 #include "mbed.h"
-
-void display(int disVal, BusOut &disBus);
-
-Serial pc(USBTX, NC, 9600); // Use for debugging.
+#include "display.h"
 
 const int SLP_TIME = 1000; // Update once per second.
 
 int main(void)
 {
-    // Note that bit sequence is the oposite of what I initially thought they 
+    Serial pc(USBTX, NC, 9600); // Use for development & debugging.
+    // Note that bit sequence is the oposite of what I initially thought they
     // would be. That is, pins are listed in low order to high order sequence.
     BusOut disBus(D9, D8, D7, D6, D5, D4, D3, D2); // The display.
+    // Construct a digital input linked to the USER_BUTTON.
+    DigitalIn myButton(USER_BUTTON); // Built in blue button.
     int myCount = 0; // Loop count. Rolls over at 18.
-    
+
     // Test the wiring.
-    display(18, disBus);  // All on (binary).
-    ThisThread::sleep_for(2000); // Test even bars for 0.4 seconds.
-    display(17, disBus);  // All off (binary).
-    ThisThread::sleep_for(2000); // Test even bars for 0.4 seconds.
-    
+    display(18, disBus, pc);  // All on (binary).
+    pc.printf("In wiring test = %d.\n", myCount); // Send count to PC.
+    ThisThread::sleep_for(2000); // Test even bars for 2.0 seconds.
+    display(17, disBus, pc);  // All off (binary).
+    pc.printf("In wiring test = %d.\n", myCount); // Send count to PC.
+    ThisThread::sleep_for(2000); // Test even bars for 2.0 seconds.
+
     // Enter main loop.
     while(true) {
-        display(myCount, disBus); // Display myCount (count).
+        display(myCount, disBus, pc); // Display myCount (count).
         pc.printf("In main myCount = %d.\n", myCount); // Send count to PC.
-        myCount++; // Increment the count.
-        if (myCount > 18) myCount = 0; // Rollover!
+        // Count up when button is up. Count down when button is down.
+        if (myButton) {
+            myCount++; // Increment the count.
+            if (myCount > 15) myCount = 0; // Rollover!
+        } else {
+            myCount--; // Increment the count.
+            if (myCount< 0) myCount = 15; // Rollunder!
+        }
         ThisThread::sleep_for(SLP_TIME);  // Display value for 1 second.
     }
-}
-
-void display(int disVal, BusOut &disBus){
-    // 7-segment, active low look-up-table. Displays Hex 0 to F, dp, all off 
-    // and all on. 
-    const int lutAL[] = { 
-    0b00000011, // 0 = 0
-    0b10011111, // 1 = 1
-    0b00100101, // 2 = 2
-    0b00001101, // 3 = 3
-    0b10011001, // 4 = 4
-    0b01001001, // 5 = 5
-    0b01000001, // 6 = 6
-    0b00011111, // 7 = 7
-    0b00000001, // 8 = 8
-    0b00001001, // 9 = 9
-    0b00010001, // 10 = a
-    0b11000001, // 11 = b
-    0b11100101, // 12 = c
-    0b10000101, // 13 = d
-    0b01100001, // 14 = e
-    0b01110001, // 15 = f
-    0b11111110, // 16 = dp
-    0b11111111, // 17 = All off
-    0b00000000  // 18 = All on
-    //abcdefg_dp – 7-segement output codes 0 to 18.
-    };
-    disBus = lutAL[disVal];
-    pc.printf("In display, disVal = %d\n", disVal);
 }
\ No newline at end of file