Auf den letzten Metern

Dependencies:   mbed

Revision:
0:5ac32d240694
Child:
1:d400ca81c517
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 24 11:59:31 2022 +0000
@@ -0,0 +1,163 @@
+/***************************************************************************
+* Titel        : main.c
+*
+* Description  : Labormodul "DIBI"
+*
+* Revision List:
+  --------------------------------------------------------------------------
+  Date     | Author          | Change
+  --------------------------------------------------------------------------
+  24.10.22 | J. Altenburg    | Ersterstellung
+  --------------------------------------------------------------------------
+           |                 |
+  ----------------------------------------------------------------------------
+****************************************************************************/
+#include "mbed.h"
+#include "cdef.h"
+
+/* Vereinbarungen zu den Tasteneingängen */
+DigitalIn   pinS1(A1);
+DigitalIn   pinS2(A2);
+DigitalIn   pinS3(A3);
+
+BusOut      bLedShield(D10, D11, D12, D13);
+
+/* Anschlüsse der Schieberegister */
+DigitalOut  pinSdo(PA_9);
+DigitalOut  pinSck(PA_8);
+DigitalOut  pinLoad(PB_5);
+
+/* ISR */
+Ticker      stTimer;
+
+/***************************************************************************
+*   Defines und Makros                                                       *
+***************************************************************************/
+#define nTastShort    4     /* Taste 50 Millisekunden gedrückt */    
+#define nTastLong   150     /* Taste 1.5 Sekunden gedrückt */ 
+
+#define nSegA           0x01
+#define nSegB           0x02
+#define nSegC           0x04
+#define nSegD           0x08
+#define nSegE           0x10
+#define nSegF           0x20
+#define nSegG           0x40
+#define nSegH           0x80
+
+#define nZiffer0    ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF)
+#define nZiffer1    ~(nSegB | nSegC)
+#define nZiffer2    ~(nSegA | nSegB | nSegD | nSegE | nSegG)
+#define nZiffer3    ~(nSegA | nSegB | nSegC | nSegD | nSegG)
+#define nZiffer4    ~(nSegB | nSegC | nSegF | nSegG)
+#define nZiffer5    ~(nSegA | nSegC | nSegD | nSegF | nSegG)
+#define nZiffer6    ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG)
+#define nZiffer7    ~(nSegA | nSegB | nSegC)
+#define nZiffer8    ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG)
+#define nZiffer9    ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG)
+#define nZifferA    ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG)
+#define nZifferB    ~(nSegC | nSegD | nSegE | nSegF | nSegG)
+#define nZifferC    ~(nSegA | nSegD | nSegE | nSegF)
+#define nZifferD    ~(nSegB | nSegC | nSegD | nSegE | nSegG)
+#define nZifferE    ~(nSegA | nSegD | nSegE | nSegF | nSegG)
+#define nZifferF    ~(nSegA | nSegE | nSegF | nSegG)
+#define nZifferOff   (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH)
+
+byte bIdx; /*
+* Description : Index auf Ausgabe
+*/
+
+byte bDigit; /*
+* Description : aktives Digit
+*/
+
+byte bBargraph; /*
+* Description : Bargraph durchschalten
+*/
+
+byte bS1Timer; /*
+* Description : Timer für Taste S1
+*/
+
+byte bS2Timer; /*
+* Description : Timer für Taste S2
+*/
+
+byte bS3Timer; /*
+* Description : Timer für Taste S3
+*/
+
+word wSerial; /*
+* Description : serielles Ausgaberegister
+*/
+
+/* Bitmuster */
+const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff};
+const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f};
+
+
+/* Tastenabfrage */
+void vTasteS1( void ){
+    if(pinS1 == 0){                             /* User-Taste gedrückt */
+        if(bS1Timer < nTastLong+1){             /* Abfrage max. bis Taste lange gedrückt */
+            if(bS1Timer == nTastShort){         /* Taste "kurz gedrückt" erkannt */
+                //...
+                }
+            if(bS1Timer == nTastLong){          /* Taste "lange gedrückt" erkannt */ 
+                bIdx--;
+                }
+            bS1Timer++;
+            }
+        }
+    else{                                       /* Taste nicht gedrückt */ 
+        if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){             /* Taste wurde bereits erkannt */
+            bIdx++;
+            }
+        bS1Timer = 0;
+        }
+    } 
+
+void vTasteS2( void ){
+    } 
+
+void vTasteS3( void ){
+    } 
+
+
+
+void vCheckTasten( void ){
+    vTasteS1();
+    vTasteS2();
+    vTasteS3();
+    }
+
+/* Ausschieben der 16 Bits für die Anzeige */
+void vShiftLoad(word wLoad){
+    word wMask = Bit15;
+    pinLoad = 0;
+    while(wMask){
+        if(wMask & wLoad) pinSdo = 1;
+        else              pinSdo = 0;
+        pinSck = 1;
+        wMask >>= 1;
+        pinSck = 0;
+        }    
+    pinLoad = 1;
+    }
+
+/***************************************************************************
+*   main()
+***************************************************************************/
+int main() {
+    /* Variablen initialisieren */    
+    bIdx = 0;
+    bDigit = 0;
+    bLedShield = 0x00;
+    while(1){
+        vCheckTasten();
+        //wSerial = ???;            /* 7-Segmentziffer bestimmen */
+        vShiftLoad(wSerial          /* Segmente verschieben und Digit festlegen */);
+        //bLedShield = ???          /* Bargraph bestimmen */
+        wait_us(10000);
+        }
+    }