Ich spiele gerade mit einer gemultiplexten 7-Segmentanzeige herum. Ich möchte im Endeffekt eine 4stellige Variable auf die Anzeige bekommen.
Bild hier
(PortD setzt die Segmente, PortB.0-3 die gemeinsamen Kathoden)
...aber der Code ist gruselig
Die Einer-Stelle wird (vorerst fest) gesetzt, springt in eine Sub, die Kathode für die erste Stelle wird dort gesetzt, nach Zahlvergleich wieder Sprung in eine andere Sub, wo die entsprechenden Segmente gesetzt werden, danach wird die Kathode wieder ausgeschaltet
Zehner-Stelle wird gesetzt......usw.
Das Prinzip ist mir klar und funktioniert auch...aber laut eigener Betrachtung viel zu umständlich. Hat Jemand `nen Tipp für mich für Vereinfachung ?
Code:$regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output Config Portb = Output Dim E As Byte 'einer Dim Z As Byte 'zehner Dim H As Byte 'hunderter Dim T As Byte 'tausender Dim X As Byte 'Zeit (ms), wielange Kathoden ein X = 1 Do E = 6 'Beispielzahl Einer Gosub E: Z = 5 'Beispielzahl Zehner Gosub Z: H = 4 'Beispielzahl Hunderter Gosub H T = 7 'Beispielzahl Tausender Gosub T Loop End E: Portb.0 = 1 'Kathode Einer ein If E = 0 Then Gosub 0 If E = 1 Then Gosub 1 If E = 2 Then Gosub 2 If E = 3 Then Gosub 3 If E = 4 Then Gosub 4 If E = 5 Then Gosub 5 If E = 6 Then Gosub 6 If E = 7 Then Gosub 7 If E = 8 Then Gosub 8 If E = 9 Then Gosub 9 Waitms X Portb.0 = 0 'Kathode Einer aus Return Z: Portb.1 = 1 'Kathode Zehner ein If Z = 0 Then Gosub 0 If Z = 1 Then Gosub 1 If Z = 2 Then Gosub 2 If Z = 3 Then Gosub 3 If Z = 4 Then Gosub 4 If Z = 5 Then Gosub 5 If Z = 6 Then Gosub 6 If Z = 7 Then Gosub 7 If Z = 8 Then Gosub 8 If Z = 9 Then Gosub 9 Waitms X Portb.1 = 0 'Kathode Zehner aus Return H: Portb.2 = 1 'Kathode Hunderter ein If H = 0 Then Gosub 0 If H = 1 Then Gosub 1 If H = 2 Then Gosub 2 If H = 3 Then Gosub 3 If H = 4 Then Gosub 4 If H = 5 Then Gosub 5 If H = 6 Then Gosub 6 If H = 7 Then Gosub 7 If H = 8 Then Gosub 8 If H = 9 Then Gosub 9 Waitms X Portb.2 = 0 Return 'Kathode Hunderter aus T: Portb.3 = 1 'Kathode Tausender ein If T = 0 Then Gosub 0 If T = 1 Then Gosub 1 If T = 2 Then Gosub 2 If T = 3 Then Gosub 3 If T = 4 Then Gosub 4 If T = 5 Then Gosub 5 If T = 6 Then Gosub 6 If T = 7 Then Gosub 7 If T = 8 Then Gosub 8 If T = 9 Then Gosub 9 Waitms X Portb.3 = 0 'Kathode Tausender aus Return 0: Portd = &B00111111 '0 Return 1: Portd = &B00000110 '1 Return 2: Portd = &B01011011 '2 Return 3: Portd = &B01001111 '3 Return 4: Portd = &B01100110 '4 Return 5: Portd = &B01101101 '5 Return 6: Portd = &B01111101 '6 Return 7: Portd = &B00000111 '7 Return 8: Portd = &B01111111 '8 Return 9: Portd = &B01101111 '9 Return







Zitieren

Lesezeichen