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
Diff: main.cpp
- Revision:
- 0:5ac32d240694
- Child:
- 1:d400ca81c517
diff -r 000000000000 -r 5ac32d240694 main.cpp
--- /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);
+ }
+ }