TH Bingen HAPO Labor 1, Prof. Altenburg, WS2022
Embed:
(wiki syntax)
Show/hide line numbers
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 bIdx--; 00108 } 00109 bS1Timer++; 00110 } 00111 } 00112 else{ /* Taste nicht gedrückt */ 00113 if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ 00114 bIdx++; 00115 } 00116 bS1Timer = 0; 00117 } 00118 } 00119 00120 void vTasteS2( void ){ 00121 } 00122 00123 void vTasteS3( void ){ 00124 } 00125 00126 00127 00128 void vCheckTasten( void ){ 00129 vTasteS1(); 00130 vTasteS2(); 00131 vTasteS3(); 00132 } 00133 00134 /* Ausschieben der 16 Bits für die Anzeige */ 00135 void vShiftLoad(word wLoad){ 00136 word wMask = Bit15; 00137 pinLoad = 0; 00138 while(wMask){ 00139 if(wMask & wLoad) pinSdo = 1; 00140 else pinSdo = 0; 00141 pinSck = 1; 00142 wMask >>= 1; 00143 pinSck = 0; 00144 } 00145 pinLoad = 1; 00146 } 00147 00148 /*************************************************************************** 00149 * main() 00150 ***************************************************************************/ 00151 int main() { 00152 /* Variablen initialisieren */ 00153 bIdx = 0; 00154 bDigit = 0; 00155 bLedShield = 0x00; 00156 while(1){ 00157 vCheckTasten(); 00158 //wSerial = ???; /* 7-Segmentziffer bestimmen */ 00159 vShiftLoad(wSerial /* Segmente verschieben und Digit festlegen */); 00160 //bLedShield = ??? /* Bargraph bestimmen */ 00161 wait_us(10000); 00162 } 00163 }
Generated on Mon Oct 24 2022 12:00:37 by
1.7.2