$regfile = "m8def.dat" ' µC = AtMega8 $crystal = 1000000 ' 1 Mhz ' Ausgänge deklarieren Ddrd = &B01111111 ' PD0 - PD6 als Ausgang Ddrb = &B00000111 ' PB0 - PB2 als Ausgang ' Timer deklarieren ' Systemtakt / Prescale = Counts ' 1000000 / 5 = 200000 Config Timer0 = Timer , Prescale = 5 ' Timer0 Overflow Input ' zählt von 0 bis 255 und löst dann Interrupt aus ' 200000 (Counts) / 256 (8-bit Timer) = 781,25 (Interrupts pro Sekunde) On Timer0 Timer0_multiplexing Enable Timer0 Enable Interrupts ' Variablen deklarieren Dim On_display As Byte ' aktuelles Display beim Multiplexing schritt Dim Display_numbers(3) As Byte ' Zahlen die auf Display angezeigt werden Dim Display_number_temp As Byte ' temponäre Display variable ' Hauptschleife Do Display_numbers(1) = 7 ' Minuszeichen Display_numbers(2) = 5 ' Zahl 3 Display_numbers(3) = 4 ' Zahl 4 Loop End ' Timer0 Overflow Interrupt ' Multiplext die 3 7 Segment Anzeigen Timer0_multiplexing: On_display = On_display + 1 ' Displayschritt erhöhen If On_display = 4 Then On_display = 1 End If Portd = &B01111111 ' alle Segmente ausschalten Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 0 ' alle Displays ausschalten Display_number_temp = Display_numbers(on_display) ' Zahl für Anzeige als Bitcode laden Portd = Lookup(display_number_temp , Output_bytecodes) 'Bitcode auf PortD ausgeben Select Case On_display ' jeweiliges Display anschalten Case 1 : Portb.0 = 1 Case 2 : Portb.1 = 1 Case 3 : Portb.2 = 1 End Select Return ' Output Bytecodes Output_bytecodes: Data &B11000000, ' Ziffer 0 Data &B11111001, ' Ziffer 1 Data &B10100100, ' Ziffer 2 Data &B10110000, ' Ziffer 3 Data &B10011001, ' Ziffer 4 Data &B10010010, ' Ziffer 5 Data &B10000010, ' Ziffer 6 Data &B11111000, ' Ziffer 7 Data &B10000000, ' Ziffer 8 Data &B10010000, ' Ziffer 9 Data &B10111111 ' Minuszeichen