MBC004 - Ticker This example use the BusOut function with a 7-Segment Display

Revision:
0:317ba4466741
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jul 12 11:16:20 2018 +0000
@@ -0,0 +1,114 @@
+
+/**
+ * MBC004 - Ticker
+ * This example use the BusOut function with a 7-Segment Display
+ * 12 Jul 2018 - Mbed Colombia - http://mbedcolombia.wordpress.com/
+ *
+ * Board: ST-Nucleo-F446RE - https://os.mbed.com/platforms/ST-Nucleo-F446RE/
+ *
+ * Copyright [2018] [Leandro Perez Guatibonza / leandropg AT gmail DOT com]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed.h"
+
+// Define GPIO Pins 7-Segment Display
+// PA_10 --> A
+// PB_3  --> B
+// PB_5  --> C
+// PB_4  --> D
+// PB_10 --> E
+// PA_8  --> F
+// PA_9  --> G
+BusOut display7Seg(PA_9, PA_8, PB_10, PB_4, PB_5, PB_3, PA_10);
+
+// Anode Display 1
+DigitalOut display1(PC_7);
+
+// Anode Display 2
+DigitalOut display2(PB_6);
+
+// Variables Counter
+int tens;
+int units;
+
+// Define Logic Anode Comun Display
+//                        ABCDEFG
+int anodeComun[16] = {  0b0000001,      // 0
+                        0b1001111,      // 1
+                        0b0010010,      // 2
+                        0b0000110,      // 3
+                        0b1001100,      // 4
+                        0b0100100,      // 5
+                        0b0100000,      // 6
+                        0b0001111,      // 7
+                        0b0000000,      // 8
+                        0b0001100,      // 9
+                        0b0001000,      // A
+                        0b1100000,      // B
+                        0b1110010,      // C
+                        0b1000010,      // D
+                        0b0110000,      // E
+                        0b0111000 };    // F  
+
+// Change Display Selected
+void changeDisplaySelected() {
+    
+    // Check Display Selected
+    if(display1) {
+        
+        // Turn Off Display 1
+        display1 = 0;
+        
+        // Export data to Bus
+        display7Seg = anodeComun[units];
+        
+        // Turn On Display 2
+        display2 = 1;
+        
+    } else {
+        
+        // Turn Off Display 2
+        display2 = 0;
+        
+        // Export data to Bus
+        display7Seg = anodeComun[tens];
+
+        // Turn On Display 1
+        display1 = 1;
+    }
+}
+
+// Main Loop runs in its own thread in the OS
+int main() {
+    
+    Ticker changeDisplay;
+    
+    // Configure Change Display Selected each 10 ms
+    changeDisplay.attach(&changeDisplaySelected, 0.010);
+   
+    // Inifite Loop
+    while(1) {
+        
+        // Iterate between 0 and 99
+        for(int i = 0; i < 100; i++) {
+
+            // Calculate Tens and Units
+            tens = i / 10;
+            units = i % 10;
+         
+            // Wait 150 millisecond
+            wait_ms(150);
+        }        
+    }
+}
\ No newline at end of file