Buttons work :D
Dependencies: mbed
main.cpp
00001 /*************************************************************************** 00002 * Titel : main.c 00003 * 00004 * Description : Labormodul "DIBI" 00005 * 00006 * Revision List: 00007 -------------------------------------------------------------------------- 00008 Date | Author | Change 00009 -------------------------------------------------------------------------- 00010 24.10.22 | J. Altenburg | Ersterstellung 00011 -------------------------------------------------------------------------- 00012 | | 00013 ---------------------------------------------------------------------------- 00014 ****************************************************************************/ 00015 #include "mbed.h" 00016 #include "cdef.h" 00017 00018 /* Vereinbarungen zu den Tasteneingängen */ 00019 DigitalIn pinS1(A1); 00020 DigitalIn pinS2(A2); 00021 DigitalIn pinS3(A3); 00022 00023 BusOut bLedShield(D10, D11, D12, D13); 00024 00025 /* Anschlüsse der Schieberegister */ 00026 DigitalOut pinSdo(PA_9); 00027 DigitalOut pinSck(PA_8); 00028 DigitalOut pinLoad(PB_5); 00029 00030 /* ISR */ 00031 Ticker stTimer; 00032 00033 /*************************************************************************** 00034 * Defines und Makros * 00035 ***************************************************************************/ 00036 #define nTastShort 4 /* Taste 50 Millisekunden gedrückt */ 00037 #define nTastLong 150 /* Taste 1.5 Sekunden gedrückt */ 00038 00039 #define nSegA 0x01 00040 #define nSegB 0x02 00041 #define nSegC 0x04 00042 #define nSegD 0x08 00043 #define nSegE 0x10 00044 #define nSegF 0x20 00045 #define nSegG 0x40 00046 #define nSegH 0x80 00047 00048 #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF) 00049 #define nZiffer1 ~(nSegB | nSegC) 00050 #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG) 00051 #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG) 00052 #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG) 00053 #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG) 00054 #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG) 00055 #define nZiffer7 ~(nSegA | nSegB | nSegC) 00056 #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG) 00057 #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG) 00058 #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG) 00059 #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG) 00060 #define nZifferC ~(nSegA | nSegD | nSegE | nSegF) 00061 #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG) 00062 #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG) 00063 #define nZifferF ~(nSegA | nSegE | nSegF | nSegG) 00064 #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH) 00065 00066 byte bIdx; /* 00067 * Description : Index auf Ausgabe 00068 */ 00069 00070 byte bDigit; /* 00071 * Description : aktives Digit 00072 */ 00073 00074 byte bBargraph; /* 00075 * Description : Bargraph durchschalten 00076 */ 00077 00078 byte bS1Timer; /* 00079 * Description : Timer für Taste S1 00080 */ 00081 00082 byte bS2Timer; /* 00083 * Description : Timer für Taste S2 00084 */ 00085 00086 byte bS3Timer; /* 00087 * Description : Timer für Taste S3 00088 */ 00089 00090 word wSerial; /* 00091 * Description : serielles Ausgaberegister 00092 */ 00093 00094 /* Bitmuster */ 00095 const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff}; 00096 const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f}; 00097 00098 00099 /* Tastenabfrage */ 00100 void vTasteS1( void ){ 00101 if(pinS1 == 0){ /* User-Taste gedrückt */ 00102 if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ 00103 if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ 00104 //... 00105 } 00106 if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ 00107 if(bIdx > 0) bIdx--; 00108 else bIdx = 16; 00109 } 00110 bS1Timer++; 00111 } 00112 } 00113 else{ /* Taste nicht gedrückt */ 00114 if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ 00115 if(bIdx < 16) bIdx++; 00116 else bIdx = 0; 00117 } 00118 bS1Timer = 0; 00119 } 00120 } 00121 00122 void vTasteS2( void ){ 00123 if(pinS2 == 0){ /* User-Taste gedrückt */ 00124 if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ 00125 if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ 00126 //... 00127 } 00128 if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ 00129 if(bDigit > 0b00000001) bDigit = bDigit>>1; 00130 else bDigit = 0b00001000; 00131 } 00132 bS2Timer++; 00133 } 00134 } 00135 else{ /* Taste nicht gedrückt */ 00136 if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ 00137 if(bDigit < 0b00001000) bDigit = bDigit<<1; 00138 else bDigit = 0b00000001; 00139 } 00140 bS2Timer = 0; 00141 } 00142 } 00143 00144 void vTasteS3( void ){ 00145 if(pinS3 == 0){ /* User-Taste gedrückt */ 00146 if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ 00147 if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ 00148 //... 00149 } 00150 if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ 00151 bBargraph--; 00152 } 00153 bS3Timer++; 00154 } 00155 } 00156 else{ /* Taste nicht gedrückt */ 00157 if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ 00158 bBargraph++; 00159 } 00160 bS3Timer = 0; 00161 } 00162 } 00163 00164 00165 00166 void vCheckTasten( void ){ 00167 vTasteS1(); 00168 vTasteS2(); 00169 vTasteS3(); 00170 } 00171 00172 /* Ausschieben der 16 Bits für die Anzeige */ 00173 void vShiftLoad(word wLoad){ 00174 word wMask = Bit15; 00175 pinLoad = 0; 00176 while(wMask){ 00177 if(wMask & wLoad) pinSdo = 1; 00178 else pinSdo = 0; 00179 pinSck = 1; 00180 wMask >>= 1; 00181 pinSck = 0; 00182 } 00183 pinLoad = 1; 00184 } 00185 00186 /*************************************************************************** 00187 * main() 00188 ***************************************************************************/ 00189 int main() { 00190 /* Variablen initialisieren */ 00191 bIdx = 0; 00192 bDigit = 0b00000001; 00193 bLedShield = 0x00; 00194 while(1){ 00195 vCheckTasten(); 00196 wSerial = abZiffer[bIdx]<<8 | bDigit ; /* 7-Segmentziffer bestimmen */ 00197 vShiftLoad(wSerial); /* Segmente verschieben und Digit festlegen */ 00198 bLedShield = abBargraph[bBargraph & 0x03]; /* Bargraph bestimmen */ 00199 wait_us(10000); 00200 } 00201 }
Generated on Mon Nov 7 2022 14:49:25 by
1.7.2