Hallo ,
ich benutze eine etwas modifizierte Routine von Wolfgang Schwarz
( http://www.black-strom.de.vu ), der sowas für seine Uhr verwendet hat, schaut's euch mal an:
[Ich hab nur die relevanten Zeilen rauskopiert]
Code:Dim Stelle_1 As Byte Dim Stelle_2 As Byte Dim Stelle_3 As Byte Dim Stelle_4 As Byte 'Ausgänge: Segment_a Alias Portb.0 Segment_b Alias Portb.1 Segment_c Alias Portb.2 Segment_d Alias Portb.3 Segment_e Alias Portb.4 Segment_f Alias Portb.5 Segment_g Alias Portc.0 Ziffer_1 Alias Portc.1 Ziffer_2 Alias Portc.2 Ziffer_3 Alias Portc.3 Ziffer_4 Alias Portc.4 Config Timer0 = Timer , Prescale = 1024 On Timer0 7segment Const Timervorgabe = 200 Do 'Anfang Hauptschleife Stelle_1 = 4 Stelle_2 = 3 'was angezeigt werden soll ... Stelle_3 = 2 Stelle_4 = 1 Loop 'Ende Hauptschleife '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' Interrupt-Routine für Ziffer ausgabe im 7 Segmentcode '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' Bei jedem Aufruf wir nur eine Ziffer ausgegeben, d.h nur eine Anzeige wird ' angesteuert. Die anderen bleiben dunkel. Bei jedem Aufruf wird eine Anzeige ' weitergeschaltet. ' ' Anzeigen anordnung ' ' 1111 2222 3333 4444 ' 1 1 2 2 3 3 4 4 ' 1111 2222 3333 4444 ' 1 1 2 2 3 3 4 4 ' 1111o 2222o 3333o 4444o ' ' ^-- Dezimalpunkt ' ^---- 4. Ziffer | Minute Low Wert | Variable Zl_minute ' ^---------- 3. Ziffer | Minute High Wert | Variable Zh_minute ' ^----------------- 2. Ziffer | Stunde Low Wert | Variable Zl_stunde ' ^----------------------- 1. Ziffer | Stunde High Wert | Variable Zh_stunde 7segment: Timer0 = Timervorgabe If Temp_ziffer = 4 Then Temp_ziffer = 0 'bestimmt die auszugebende Ziffer (1 bis 4) Incr Temp_ziffer 'bei jedem aufruf des Lable wir eine andere Ziffer ausgegeben Select Case Temp_ziffer 'welche Ziffer soll angesteuert werden Case 1 : Ziffer_1 = 0 '1. Ziffer Ziffer_2 = 1 Ziffer_3 = 1 Ziffer_4 = 1 Bcd_aus = Stelle_1 Case 2 : Ziffer_1 = 1 '2. Ziffer Ziffer_2 = 0 Ziffer_3 = 1 Ziffer_4 = 1 Bcd_aus = Stelle_2 Case 3 : Ziffer_1 = 1 '3. Ziffer Ziffer_2 = 1 Ziffer_3 = 0 Ziffer_4 = 1 Bcd_aus = Stelle_3 Case 4 : Ziffer_1 = 1 '4. Ziffer Ziffer_2 = 1 Ziffer_3 = 1 Ziffer_4 = 0 Bcd_aus = Stelle_4 End Select 'Ermittelt aus der Segmentfolge-Tabelle den 7 Segmentcode für die auszugebende Zahl Select Case Bcd_aus Case 1 : Ausgang = Lookup(1 , Segmentfolge) Case 2 : Ausgang = Lookup(2 , Segmentfolge) Case 3 : Ausgang = Lookup(3 , Segmentfolge) Case 4 : Ausgang = Lookup(4 , Segmentfolge) Case 5 : Ausgang = Lookup(5 , Segmentfolge) Case 6 : Ausgang = Lookup(6 , Segmentfolge) Case 7 : Ausgang = Lookup(7 , Segmentfolge) Case 8 : Ausgang = Lookup(8 , Segmentfolge) Case 9 : Ausgang = Lookup(9 , Segmentfolge) Case 0 And Temp_ziffer = 1 : Ausgang = Lookup(10 , Segmentfolge) 'Nullstellenunterdrückung bei der ersten Ziffer Case 0 And Temp_ziffer > 1 : Ausgang = Lookup(0 , Segmentfolge) 'wenn nicht erste Ziffer Null anzeigen End Select 'Ausgabe des 7 Segmentcodes (Invertierend [Not] bei Anz. mit gem. Anode) Segment_a = Ausgang.0 'Segment A Segment_b = Ausgang.1 'Segment B Segment_c = Ausgang.2 'Segment C Segment_d = Ausgang.3 'Segment D Segment_e = Ausgang.4 'Segment E Segment_f = Ausgang.5 'Segment F Segment_g = Ausgang.6 'Segment G Return End 'Programm Ende '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' 7 Segmentcode - Tabelle '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' ' --A-- ' | | ' F B ' | | ' --G-- ' | | ' E C ' | | ' --D-- Segmentfolge: 'GFEDCBA / "1" Segment AN Data &B0111111 '0 Data &B0000110 '1 Data &B1011011 '2 Data &B1001111 '3 Data &B1100110 '4 Data &B1101101 '5 Data &B1111101 '6 Data &B0000111 '7 Data &B1111111 '8 Data &B1101111 '9 Data &B0000000 'leeres Feld (zur Nullstellenunterdrückung)







Zitieren

Lesezeichen