Guten Abend liebe uC.net Gemeinde :)
Ich meine hier auf der Seite einen Code gesehen zu haben um einen LED
Würfel zu bauen. Man kennt das ja:
Solange man einen Taster drückt wird gezählt und wenn man ihn wieder
loslässt, wird das Ergebnis angezeigt.
Mein Code kommt aber ohne die "umstrittene" _RND Funktion aus.
Jedesmal wenn der Eingang A0 (Pin 5) auf High gesetzt wird, wird bei 1
wieder angefangen. Durch das schnelle Zählen wird es sogesehen schon von
alleine Zufällig ;)
Die Ausgänge für die einzelnen Augen sind die Pins 19-13.
1 | $regfile = "attiny2313.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 32
|
4 | $swstack = 10
|
5 | $framesize = 40
|
6 |
|
7 |
|
8 | Config Pina.0 = Input 'Pin (PA0) wird als Eingang definiert
|
9 | Porta.0 = 1
|
10 | Config Portb = Output 'Den gesamten PortB als Output definieren
|
11 | Dim Warten As Byte
|
12 |
|
13 | Warten = 1
|
14 | Gosub Anfang 'Da das ganze Programm in einer Schleife läuft, muss es hier einmal gestartet werden
|
15 |
|
16 | Anfang:
|
17 | 'Eigentliche Würfelfunktion
|
18 | Do
|
19 | If Pina.0 = 1 Then 'Wenn A0 High ist, wird die
|
20 | Portb = &B10000000 'LED für das mittlere Auge wird angesteuert
|
21 | Waitms 1
|
22 | If Pina.0 = 0 Then 'Wenn A0 Low ist dann
|
23 | Gosub Anzeigen 'springt es zur Funktion die die Zählfunktion pausiert
|
24 | Else
|
25 | Waitms 1 'Wenn A0 low nicht erfüllt ist soll er eine ms warten
|
26 | End If
|
27 |
|
28 | Portb = &B01100000 'Das ganze für die obere linke und untere rechte LED
|
29 | Waitms 1
|
30 | If Pina.0 = 0 Then
|
31 | Gosub Anzeigen
|
32 | Else
|
33 | Waitms 1
|
34 | End If
|
35 |
|
36 | Portb = &B11100000
|
37 | Waitms 1
|
38 |
|
39 | If Pina.0 = 0 Then
|
40 | Gosub Anzeigen
|
41 | Else
|
42 | Waitms 1
|
43 | End If
|
44 |
|
45 | Portb = &B01111000
|
46 | Waitms 1
|
47 | If Pina.0 = 0 Then
|
48 | Gosub Anzeigen
|
49 | Else
|
50 | Waitms 1
|
51 | End If
|
52 |
|
53 | Portb = &B11111000
|
54 | Waitms 1
|
55 | If Pina.0 = 0 Then
|
56 | Gosub Anzeigen
|
57 | Else
|
58 | Waitms 1
|
59 | End If
|
60 |
|
61 | Portb = &B01111110
|
62 | Waitms 1
|
63 | If Pina.0 = 0 Then
|
64 | Gosub Anzeigen
|
65 | Else
|
66 | Waitus 1
|
67 | End If
|
68 | Gosub Anfang
|
69 |
|
70 | Else
|
71 | Waitus 1
|
72 |
|
73 | Anzeigen: 'Soll wieder von vorne beginnen um Eingangscheck zu starten
|
74 | Waitus 1
|
75 | Gosub Anfang
|
76 |
|
77 | End If
|
78 | Loop
|
79 | End
|
Diese Schaltung ist auf der Arbeit (bin Azubi) entstanden und diente
eigentlich nur Lernzwecken. Sie wurde getestet und funktioniert. Wir
haben als Taster einen Reedkontakt benutzt. Der Magnet dazu ist frei in
einer kleinen Röhre, kann also hin und her rutschen. Schon hat man eine
Schüttelfunktion ;)
LG
Stahl
P.S.:
Ich denke mal der Code ist ausreichend kommentiert oder? :P