Auf den letzten Metern
Dependencies: mbed
main.cpp@2:063b68bbc135, 23 months ago (annotated)
- Committer:
- alexander0707
- Date:
- Mon Nov 07 09:05:06 2022 +0000
- Revision:
- 2:063b68bbc135
- Parent:
- 1:d400ca81c517
- Child:
- 3:916c3a72cbd0
Version 02;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
prof_al | 0:5ac32d240694 | 1 | /*************************************************************************** |
prof_al | 0:5ac32d240694 | 2 | * Titel : main.c |
prof_al | 0:5ac32d240694 | 3 | * |
prof_al | 0:5ac32d240694 | 4 | * Description : Labormodul "DIBI" |
prof_al | 0:5ac32d240694 | 5 | * |
prof_al | 0:5ac32d240694 | 6 | * Revision List: |
prof_al | 0:5ac32d240694 | 7 | -------------------------------------------------------------------------- |
prof_al | 0:5ac32d240694 | 8 | Date | Author | Change |
prof_al | 0:5ac32d240694 | 9 | -------------------------------------------------------------------------- |
prof_al | 0:5ac32d240694 | 10 | 24.10.22 | J. Altenburg | Ersterstellung |
prof_al | 0:5ac32d240694 | 11 | -------------------------------------------------------------------------- |
prof_al | 0:5ac32d240694 | 12 | | | |
prof_al | 0:5ac32d240694 | 13 | ---------------------------------------------------------------------------- |
prof_al | 0:5ac32d240694 | 14 | ****************************************************************************/ |
prof_al | 0:5ac32d240694 | 15 | #include "mbed.h" |
prof_al | 0:5ac32d240694 | 16 | #include "cdef.h" |
prof_al | 0:5ac32d240694 | 17 | |
prof_al | 0:5ac32d240694 | 18 | /* Vereinbarungen zu den Tasteneingängen */ |
prof_al | 0:5ac32d240694 | 19 | DigitalIn pinS1(A1); |
prof_al | 0:5ac32d240694 | 20 | DigitalIn pinS2(A2); |
prof_al | 0:5ac32d240694 | 21 | DigitalIn pinS3(A3); |
prof_al | 0:5ac32d240694 | 22 | |
prof_al | 0:5ac32d240694 | 23 | BusOut bLedShield(D10, D11, D12, D13); |
prof_al | 0:5ac32d240694 | 24 | |
prof_al | 0:5ac32d240694 | 25 | /* Anschlüsse der Schieberegister */ |
prof_al | 0:5ac32d240694 | 26 | DigitalOut pinSdo(PA_9); |
prof_al | 0:5ac32d240694 | 27 | DigitalOut pinSck(PA_8); |
prof_al | 0:5ac32d240694 | 28 | DigitalOut pinLoad(PB_5); |
prof_al | 0:5ac32d240694 | 29 | |
prof_al | 0:5ac32d240694 | 30 | /* ISR */ |
prof_al | 0:5ac32d240694 | 31 | Ticker stTimer; |
prof_al | 0:5ac32d240694 | 32 | |
prof_al | 0:5ac32d240694 | 33 | /*************************************************************************** |
prof_al | 0:5ac32d240694 | 34 | * Defines und Makros * |
prof_al | 0:5ac32d240694 | 35 | ***************************************************************************/ |
prof_al | 0:5ac32d240694 | 36 | #define nTastShort 4 /* Taste 50 Millisekunden gedrückt */ |
prof_al | 0:5ac32d240694 | 37 | #define nTastLong 150 /* Taste 1.5 Sekunden gedrückt */ |
prof_al | 0:5ac32d240694 | 38 | |
prof_al | 0:5ac32d240694 | 39 | #define nSegA 0x01 |
prof_al | 0:5ac32d240694 | 40 | #define nSegB 0x02 |
prof_al | 0:5ac32d240694 | 41 | #define nSegC 0x04 |
prof_al | 0:5ac32d240694 | 42 | #define nSegD 0x08 |
prof_al | 0:5ac32d240694 | 43 | #define nSegE 0x10 |
prof_al | 0:5ac32d240694 | 44 | #define nSegF 0x20 |
prof_al | 0:5ac32d240694 | 45 | #define nSegG 0x40 |
prof_al | 0:5ac32d240694 | 46 | #define nSegH 0x80 |
prof_al | 0:5ac32d240694 | 47 | |
prof_al | 0:5ac32d240694 | 48 | #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF) |
prof_al | 0:5ac32d240694 | 49 | #define nZiffer1 ~(nSegB | nSegC) |
prof_al | 0:5ac32d240694 | 50 | #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG) |
prof_al | 0:5ac32d240694 | 51 | #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG) |
prof_al | 0:5ac32d240694 | 52 | #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 53 | #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 54 | #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 55 | #define nZiffer7 ~(nSegA | nSegB | nSegC) |
prof_al | 0:5ac32d240694 | 56 | #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 57 | #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 58 | #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 59 | #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 60 | #define nZifferC ~(nSegA | nSegD | nSegE | nSegF) |
prof_al | 0:5ac32d240694 | 61 | #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG) |
prof_al | 0:5ac32d240694 | 62 | #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 63 | #define nZifferF ~(nSegA | nSegE | nSegF | nSegG) |
prof_al | 0:5ac32d240694 | 64 | #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH) |
prof_al | 0:5ac32d240694 | 65 | |
prof_al | 0:5ac32d240694 | 66 | byte bIdx; /* |
prof_al | 0:5ac32d240694 | 67 | * Description : Index auf Ausgabe |
prof_al | 0:5ac32d240694 | 68 | */ |
prof_al | 0:5ac32d240694 | 69 | |
prof_al | 0:5ac32d240694 | 70 | byte bDigit; /* |
prof_al | 0:5ac32d240694 | 71 | * Description : aktives Digit |
prof_al | 0:5ac32d240694 | 72 | */ |
prof_al | 0:5ac32d240694 | 73 | |
prof_al | 0:5ac32d240694 | 74 | byte bBargraph; /* |
prof_al | 0:5ac32d240694 | 75 | * Description : Bargraph durchschalten |
prof_al | 0:5ac32d240694 | 76 | */ |
prof_al | 0:5ac32d240694 | 77 | |
prof_al | 0:5ac32d240694 | 78 | byte bS1Timer; /* |
prof_al | 0:5ac32d240694 | 79 | * Description : Timer für Taste S1 |
prof_al | 0:5ac32d240694 | 80 | */ |
prof_al | 0:5ac32d240694 | 81 | |
prof_al | 0:5ac32d240694 | 82 | byte bS2Timer; /* |
prof_al | 0:5ac32d240694 | 83 | * Description : Timer für Taste S2 |
prof_al | 0:5ac32d240694 | 84 | */ |
prof_al | 0:5ac32d240694 | 85 | |
prof_al | 0:5ac32d240694 | 86 | byte bS3Timer; /* |
prof_al | 0:5ac32d240694 | 87 | * Description : Timer für Taste S3 |
prof_al | 0:5ac32d240694 | 88 | */ |
prof_al | 0:5ac32d240694 | 89 | |
prof_al | 0:5ac32d240694 | 90 | word wSerial; /* |
prof_al | 0:5ac32d240694 | 91 | * Description : serielles Ausgaberegister |
prof_al | 0:5ac32d240694 | 92 | */ |
prof_al | 0:5ac32d240694 | 93 | |
prof_al | 0:5ac32d240694 | 94 | /* Bitmuster */ |
prof_al | 0:5ac32d240694 | 95 | const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff}; |
prof_al | 0:5ac32d240694 | 96 | const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f}; |
prof_al | 0:5ac32d240694 | 97 | |
prof_al | 0:5ac32d240694 | 98 | |
prof_al | 0:5ac32d240694 | 99 | /* Tastenabfrage */ |
prof_al | 0:5ac32d240694 | 100 | void vTasteS1( void ){ |
prof_al | 0:5ac32d240694 | 101 | if(pinS1 == 0){ /* User-Taste gedrückt */ |
prof_al | 0:5ac32d240694 | 102 | if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
prof_al | 0:5ac32d240694 | 103 | if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
prof_al | 0:5ac32d240694 | 104 | //... |
prof_al | 0:5ac32d240694 | 105 | } |
prof_al | 0:5ac32d240694 | 106 | if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
prof_al | 0:5ac32d240694 | 107 | bIdx--; |
prof_al | 0:5ac32d240694 | 108 | } |
prof_al | 0:5ac32d240694 | 109 | bS1Timer++; |
prof_al | 0:5ac32d240694 | 110 | } |
prof_al | 0:5ac32d240694 | 111 | } |
prof_al | 0:5ac32d240694 | 112 | else{ /* Taste nicht gedrückt */ |
prof_al | 0:5ac32d240694 | 113 | if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
prof_al | 0:5ac32d240694 | 114 | bIdx++; |
prof_al | 0:5ac32d240694 | 115 | } |
prof_al | 0:5ac32d240694 | 116 | bS1Timer = 0; |
prof_al | 0:5ac32d240694 | 117 | } |
prof_al | 0:5ac32d240694 | 118 | } |
prof_al | 0:5ac32d240694 | 119 | |
prof_al | 0:5ac32d240694 | 120 | void vTasteS2( void ){ |
alexander0707 | 1:d400ca81c517 | 121 | if(pinS2 == 0){ /* User-Taste gedrückt */ |
alexander0707 | 1:d400ca81c517 | 122 | if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
alexander0707 | 1:d400ca81c517 | 123 | if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
alexander0707 | 1:d400ca81c517 | 124 | //... |
alexander0707 | 1:d400ca81c517 | 125 | } |
alexander0707 | 1:d400ca81c517 | 126 | if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
alexander0707 | 2:063b68bbc135 | 127 | if(bDigit <= 0x08 || bDigit > 0x01) bDigit>>1; |
alexander0707 | 2:063b68bbc135 | 128 | else bDigit = 0b00001000; |
alexander0707 | 1:d400ca81c517 | 129 | } |
alexander0707 | 1:d400ca81c517 | 130 | bS2Timer++; |
alexander0707 | 1:d400ca81c517 | 131 | } |
alexander0707 | 1:d400ca81c517 | 132 | } |
alexander0707 | 1:d400ca81c517 | 133 | else{ /* Taste nicht gedrückt */ |
alexander0707 | 1:d400ca81c517 | 134 | if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
alexander0707 | 2:063b68bbc135 | 135 | if(bDigit < 0x08 || bDigit >= 0x01) bDigit<<1; |
alexander0707 | 2:063b68bbc135 | 136 | else bDigit = 0b00000001; |
alexander0707 | 1:d400ca81c517 | 137 | } |
alexander0707 | 1:d400ca81c517 | 138 | bS2Timer = 0; |
alexander0707 | 1:d400ca81c517 | 139 | } |
prof_al | 0:5ac32d240694 | 140 | } |
prof_al | 0:5ac32d240694 | 141 | |
prof_al | 0:5ac32d240694 | 142 | void vTasteS3( void ){ |
alexander0707 | 1:d400ca81c517 | 143 | if(pinS3 == 0){ /* User-Taste gedrückt */ |
alexander0707 | 1:d400ca81c517 | 144 | if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
alexander0707 | 1:d400ca81c517 | 145 | if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
alexander0707 | 1:d400ca81c517 | 146 | //... |
alexander0707 | 1:d400ca81c517 | 147 | } |
alexander0707 | 1:d400ca81c517 | 148 | if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
alexander0707 | 1:d400ca81c517 | 149 | bBargraph--; |
alexander0707 | 1:d400ca81c517 | 150 | } |
alexander0707 | 1:d400ca81c517 | 151 | bS3Timer++; |
alexander0707 | 1:d400ca81c517 | 152 | } |
alexander0707 | 1:d400ca81c517 | 153 | } |
alexander0707 | 1:d400ca81c517 | 154 | else{ /* Taste nicht gedrückt */ |
alexander0707 | 1:d400ca81c517 | 155 | if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
alexander0707 | 1:d400ca81c517 | 156 | bBargraph++; |
alexander0707 | 1:d400ca81c517 | 157 | } |
alexander0707 | 1:d400ca81c517 | 158 | bS3Timer = 0; |
alexander0707 | 1:d400ca81c517 | 159 | } |
prof_al | 0:5ac32d240694 | 160 | } |
prof_al | 0:5ac32d240694 | 161 | |
prof_al | 0:5ac32d240694 | 162 | |
prof_al | 0:5ac32d240694 | 163 | |
prof_al | 0:5ac32d240694 | 164 | void vCheckTasten( void ){ |
prof_al | 0:5ac32d240694 | 165 | vTasteS1(); |
prof_al | 0:5ac32d240694 | 166 | vTasteS2(); |
prof_al | 0:5ac32d240694 | 167 | vTasteS3(); |
prof_al | 0:5ac32d240694 | 168 | } |
prof_al | 0:5ac32d240694 | 169 | |
prof_al | 0:5ac32d240694 | 170 | /* Ausschieben der 16 Bits für die Anzeige */ |
prof_al | 0:5ac32d240694 | 171 | void vShiftLoad(word wLoad){ |
prof_al | 0:5ac32d240694 | 172 | word wMask = Bit15; |
prof_al | 0:5ac32d240694 | 173 | pinLoad = 0; |
prof_al | 0:5ac32d240694 | 174 | while(wMask){ |
prof_al | 0:5ac32d240694 | 175 | if(wMask & wLoad) pinSdo = 1; |
prof_al | 0:5ac32d240694 | 176 | else pinSdo = 0; |
prof_al | 0:5ac32d240694 | 177 | pinSck = 1; |
prof_al | 0:5ac32d240694 | 178 | wMask >>= 1; |
prof_al | 0:5ac32d240694 | 179 | pinSck = 0; |
prof_al | 0:5ac32d240694 | 180 | } |
prof_al | 0:5ac32d240694 | 181 | pinLoad = 1; |
prof_al | 0:5ac32d240694 | 182 | } |
prof_al | 0:5ac32d240694 | 183 | |
prof_al | 0:5ac32d240694 | 184 | /*************************************************************************** |
prof_al | 0:5ac32d240694 | 185 | * main() |
prof_al | 0:5ac32d240694 | 186 | ***************************************************************************/ |
prof_al | 0:5ac32d240694 | 187 | int main() { |
prof_al | 0:5ac32d240694 | 188 | /* Variablen initialisieren */ |
prof_al | 0:5ac32d240694 | 189 | bIdx = 0; |
alexander0707 | 1:d400ca81c517 | 190 | bDigit = 0b00000001; |
prof_al | 0:5ac32d240694 | 191 | bLedShield = 0x00; |
prof_al | 0:5ac32d240694 | 192 | while(1){ |
prof_al | 0:5ac32d240694 | 193 | vCheckTasten(); |
alexander0707 | 1:d400ca81c517 | 194 | wSerial = abZiffer[bIdx & 0x0f]<<8 | bDigit ; /* 7-Segmentziffer bestimmen */ |
alexander0707 | 1:d400ca81c517 | 195 | vShiftLoad(wSerial); /* Segmente verschieben und Digit festlegen */ |
alexander0707 | 1:d400ca81c517 | 196 | bLedShield = abBargraph[bBargraph & 0x03]; /* Bargraph bestimmen */ |
prof_al | 0:5ac32d240694 | 197 | wait_us(10000); |
prof_al | 0:5ac32d240694 | 198 | } |
prof_al | 0:5ac32d240694 | 199 | } |