1 | '************************************************* ***** Konfiguration Controller
|
2 | $regfile = "m8def.DAT" 'ATMega8
|
3 | $crystal = 8000000 '8MHz
|
4 | '************************************************* ******************************
|
5 |
|
6 | 'Algemeine Konfiguration ************************************************** *****
|
7 | Dim I As Byte
|
8 | Declare Sub Zeichen
|
9 | Dim Wert_string As String * 12 '6 Zeichen und 6 Punkte
|
10 | Dim Wert_laenge_byte As Byte 'Byte
|
11 |
|
12 | '************************************************* ******************************
|
13 |
|
14 | 'Konfiguration MAX7219 ************************************************** *******
|
15 | Dim Led_digit As Byte 'MAX9219
|
16 | Dim Led_data As Byte 'MAX9219
|
17 | Dim Ein_zeichen As String * 5
|
18 | Dim Bin_led_data As Byte
|
19 | Dim Displaystelle(6) As String * 1 'Array für Displaystellen
|
20 | Config Portc = Output 'Port C als Ausgang
|
21 | Led_din Alias Portc.5 'DIN Pin von MAX7219
|
22 | Led_clk Alias Portc.4 'CLK Pin von MAX7219
|
23 | Led_load Alias Portc.3 'LOAD Pin von MAX7219
|
24 | '************************************************* ******************************
|
25 |
|
26 | 'Konfiguration DCF77 ************************************************** *********
|
27 | Config Dcf77 = Pinb.2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Update = 0 , Inverted = 1 , Gosub = Sectic
|
28 | ' Config Date = Dmy , Separator = .
|
29 | ' Date$ = "00.00:00"
|
30 | Time$ = "00:00:00" 'Startzeit setzen
|
31 | Enable Interrupts
|
32 | '************************************************* ******************************
|
33 |
|
34 | 'Programmvorbereitung ************************************************** ********
|
35 | Gosub Init_max7219 'Init des MAX7219
|
36 |
|
37 | ' komplettes LED-Array leeren
|
38 | For I = 1 To 6 'Anzahl der Stellen
|
39 | Led_digit = I
|
40 | Led_data = 0
|
41 | Gosub Led_write 'Schickt Daten von LED_digit und LED_data an MAX7219
|
42 | Next I
|
43 |
|
44 | Gosub Clear_display 'Display löschen
|
45 | '************************************************* ******************************
|
46 |
|
47 | 'Programmstart ************************************************** ***************
|
48 | 'Time$ = "12:45:59"
|
49 | Do 'Hauptschleife
|
50 |
|
51 | Gosub Datum_uhrzeit
|
52 | Loop
|
53 |
|
54 | '************************************************* ******************************
|
55 |
|
56 | Datum_uhrzeit:
|
57 |
|
58 | ' Time$ = Time(dcf_sec)
|
59 | ' Ein_zeichen = " " : Call Zeichen : Led_digit = 1 : Led_data = Bin_led_data : Gosub Led_write 'Led_Data muss als Byte sein dann geht auch nicht decode
|
60 | ' Ein_zeichen = Mid(time$ , 1 , 1) : Call Zeichen : Led_digit = 2 : Led_data = Bin_led_data : Gosub Led_write
|
61 | ' Ein_zeichen = Mid(time$ , 2 , 1) : Call Zeichen : Led_digit = 3 : Led_data = Bin_led_data : Led_data.7 = 1 : Gosub Led_write
|
62 | ' Ein_zeichen = Mid(time$ , 4 , 1) : Call Zeichen : Led_digit = 4 : Led_data = Bin_led_data : Led_data.7 = 1 : Gosub Led_write
|
63 | ' Ein_zeichen = Mid(time$ , 5 , 1) : Call Zeichen : Led_digit = 5 : Led_data = Bin_led_data : Gosub Led_write
|
64 | ' Ein_zeichen = " " : Call Zeichen : Led_digit = 6 : Led_data = Bin_led_data : Gosub Led_write
|
65 |
|
66 |
|
67 | ' 12:30:59
|
68 | ' ||||||||
|
69 | ' 12345678
|
70 | Ein_zeichen = Mid(time$ , 1 , 1) : Call Zeichen : Led_digit = 1 : Led_data = Bin_led_data : Gosub Led_write 'Led_Data muss als Byte sein dann geht auch nicht decode
|
71 | Ein_zeichen = Mid(time$ , 2 , 1) : Call Zeichen : Led_digit = 2 : Led_data = Bin_led_data : Gosub Led_write
|
72 | Ein_zeichen = Mid(time$ , 4 , 1) : Call Zeichen : Led_digit = 3 : Led_data = Bin_led_data : Gosub Led_write
|
73 | Ein_zeichen = Mid(time$ , 5 , 1) : Call Zeichen : Led_digit = 4 : Led_data = Bin_led_data : Gosub Led_write
|
74 | Ein_zeichen = Mid(time$ , 7 , 1) : Call Zeichen : Led_digit = 5 : Led_data = Bin_led_data : Gosub Led_write
|
75 | Ein_zeichen = Mid(time$ , 8 , 1) : Call Zeichen : Led_digit = 6 : Led_data = Bin_led_data : Gosub Led_write
|
76 | Return
|
77 | '************************************************* ******************************
|
78 |
|
79 | 'Initialisieren des MAX7219 ************************************************** **
|
80 | Init_max7219:
|
81 | Led_digit = &H0C : Led_data = 0 ' Shutdown On
|
82 | Gosub Led_write
|
83 | 'Dezimal
|
84 | ' Led_digit = 9 : Led_data = &B1111_1111 ' Decode "B" für alle Digits
|
85 | 'Binär
|
86 | Led_digit = 9 : Led_data = &B0000_0000 ' kein Decode "B" für alle Digits
|
87 | Gosub Led_write
|
88 | Led_digit = &H0A : Led_data = &H0F ' Helligkeit voll (0123456789ABCDEF)
|
89 | Gosub Led_write
|
90 | Led_digit = &H0B : Led_data = 5 ' Anzahl Stellen 0-7
|
91 | Gosub Led_write
|
92 | Led_digit = &H0F : Led_data = 1 ' Test On
|
93 | Gosub Led_write
|
94 | Wait 1
|
95 | Led_digit = &H0F : Led_data = 0 ' Test Off
|
96 | Gosub Led_write
|
97 | Led_digit = &H0C : Led_data = 1 ' Shutdown Off
|
98 | Gosub Led_write
|
99 | Return
|
100 | '************************************************* ******************************
|
101 |
|
102 | 'Display leeren ************************************************** **************
|
103 | Clear_display:
|
104 | Ein_zeichen = " " : Call Zeichen : Led_digit = 1 : Led_data = Bin_led_data : Gosub Led_write 'Led_Data muss als Byte sein dann geht auch nicht decode
|
105 | Ein_zeichen = " " : Call Zeichen : Led_digit = 2 : Led_data = Bin_led_data : Gosub Led_write
|
106 | Ein_zeichen = " " : Call Zeichen : Led_digit = 3 : Led_data = Bin_led_data : Gosub Led_write
|
107 | Ein_zeichen = " " : Call Zeichen : Led_digit = 4 : Led_data = Bin_led_data : Gosub Led_write
|
108 | Ein_zeichen = " " : Call Zeichen : Led_digit = 5 : Led_data = Bin_led_data : Gosub Led_write
|
109 | Ein_zeichen = " " : Call Zeichen : Led_digit = 6 : Led_data = Bin_led_data : Gosub Led_write
|
110 | Return
|
111 | '************************************************* ******************************
|
112 |
|
113 |
|
114 | 'Daten zum MAX7219 senden ************************************************** ****
|
115 | Led_write:
|
116 | Reset Led_din
|
117 | Reset Led_clk
|
118 | Reset Led_load
|
119 | Shiftout Led_din , Led_clk , Led_digit , 1
|
120 | Shiftout Led_din , Led_clk , Led_data , 1
|
121 | Set Led_load
|
122 | Print I 'gibt Zahl an Terminal aus
|
123 | Return
|
124 |
|
125 | '************************************************* ******************************
|
126 |
|
127 | End
|
128 |
|
129 | Zeichen:
|
130 | If Ein_zeichen = "0" Then Bin_led_data = &B01111110 '0
|
131 | If Ein_zeichen = "1" Then Bin_led_data = &B00110000 '1
|
132 | If Ein_zeichen = "2" Then Bin_led_data = &B01101101 '2
|
133 | If Ein_zeichen = "3" Then Bin_led_data = &B01111001 '3
|
134 | If Ein_zeichen = "4" Then Bin_led_data = &B00110011 '4
|
135 | If Ein_zeichen = "5" Then Bin_led_data = &B01011011 '5
|
136 | If Ein_zeichen = "6" Then Bin_led_data = &B01011111 '6
|
137 | If Ein_zeichen = "7" Then Bin_led_data = &B01110000 '7
|
138 | If Ein_zeichen = "8" Then Bin_led_data = &B01111111 '8
|
139 | If Ein_zeichen = "9" Then Bin_led_data = &B01111011 '9
|
140 |
|
141 | If Ein_zeichen = "A" Then Bin_led_data = &B01110111 'A
|
142 | If Ein_zeichen = "C" Then Bin_led_data = &B01001110 'C
|
143 | If Ein_zeichen = "E" Then Bin_led_data = &B01001111 'E
|
144 | If Ein_zeichen = "F" Then Bin_led_data = &B01000111 'F
|
145 | If Ein_zeichen = "H" Then Bin_led_data = &B00110111 'H
|
146 | If Ein_zeichen = "L" Then Bin_led_data = &B00001110 'L
|
147 | If Ein_zeichen = "O" Then Bin_led_data = &B01111110 'O
|
148 | If Ein_zeichen = "P" Then Bin_led_data = &B01100111 'P
|
149 | If Ein_zeichen = "S" Then Bin_led_data = &B01011011 'S
|
150 | If Ein_zeichen = "Y" Then Bin_led_data = &B00111011 'Y
|
151 |
|
152 | If Ein_zeichen = "h" Then Bin_led_data = &B00010111 'h
|
153 | If Ein_zeichen = "r" Then Bin_led_data = &B00000101 'r
|
154 | If Ein_zeichen = "t" Then Bin_led_data = &B00001111 't
|
155 |
|
156 | If Ein_zeichen = " " Then Bin_led_data = &B00000000 'leer
|
157 | If Ein_zeichen = "" Then Bin_led_data = &B00000000 'leer
|
158 | If Ein_zeichen = "-" Then Bin_led_data = &B00000001 '-
|
159 | If Ein_zeichen = "°" Then Bin_led_data = &B01100011 '°
|
160 | If Ein_zeichen = "," Then Bin_led_data = &B10000000 ',
|
161 | Return
|
162 |
|
163 | Sectic:
|
164 |
|
165 | Return
|