Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@2:aa141c404210, 2022-11-20 (annotated)
- Committer:
- alexander0707
- Date:
- Sun Nov 20 13:39:20 2022 +0000
- Revision:
- 2:aa141c404210
- Parent:
- 1:ff198413587f
- Child:
- 3:d6379f763d9b
Funktioniert_v02
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| alexander0707 | 0:94f9242d336c | 1 | /*************************************************************************** |
| alexander0707 | 0:94f9242d336c | 2 | * Titel : main.c |
| alexander0707 | 0:94f9242d336c | 3 | * |
| alexander0707 | 0:94f9242d336c | 4 | * Description : Labormodul "DIBI" |
| alexander0707 | 0:94f9242d336c | 5 | * |
| alexander0707 | 0:94f9242d336c | 6 | * Revision List: |
| alexander0707 | 0:94f9242d336c | 7 | -------------------------------------------------------------------------- |
| alexander0707 | 0:94f9242d336c | 8 | Date | Author | Change |
| alexander0707 | 0:94f9242d336c | 9 | -------------------------------------------------------------------------- |
| alexander0707 | 0:94f9242d336c | 10 | 24.10.22 | J. Altenburg | Ersterstellung |
| alexander0707 | 0:94f9242d336c | 11 | -------------------------------------------------------------------------- |
| alexander0707 | 0:94f9242d336c | 12 | | | |
| alexander0707 | 0:94f9242d336c | 13 | ---------------------------------------------------------------------------- |
| alexander0707 | 0:94f9242d336c | 14 | ****************************************************************************/ |
| alexander0707 | 0:94f9242d336c | 15 | #include "mbed.h" |
| alexander0707 | 0:94f9242d336c | 16 | #include "cdef.h" |
| alexander0707 | 0:94f9242d336c | 17 | |
| alexander0707 | 0:94f9242d336c | 18 | /* Vereinbarungen zu den Tasteneingängen */ |
| alexander0707 | 0:94f9242d336c | 19 | DigitalIn pinS1(A1); |
| alexander0707 | 0:94f9242d336c | 20 | DigitalIn pinS2(A2); |
| alexander0707 | 0:94f9242d336c | 21 | DigitalIn pinS3(A3); |
| alexander0707 | 0:94f9242d336c | 22 | |
| alexander0707 | 0:94f9242d336c | 23 | BusOut bLedShield(D10, D11, D12, D13); |
| alexander0707 | 0:94f9242d336c | 24 | |
| alexander0707 | 0:94f9242d336c | 25 | /* Anschlüsse der Schieberegister */ |
| alexander0707 | 0:94f9242d336c | 26 | DigitalOut pinSdo(PA_9); |
| alexander0707 | 0:94f9242d336c | 27 | DigitalOut pinSck(PA_8); |
| alexander0707 | 0:94f9242d336c | 28 | DigitalOut pinLoad(PB_5); |
| alexander0707 | 1:ff198413587f | 29 | DigitalOut pinBeep(PB_3); |
| alexander0707 | 0:94f9242d336c | 30 | |
| alexander0707 | 0:94f9242d336c | 31 | /* ISR */ |
| alexander0707 | 0:94f9242d336c | 32 | Ticker stTimer; |
| alexander0707 | 0:94f9242d336c | 33 | |
| alexander0707 | 0:94f9242d336c | 34 | /*************************************************************************** |
| alexander0707 | 0:94f9242d336c | 35 | * Defines und Makros * |
| alexander0707 | 0:94f9242d336c | 36 | ***************************************************************************/ |
| alexander0707 | 0:94f9242d336c | 37 | #define nTastShort 4 /* Taste 50 Millisekunden gedrückt */ |
| alexander0707 | 0:94f9242d336c | 38 | #define nTastLong 150 /* Taste 1.5 Sekunden gedrückt */ |
| alexander0707 | 0:94f9242d336c | 39 | |
| alexander0707 | 0:94f9242d336c | 40 | #define nSegA 0x01 |
| alexander0707 | 0:94f9242d336c | 41 | #define nSegB 0x02 |
| alexander0707 | 0:94f9242d336c | 42 | #define nSegC 0x04 |
| alexander0707 | 0:94f9242d336c | 43 | #define nSegD 0x08 |
| alexander0707 | 0:94f9242d336c | 44 | #define nSegE 0x10 |
| alexander0707 | 0:94f9242d336c | 45 | #define nSegF 0x20 |
| alexander0707 | 0:94f9242d336c | 46 | #define nSegG 0x40 |
| alexander0707 | 0:94f9242d336c | 47 | #define nSegH 0x80 |
| alexander0707 | 0:94f9242d336c | 48 | |
| alexander0707 | 0:94f9242d336c | 49 | #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF) |
| alexander0707 | 0:94f9242d336c | 50 | #define nZiffer1 ~(nSegB | nSegC) |
| alexander0707 | 0:94f9242d336c | 51 | #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG) |
| alexander0707 | 0:94f9242d336c | 52 | #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG) |
| alexander0707 | 0:94f9242d336c | 53 | #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 54 | #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 55 | #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 56 | #define nZiffer7 ~(nSegA | nSegB | nSegC) |
| alexander0707 | 0:94f9242d336c | 57 | #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 58 | #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 59 | #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 60 | #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 61 | #define nZifferC ~(nSegA | nSegD | nSegE | nSegF) |
| alexander0707 | 0:94f9242d336c | 62 | #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG) |
| alexander0707 | 0:94f9242d336c | 63 | #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 64 | #define nZifferF ~(nSegA | nSegE | nSegF | nSegG) |
| alexander0707 | 0:94f9242d336c | 65 | #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH) |
| alexander0707 | 0:94f9242d336c | 66 | |
| alexander0707 | 0:94f9242d336c | 67 | byte bIdx; /* |
| alexander0707 | 0:94f9242d336c | 68 | * Description : Index auf Ausgabe |
| alexander0707 | 0:94f9242d336c | 69 | */ |
| alexander0707 | 0:94f9242d336c | 70 | |
| alexander0707 | 0:94f9242d336c | 71 | byte bDigit; /* |
| alexander0707 | 0:94f9242d336c | 72 | * Description : aktives Digit |
| alexander0707 | 0:94f9242d336c | 73 | */ |
| alexander0707 | 0:94f9242d336c | 74 | |
| alexander0707 | 0:94f9242d336c | 75 | byte bBargraph; /* |
| alexander0707 | 0:94f9242d336c | 76 | * Description : Bargraph durchschalten |
| alexander0707 | 0:94f9242d336c | 77 | */ |
| alexander0707 | 0:94f9242d336c | 78 | |
| alexander0707 | 0:94f9242d336c | 79 | byte bS1Timer; /* |
| alexander0707 | 0:94f9242d336c | 80 | * Description : Timer für Taste S1 |
| alexander0707 | 0:94f9242d336c | 81 | */ |
| alexander0707 | 0:94f9242d336c | 82 | |
| alexander0707 | 0:94f9242d336c | 83 | byte bS2Timer; /* |
| alexander0707 | 0:94f9242d336c | 84 | * Description : Timer für Taste S2 |
| alexander0707 | 0:94f9242d336c | 85 | */ |
| alexander0707 | 0:94f9242d336c | 86 | |
| alexander0707 | 0:94f9242d336c | 87 | byte bS3Timer; /* |
| alexander0707 | 0:94f9242d336c | 88 | * Description : Timer für Taste S3 |
| alexander0707 | 0:94f9242d336c | 89 | */ |
| alexander0707 | 0:94f9242d336c | 90 | |
| alexander0707 | 1:ff198413587f | 91 | byte bDisplayState; /* |
| alexander0707 | 1:ff198413587f | 92 | * Description : |
| alexander0707 | 1:ff198413587f | 93 | */ |
| alexander0707 | 1:ff198413587f | 94 | const byte enWaitForStart=0x00; |
| alexander0707 | 1:ff198413587f | 95 | const byte enRunClock = 0x01; |
| alexander0707 | 1:ff198413587f | 96 | const byte enShowResult = 0x02; |
| alexander0707 | 1:ff198413587f | 97 | const byte enShowError = 0x03; |
| alexander0707 | 1:ff198413587f | 98 | const byte enWaitForRun = 0x04; |
| alexander0707 | 1:ff198413587f | 99 | |
| alexander0707 | 1:ff198413587f | 100 | |
| alexander0707 | 1:ff198413587f | 101 | byte bState; /* |
| alexander0707 | 1:ff198413587f | 102 | * Description : |
| alexander0707 | 1:ff198413587f | 103 | */ |
| alexander0707 | 1:ff198413587f | 104 | |
| alexander0707 | 1:ff198413587f | 105 | byte bTimerDot; /* |
| alexander0707 | 1:ff198413587f | 106 | * Description : Zähler für Dots |
| alexander0707 | 1:ff198413587f | 107 | */ |
| alexander0707 | 1:ff198413587f | 108 | |
| alexander0707 | 1:ff198413587f | 109 | byte bHotKey; /* |
| alexander0707 | 1:ff198413587f | 110 | * Description : Auswahl der Taste |
| alexander0707 | 1:ff198413587f | 111 | */ |
| alexander0707 | 1:ff198413587f | 112 | |
| alexander0707 | 1:ff198413587f | 113 | byte bDisplayDot; /* |
| alexander0707 | 1:ff198413587f | 114 | * Description : |
| alexander0707 | 1:ff198413587f | 115 | */ |
| alexander0707 | 1:ff198413587f | 116 | |
| alexander0707 | 1:ff198413587f | 117 | byte bMainState; /* |
| alexander0707 | 1:ff198413587f | 118 | * Description : Hauptzustand |
| alexander0707 | 1:ff198413587f | 119 | */ |
| alexander0707 | 1:ff198413587f | 120 | |
| alexander0707 | 1:ff198413587f | 121 | byte bBeepTime; /* |
| alexander0707 | 1:ff198413587f | 122 | * Description : Tondauer |
| alexander0707 | 1:ff198413587f | 123 | */ |
| alexander0707 | 1:ff198413587f | 124 | |
| alexander0707 | 1:ff198413587f | 125 | |
| alexander0707 | 0:94f9242d336c | 126 | word wSerial; /* |
| alexander0707 | 0:94f9242d336c | 127 | * Description : serielles Ausgaberegister |
| alexander0707 | 0:94f9242d336c | 128 | */ |
| alexander0707 | 0:94f9242d336c | 129 | |
| alexander0707 | 1:ff198413587f | 130 | word wClockTime; /* |
| alexander0707 | 1:ff198413587f | 131 | *Description : Timer für verstrichene Zeit |
| alexander0707 | 1:ff198413587f | 132 | */ |
| alexander0707 | 1:ff198413587f | 133 | |
| alexander0707 | 1:ff198413587f | 134 | word wClockShow; /* |
| alexander0707 | 1:ff198413587f | 135 | *Description : Timer für verstrichene Zeit |
| alexander0707 | 1:ff198413587f | 136 | */ |
| alexander0707 | 1:ff198413587f | 137 | |
| alexander0707 | 1:ff198413587f | 138 | word wDelayGame; /* |
| alexander0707 | 1:ff198413587f | 139 | * Description : Verzögerungstimer |
| alexander0707 | 1:ff198413587f | 140 | */ |
| alexander0707 | 1:ff198413587f | 141 | |
| alexander0707 | 0:94f9242d336c | 142 | /* Bitmuster */ |
| alexander0707 | 0:94f9242d336c | 143 | const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff}; |
| alexander0707 | 0:94f9242d336c | 144 | const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f}; |
| alexander0707 | 0:94f9242d336c | 145 | |
| alexander0707 | 0:94f9242d336c | 146 | |
| alexander0707 | 0:94f9242d336c | 147 | void vShiftLoad(word wLoad){ |
| alexander0707 | 0:94f9242d336c | 148 | word wMask = Bit15; |
| alexander0707 | 0:94f9242d336c | 149 | pinLoad = 0; |
| alexander0707 | 0:94f9242d336c | 150 | while(wMask){ |
| alexander0707 | 0:94f9242d336c | 151 | if(wMask & wLoad) pinSdo = 1; |
| alexander0707 | 0:94f9242d336c | 152 | else pinSdo = 0; |
| alexander0707 | 0:94f9242d336c | 153 | pinSck = 1; |
| alexander0707 | 0:94f9242d336c | 154 | wMask >>= 1; |
| alexander0707 | 0:94f9242d336c | 155 | pinSck = 0; |
| alexander0707 | 0:94f9242d336c | 156 | } |
| alexander0707 | 0:94f9242d336c | 157 | pinLoad = 1; |
| alexander0707 | 0:94f9242d336c | 158 | } |
| alexander0707 | 0:94f9242d336c | 159 | |
| alexander0707 | 1:ff198413587f | 160 | |
| alexander0707 | 1:ff198413587f | 161 | byte abDisplayMemory[] = {16,16,16,16}; /* alle Segmente aus */ |
| alexander0707 | 1:ff198413587f | 162 | |
| alexander0707 | 1:ff198413587f | 163 | void vDisplayClock( word w ) |
| alexander0707 | 1:ff198413587f | 164 | { |
| alexander0707 | 1:ff198413587f | 165 | int16 v; |
| alexander0707 | 1:ff198413587f | 166 | abDisplayMemory[0] = 16; /* Aus */ |
| alexander0707 | 1:ff198413587f | 167 | v = (byte)(w / 100); |
| alexander0707 | 1:ff198413587f | 168 | abDisplayMemory[1] = v; /* Hunderter */ |
| alexander0707 | 1:ff198413587f | 169 | w = w - (v * 100); |
| alexander0707 | 1:ff198413587f | 170 | v = (byte)(w / 10); |
| alexander0707 | 1:ff198413587f | 171 | abDisplayMemory[2] = v; /* Zehner */ |
| alexander0707 | 1:ff198413587f | 172 | w = w - (v * 10); |
| alexander0707 | 1:ff198413587f | 173 | abDisplayMemory[3] = (byte)w; /* Einer */ |
| alexander0707 | 1:ff198413587f | 174 | } |
| alexander0707 | 1:ff198413587f | 175 | |
| alexander0707 | 1:ff198413587f | 176 | void vSetWaitForStart( void ) |
| alexander0707 | 1:ff198413587f | 177 | { |
| alexander0707 | 1:ff198413587f | 178 | abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */ |
| alexander0707 | 1:ff198413587f | 179 | abDisplayMemory[1] = 16; |
| alexander0707 | 1:ff198413587f | 180 | abDisplayMemory[2] = 16; |
| alexander0707 | 1:ff198413587f | 181 | abDisplayMemory[3] = 16; |
| alexander0707 | 1:ff198413587f | 182 | bDisplayState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 183 | bTimerDot = 0; |
| alexander0707 | 1:ff198413587f | 184 | bDigit = 0; |
| alexander0707 | 1:ff198413587f | 185 | } |
| alexander0707 | 1:ff198413587f | 186 | |
| alexander0707 | 1:ff198413587f | 187 | void vSetRunClock( void ) |
| alexander0707 | 1:ff198413587f | 188 | { |
| alexander0707 | 1:ff198413587f | 189 | wClockTime = 0; |
| alexander0707 | 1:ff198413587f | 190 | bDigit = 0; |
| alexander0707 | 1:ff198413587f | 191 | abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */ |
| alexander0707 | 1:ff198413587f | 192 | abDisplayMemory[1] = 0; |
| alexander0707 | 1:ff198413587f | 193 | abDisplayMemory[2] = 0; |
| alexander0707 | 1:ff198413587f | 194 | abDisplayMemory[3] = 0; |
| alexander0707 | 1:ff198413587f | 195 | bDisplayState = enRunClock; |
| alexander0707 | 1:ff198413587f | 196 | } |
| alexander0707 | 1:ff198413587f | 197 | |
| alexander0707 | 1:ff198413587f | 198 | byte bCheckTasten( byte bState ) |
| alexander0707 | 1:ff198413587f | 199 | { |
| alexander0707 | 1:ff198413587f | 200 | if((pinS1 == 0) || (pinS2 == 0) || (pinS3 == 0)) { /* Tastendruck erkannt */ |
| alexander0707 | 1:ff198413587f | 201 | wClockShow = 1200; |
| alexander0707 | 1:ff198413587f | 202 | if((pinS1 == 0) && (bHotKey == 0)) { |
| alexander0707 | 1:ff198413587f | 203 | wDelayGame = 0; |
| alexander0707 | 1:ff198413587f | 204 | bState = enShowResult; |
| alexander0707 | 1:ff198413587f | 205 | bDisplayState = enShowResult; |
| alexander0707 | 1:ff198413587f | 206 | } else if((pinS2 == 0) && (bHotKey == 1)) { |
| alexander0707 | 1:ff198413587f | 207 | wDelayGame = 0; |
| alexander0707 | 1:ff198413587f | 208 | bState = enShowResult; |
| alexander0707 | 1:ff198413587f | 209 | bDisplayState = enShowResult; |
| alexander0707 | 1:ff198413587f | 210 | } else if((pinS3 == 0) && (bHotKey == 2)) { |
| alexander0707 | 1:ff198413587f | 211 | wDelayGame = 0; |
| alexander0707 | 1:ff198413587f | 212 | bState = enShowResult; |
| alexander0707 | 1:ff198413587f | 213 | bDisplayState = enShowResult; |
| alexander0707 | 1:ff198413587f | 214 | } else { |
| alexander0707 | 1:ff198413587f | 215 | wDelayGame = 200; |
| alexander0707 | 1:ff198413587f | 216 | abDisplayMemory[1] = 15; |
| alexander0707 | 1:ff198413587f | 217 | abDisplayMemory[2] = 15; |
| alexander0707 | 1:ff198413587f | 218 | abDisplayMemory[3] = 15; |
| alexander0707 | 1:ff198413587f | 219 | bState = enShowError; |
| alexander0707 | 1:ff198413587f | 220 | bDisplayState = enShowResult; |
| alexander0707 | 1:ff198413587f | 221 | pinBeep = 0; |
| alexander0707 | 1:ff198413587f | 222 | } |
| alexander0707 | 1:ff198413587f | 223 | } |
| alexander0707 | 1:ff198413587f | 224 | return bState; |
| alexander0707 | 1:ff198413587f | 225 | } |
| alexander0707 | 1:ff198413587f | 226 | |
| alexander0707 | 1:ff198413587f | 227 | void vSegmentDigit( void ) |
| alexander0707 | 1:ff198413587f | 228 | { |
| alexander0707 | 1:ff198413587f | 229 | bDigit++; |
| alexander0707 | 1:ff198413587f | 230 | wSerial = abZiffer[abDisplayMemory[bDigit&0x03]]; |
| alexander0707 | 1:ff198413587f | 231 | switch(bDisplayState) { |
| alexander0707 | 1:ff198413587f | 232 | case enWaitForStart: |
| alexander0707 | 1:ff198413587f | 233 | bTimerDot++; /* Zähler für Punktwechsel */ |
| alexander0707 | 1:ff198413587f | 234 | if(bTimerDot == 50) { |
| alexander0707 | 1:ff198413587f | 235 | bTimerDot = 0; |
| alexander0707 | 1:ff198413587f | 236 | bDisplayDot = (bDisplayDot + 1) & 0x03; |
| alexander0707 | 1:ff198413587f | 237 | } |
| alexander0707 | 1:ff198413587f | 238 | if(bDisplayDot == (bDigit&0x03)) { |
| alexander0707 | 1:ff198413587f | 239 | wSerial = wSerial & ~nSegH; /* Punktanzeigen */ |
| alexander0707 | 1:ff198413587f | 240 | } |
| alexander0707 | 1:ff198413587f | 241 | break; |
| alexander0707 | 1:ff198413587f | 242 | case enRunClock: |
| alexander0707 | 1:ff198413587f | 243 | if((bDigit&0x03) == 0x03){ /* Ablauf von 10 ms */ |
| alexander0707 | 1:ff198413587f | 244 | wClockTime++; |
| alexander0707 | 1:ff198413587f | 245 | if(wClockTime > 999) { |
| alexander0707 | 1:ff198413587f | 246 | wClockTime = 0; |
| alexander0707 | 1:ff198413587f | 247 | } |
| alexander0707 | 1:ff198413587f | 248 | vDisplayClock(wClockTime); |
| alexander0707 | 1:ff198413587f | 249 | } |
| alexander0707 | 1:ff198413587f | 250 | if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */ |
| alexander0707 | 1:ff198413587f | 251 | wSerial = wSerial & ~nSegH; |
| alexander0707 | 1:ff198413587f | 252 | } |
| alexander0707 | 1:ff198413587f | 253 | break; |
| alexander0707 | 1:ff198413587f | 254 | case enShowResult: |
| alexander0707 | 1:ff198413587f | 255 | if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */ |
| alexander0707 | 1:ff198413587f | 256 | wSerial = wSerial & ~nSegH; |
| alexander0707 | 1:ff198413587f | 257 | } |
| alexander0707 | 1:ff198413587f | 258 | break; |
| alexander0707 | 1:ff198413587f | 259 | } |
| alexander0707 | 1:ff198413587f | 260 | vShiftLoad(((wSerial << 8) & 0xfff0)| (1 << (bDigit&0x03))); |
| alexander0707 | 1:ff198413587f | 261 | } |
| alexander0707 | 1:ff198413587f | 262 | |
| alexander0707 | 1:ff198413587f | 263 | void vBargraph(byte bTaste){ |
| alexander0707 | 1:ff198413587f | 264 | switch(bTaste){ |
| alexander0707 | 1:ff198413587f | 265 | case 0 : |
| alexander0707 | 1:ff198413587f | 266 | bLedShield =0b1110; |
| alexander0707 | 1:ff198413587f | 267 | break; |
| alexander0707 | 1:ff198413587f | 268 | case 1 : |
| alexander0707 | 1:ff198413587f | 269 | bLedShield =0b1101; |
| alexander0707 | 1:ff198413587f | 270 | break; |
| alexander0707 | 1:ff198413587f | 271 | case 2 : |
| alexander0707 | 1:ff198413587f | 272 | bLedShield =0b1011; |
| alexander0707 | 1:ff198413587f | 273 | break; |
| alexander0707 | 1:ff198413587f | 274 | } |
| alexander0707 | 1:ff198413587f | 275 | } |
| alexander0707 | 1:ff198413587f | 276 | |
| alexander0707 | 0:94f9242d336c | 277 | /*************************************************************************** |
| alexander0707 | 0:94f9242d336c | 278 | * main() |
| alexander0707 | 0:94f9242d336c | 279 | ***************************************************************************/ |
| alexander0707 | 0:94f9242d336c | 280 | int main() { |
| alexander0707 | 0:94f9242d336c | 281 | /* Variablen initialisieren */ |
| alexander0707 | 1:ff198413587f | 282 | byte bRandomTaste = 0; |
| alexander0707 | 1:ff198413587f | 283 | word wRandomClock = 0; |
| alexander0707 | 1:ff198413587f | 284 | bMainState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 285 | bDisplayState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 286 | pinBeep = 1; |
| alexander0707 | 1:ff198413587f | 287 | vSetWaitForStart(); |
| alexander0707 | 1:ff198413587f | 288 | |
| alexander0707 | 1:ff198413587f | 289 | while(1) { |
| alexander0707 | 0:94f9242d336c | 290 | bRandomTaste++; |
| alexander0707 | 0:94f9242d336c | 291 | if(bRandomTaste > 2) bRandomTaste = 0; /* zufällige LED/Taste bestimmen */ |
| alexander0707 | 0:94f9242d336c | 292 | wRandomClock++; |
| alexander0707 | 0:94f9242d336c | 293 | if(wRandomClock > 800) wRandomClock = 0; /* Zufallszeit erzeugen */ |
| alexander0707 | 0:94f9242d336c | 294 | switch(bMainState) { |
| alexander0707 | 0:94f9242d336c | 295 | case enWaitForStart: |
| alexander0707 | 0:94f9242d336c | 296 | wDelayGame++; |
| alexander0707 | 1:ff198413587f | 297 | bLedShield =0b1111; |
| alexander0707 | 0:94f9242d336c | 298 | if(wDelayGame > 1200) { /* 3 Sekundenminimum */ |
| alexander0707 | 0:94f9242d336c | 299 | wDelayGame = wRandomClock; |
| alexander0707 | 0:94f9242d336c | 300 | bMainState = enWaitForRun; |
| alexander0707 | 0:94f9242d336c | 301 | } |
| alexander0707 | 0:94f9242d336c | 302 | break; |
| alexander0707 | 0:94f9242d336c | 303 | case enRunClock: |
| alexander0707 | 0:94f9242d336c | 304 | bBeepTime--; |
| alexander0707 | 0:94f9242d336c | 305 | if(bBeepTime == 0)pinBeep = 1; |
| alexander0707 | 0:94f9242d336c | 306 | bMainState = bCheckTasten(enRunClock); |
| alexander0707 | 0:94f9242d336c | 307 | break; |
| alexander0707 | 0:94f9242d336c | 308 | case enWaitForRun: |
| alexander0707 | 1:ff198413587f | 309 | wDelayGame--; |
| alexander0707 | 1:ff198413587f | 310 | if(wDelayGame == 0){ |
| alexander0707 | 1:ff198413587f | 311 | bMainState = enRunClock; |
| alexander0707 | 1:ff198413587f | 312 | bDisplayState = enRunClock; |
| alexander0707 | 1:ff198413587f | 313 | bBeepTime = 20; |
| alexander0707 | 1:ff198413587f | 314 | bHotKey = bRandomTaste; |
| alexander0707 | 1:ff198413587f | 315 | vBargraph(bRandomTaste); |
| alexander0707 | 1:ff198413587f | 316 | vSetRunClock(); |
| alexander0707 | 1:ff198413587f | 317 | pinBeep = 0; |
| alexander0707 | 1:ff198413587f | 318 | } |
| alexander0707 | 0:94f9242d336c | 319 | break; |
| alexander0707 | 0:94f9242d336c | 320 | case enShowResult: |
| alexander0707 | 1:ff198413587f | 321 | wClockShow--; |
| alexander0707 | 1:ff198413587f | 322 | if(wClockShow==0){ |
| alexander0707 | 1:ff198413587f | 323 | bMainState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 324 | bDisplayState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 325 | vSetWaitForStart(); |
| alexander0707 | 1:ff198413587f | 326 | } |
| alexander0707 | 0:94f9242d336c | 327 | break; |
| alexander0707 | 0:94f9242d336c | 328 | case enShowError: |
| alexander0707 | 1:ff198413587f | 329 | wDelayGame--; |
| alexander0707 | 1:ff198413587f | 330 | if(wDelayGame == 0)pinBeep = 1; |
| alexander0707 | 1:ff198413587f | 331 | wClockShow--; |
| alexander0707 | 1:ff198413587f | 332 | if(wClockShow==0){ |
| alexander0707 | 1:ff198413587f | 333 | bMainState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 334 | bDisplayState = enWaitForStart; |
| alexander0707 | 1:ff198413587f | 335 | vSetWaitForStart(); |
| alexander0707 | 1:ff198413587f | 336 | } |
| alexander0707 | 0:94f9242d336c | 337 | break; |
| alexander0707 | 0:94f9242d336c | 338 | } |
| alexander0707 | 1:ff198413587f | 339 | vSegmentDigit(); |
| alexander0707 | 1:ff198413587f | 340 | wait_us(2500); |
| alexander0707 | 0:94f9242d336c | 341 | } |
| alexander0707 | 1:ff198413587f | 342 | } |