'----------------------------------------------------------------------------------------- 'Titel : QuadratUhr 'Name : QuadratUhr.bas 'Autor : Arno Schweißinger 'Datum : 18.05.2009 'MicroContorller : AtMega8 1MHz 'Compiler : Bascom 1.11.9.1 'Hardware : 16 Duo-LEDs rot/grün ' Quarz 32768Hz an Pin TOSC1/2 ' 4x 74HC374 'Stromversorgung: : 5V für Logik, 'Besonderes : RC5-IR zum Zeitstellen ' 'PB.0=1 IC a 'PB.1=1 ic b 'PB.2=1 ic c 'PB.3=1 ic d ' ' rot a0 Stunden: Set Zeile(1).0 ' grün a1 Minuten: Set Zeile(1).1 ' rot a2 b6 s ' gn a3 b7 m ' rot a4 b4 c0 s ' gn a5 b5 c1 m ' rot a6 b2 c2 d6 s ' gn a7 b3 c3 d7 m ' rot b0 c4 d4 s ' gn b1 c5 d5 m ' rot c6 d2 s ' gn c7 d3 m ' rot d0 s ' gn d1 m ' ' ' ' ' '----------------------------------------------------------------------------------------- $regfile = "m8def.dat" $crystal = 1000000 $lib "mcsbyte.lbx" 'use byte library for smaller code Config Portc = Output Config Portd = Output 'Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 'Config Lcd = 24 * 2 Config Rc5 = Pinb.1 ', Timer = 1 Config Date = Dmy , Separator = . ' ANSI-Format Config Clock = Soft 'this is how simple it is Enable Interrupts Declare Sub Zeitstellen Declare Sub Getziffer Declare Sub Stundensignal Declare Sub Set_led Declare Sub Led_updat Declare Sub Led_lauflicht 'Declare Sub Led_minuten_aus 'Declare Sub Led_stunden_aus Declare Sub Init Declare Sub Bestaetigung Declare Sub Alle_rot Declare Sub Alle_gruen Declare Sub Alle_aus Soundpin Alias Pinb.0 Dim Zeile(4) As Byte ' Sub Led_updat Dim I As Byte Dim J As Byte ' Zählschleifen Dim Led_sec As Byte , Led_min As Byte , Led_hour As Byte ' Sub Led_updat Dim Temp As Byte Dim Port As Byte , Led As Byte ' Sub Led Lauflicht Dim Address As Byte , Command As Byte 'reserve space for variables Dim S As String * 1 ' Empfangscode RC5 Dim Zeit As String * 8 ' temp für Time$ Dim Togglebit As Bit ' Sub Zeitstellen Dim Togglealt As Bit ' Sub Zeitstellen '------------------------- ' Hauptprogramm '------------------------- 'Begin Sound Soundpin , 30 , 10 ' Bereitschaftston Call Alle_aus Call Init Call Alle_gruen Call Alle_rot Call Alle_aus Call Led_lauflicht Call Zeitstellen Do Waitms 100 ' Warteschleife Led_sec = _sec : Led_min = _min : Led_hour = _hour Call Stundensignal Call Led_updat Loop End ' ende Hauptprogramm Sub Led_updat Reset Zeile(1) ' alle Register löschen Reset Zeile(2) Reset Zeile(3) Reset Zeile(4) If Led_sec.0 = 0 Then Reset Portc.5 ' Sekunden blinken If _sec.1 = 1 Then Set Portc.5 If Led_hour > 11 Then Led_hour = Led_hour - 12 ' 12 Stundenanzeige Select Case Led_hour Case 0 : Set Zeile(1).0 Case 1 : Set Zeile(2).6 Case 2 : Set Zeile(3).0 Case 3 : Set Zeile(4).6 Case 4 : Set Zeile(4).4 Case 5 : Set Zeile(4).2 Case 6 : Set Zeile(4).0 Case 7 : Set Zeile(3).6 Case 8 : Set Zeile(2).0 Case 9 : Set Zeile(1).6 Case 10 : Set Zeile(1).4 Case 11 : Set Zeile(1).2 End Select Select Case Led_min Case 1 To 4 : Set Zeile(1).1 Case 5 To 9 : Set Zeile(2).7 Case 10 To 14 : Set Zeile(3).1 Case 15 To 19 : Set Zeile(4).7 Case 20 To 24 : Set Zeile(4).5 Case 25 To 29 : Set Zeile(4).3 Case 30 To 34 : Set Zeile(4).1 Case 35 To 39 : Set Zeile(3).7 Case 40 To 44 : Set Zeile(2).1 Case 45 To 49 : Set Zeile(1).7 Case 50 To 54 : Set Zeile(1).5 Case 55 To 59 : Set Zeile(1).3 End Select Led_min = Led_min Mod 5 If Led_min > 0 Then Set Zeile(2).5 ' 1 Min If Led_min > 1 Then Set Zeile(3).3 ' 2 Min If Led_min > 2 Then Set Zeile(3).5 ' 3 Min If Led_min > 3 Then Set Zeile(2).3 ' 4 Min ' Select Case Led_min ' Minuten 1 bis 4 ' Case 1 : Set Zeile(2).5 ' Case 2 : Set Zeile(3).3 ' Case 3 : Set Zeile(3).5 ' Case 4 : Set Zeile(2).3 ' End Select ' Port Ausgabe Portd = Zeile(1) Set Portc.0 Waitus 10 Reset Portc.0 Portd = Zeile(2) Set Portc.1 Waitus 10 Reset Portc.1 Portd = Zeile(3) Set Portc.2 Waitus 10 Reset Portc.2 Portd = Zeile(4) Set Portc.3 Waitus 10 Reset Portc.3 End Sub Sub Init ' Lauflicht Portd = &B00000001 For J = 0 To 3 For I = 1 To 8 Set Portc.j Waitus 10 Reset Portc.j Rotate Portd , Left Waitms 50 Next I Next J End Sub Sub Alle_rot Portd = &B01010101 ' Alle Leds rot Portc = &B00001111 Waitus 10 Portc = 0 Waitms 500 End Sub Sub Alle_gruen Portd = &B10101010 ' Alle Leds grün Portc = &B00001111 Waitus 10 Portc = 0 Waitms 500 End Sub Sub Alle_aus Portd = &B00000000 ' alle 8 LEDS aus Portc = &B00001111 ' out: 1-4 select ic Waitus 10 Portc = &B00000000 ' out: 1-4 select ic End Sub Sub Stundensignal If _sec = 0 Then If _min = 0 Then If _hour > 6 Then ' nicht nachts Pipsen If _hour < 23 Then Sound Soundpin , 20 , 40 Sound Soundpin , 40 , 40 Call Led_lauflicht End If End If End If End If End Sub Sub Led_lauflicht Restore Lauflicht For I = 1 To 12 Read Port : Read Led Set Portd.led Set Portc.port ' Einschalten Waitus 10 Reset Portc.port Waitms 150 Reset Portd.led ' Ausschalten Set Portc.port Waitus 10 Reset Portc.port Next I End Sub Sub Zeitstellen Led_sec = 1 For I = 0 To 05 Step 5 Led_min = I Call Led_updat Getrc5(address , Command) If Command <> 0 Then Exit For ' Timeout Next I If Command = 0 Then Exit Sub ' Eingabe Stunden Minuten Zeit = "" For I = 1 To 4 Togglealt = Togglebit While Togglealt = Togglebit Gosub Getziffer Wend Sound Soundpin , 10 , 40 ' Bereitschaftston Led_hour = Val(s) Call Led_updat Zeit = Zeit + S If I = 2 Then Zeit = Zeit + ":" Next I Zeit = Zeit + ":00" Time$ = Zeit End Sub Sub Getziffer Do Getrc5(address , Command) If Address <> 255 Then If Command > 127 Then ' bx0000000 (Bit 7) Togglebit = 1 ' Togglebit merken Else Togglebit = 0 End If Command = Command And &B00111111 ' clear the toggle bit S = Lookupstr(command , Asciidaten ) End If Temp = Asc(s) If Temp > &H2F Then If Temp < &H3A Then Exit Do End If Loop End Sub '------------------------------------- Decodieren der Tastatur ----------------- Asciidaten: Data "1" , "2" , "9" , "4" , "0" , "p" , "<" , "5" , "8" , "o" Data "v" , "r" , "L" , "b" , "ä" , "k" , "7" , "ü" , "l" , "S" Data "E" , "y" , "#" , "j" , "4" , "i" , "3" , "u" , "m" , "x" Data "O" , "f" , "6" , "2" , "z" , "n" , "L" , "1" , "d" , "g" Data "5" , "t" , "q" , "w" , "e" , "3" , "s" , "a" , "?" , " " Data "?" , "h" , "R" , "c" , "U" , "ö" , "?" , "?" , "?" , "?" Data "?" , "?" , "?" , "R" Data "" , "" , "" , "" , "" , "" , "" , "" , "" , "" '------------------------------------- LED Lauflicht ----------------- Lauflicht: ' IC , LED Data 0 , 3 Data 0 , 5 Data 0 , 7 Data 1 , 1 Data 2 , 7 Data 3 , 1 Data 3 , 3 Data 3 , 5 Data 3 , 7 Data 2 , 1 Data 1 , 7 Data 0 , 1