' Compiler: Bascom-Demo 2.0.7.5
' Dateiname: Augen bewegen.avr
' Funktion: die Augen für Nr. 6 mit Tastern bewegen
' Datum: 12.01.2020, Stand 13.01.2020
' Von: Naubaddi
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
' &HFF, &HE1, &HD9, &HFF ' 1MHz
$PROG &HFF, &HE4, &HD9, &HFF ' 8MHz
' --- Deklarationen... -----------------------------------------------------------------------------------------
M_Din alias portd.0 ' max Dateneingang
M_Cs alias portd.1 ' max Steuerung der Datenübernahme, anzeigen/nicht anzeigen
M_Clk alias portd.2 ' max Takteingang
config M_Din = output
config M_Cs = output
config M_Clk = output
A_Din alias portd.3
A_Cs alias portd.4
A_Clk alias portd.5
config A_Din = output
config A_Cs = output
config A_Clk = output
Taster_1 alias pinc.1
Taster_2 alias pinc.2
Taster_3 alias pinc.3
Taster_4 alias pinc.4
config Taster_1 = input
config Taster_2 = input
config Taster_2 = input
config Taster_3 = input
' --- Variablen... ---------------------------------------------------------------------------------------------
dim Anzahl as byte ' Anzahl der angeschloßenen max-Module
dim Modul as byte ' Zähler für die Anzahl der angeschloßenen max-Module
dim Befehl as byte ' Befehl für den max
dim Daten as byte ' Daten für den max
dim Zeile as byte ' Zähler für die Zeilen der 8x8 Matrix
dim leeren as byte ' Zähler für leeren
dim M4 as byte ' Position im Datafeld für max 4 (Mund)
dim M3 as byte ' Position im Datafeld für max 3 (Mund)
dim M2 as byte ' Position im Datafeld für max 2 (Mund)
dim M1 as byte ' Position im Datafeld für max 1 (Mund)
dim A5 as byte ' Position im Datafeld für max 5 und 6 (Augen)
dim Zeit as word ' die vergangene Zeit ohne eine Aktion von mir
dim Nr6 as byte ' der Zustand von Nr. 6
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
M4 = 0 ' Positionen für Mund zu
A5 = 0 ' Position für Augen zu
Zeit = 0 ' die Zeit fängt an zu laufen ;-)
Nr6 = 0 ' Nr. 6 schläft
' --- Programm Anfang ------------------------------------------------------------------------------------------
Anzahl = 1 ' 2 max-Module parallel für die Augen
gosub Init_max
gosub Matrix_leeren
Anzahl = 4 ' 4 max-Module in Reihe für den Mund
gosub Init_max
gosub Matrix_leeren
waitms 1000
goto Mund ' Mund und Augen zu, es kann jetzt losgehen ;-)
' --- A5 M4 Nr6
' --- 0 = Augen zu 0 = Mund zu 0 = schlafen
' --- 8 = Augen auf 32 = Mund auf 1 = wach
' --- 16 = Augen unten 64 = Mund lach 2 = langweilig
' --- 24 = Augen links unten 96 = Mund traurig 3 = sauer
' --- 32 = Augen links
' --- 40 = Augen links oben
' --- 48 = Augen oben
' --- 56 = Augen rechts oben
' --- 64 = Augen rechts
' --- 72 = Augen rechts unten
do
Taster:
if Taster_1 = 1 then : Zeit = 0 : Nr6 = 0 : A5 = 0 : M4 = 0 : goto Mund : endif ' Mund zu, Augen zu
if Taster_2 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 8 : M4 = 32 : goto Mund : endif ' Mund auf, Augen auf
if Taster_3 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 32 : M4 = 64 : goto Mund : endif ' Mund lach, Augen rechts
if Taster_4 = 1 then : Zeit = 0 : Nr6 = 1 : A5 = 64 : M4 = 96 : goto Mund : endif ' Mund sauer, Augen links
if Zeit > 2000 then ' seit 2 Sekunden gab es keine Aktion von mir
Zeit = 0
Select Case Nr6
Case 0 : if Nr6 = 0 then : Nr6 = 1 : M4 = 32 : A5 = 8 : endif ' Mund auf, Augen auf
Case 1 : if Nr6 = 1 then : Nr6 = 0 : M4 = 0 : A5 = 0 : endif ' Mund zu, Augen zu
End Select
goto Mund
endif
waitms 1
incr Zeit
loop
' --- Programm Ende --------------------------------------------------------------------------------------------
end
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
Augen:
for Zeile = 1 to 8
A_Cs = 0 : A_Din = 0 : A_Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( A5 , Augenarten ) ' 8x8 Matrix 1 und 2 sind paralel am Port D (3-5) angeschloßen
shiftout A_Din , A_Clk , Befehl , 1 ' den Befehl senden
shiftout A_Din , A_Clk , Daten , 1 ' die Daten senden
incr A5 ' die nächste Zeile vom Auge
A_Cs = 1 ' jetzt anzeigen
next Zeile
goto Taster
Mund:
M3 = M4 + 8 : M2 = M3 + 8 : M1 = M2 + 8
for Zeile = 1 to 8
M_Cs = 0 : M_Din = 0 : M_Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4, die letzte 8x8 Matrix
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1, die mit dem Anschluß zum Mikrocontroller
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
M_Cs = 1 ' jetzt anzeigen
next Zeile
goto Augen
Init_max:
for Modul = 1 to Anzahl
Befehl = &H0C : Daten = 0 ' Shutdown an, keine Ausführung möglich
gosub Send_max
Befehl = &H09 : Daten = 0 ' auf Matrixbetrieb schalten, nicht auf 7 Segmentbetrieb
gosub Send_max
Befehl = &H0A : Daten = 0 ' Helligkeit 0-15
gosub Send_max
Befehl = &H0B : Daten = 7 ' wieviel Reihen sollen benutzt werden 0-7
gosub Send_max
Befehl = &H0F : Daten = 0 ' Test aus
gosub Send_max
Befehl = &H0C : Daten = 1 ' Shutdown aus, eine Ausführung ist wieder möglich
gosub Send_max
next Modul
return
Matrix_leeren:
for Modul = 1 to Anzahl
For leeren = 1 To 8
Befehl = leeren
Daten = &B00000000
Gosub Send_max
Next leeren
next Modul
Return
Send_max:
if Anzahl = 1 then ' 1 sind die Augen
A_Cs = 0 : A_Din = 0 : A_Clk = 0 ' die Augen noch nicht anzeigen
shiftout A_Din , A_Clk , Befehl , 1 ' den Befehl senden
shiftout A_Din , A_Clk , Daten , 1 ' die Daten senden
A_Cs = 1 ' jetzt die Augen anzeigen
else ' 4 ist der Mund
M_Cs = 0 : M_Din = 0 : M_Clk = 0 ' den Mund noch nicht anzeigen
shiftout M_Din , M_Clk , Befehl , 1 ' den Befehl senden
shiftout M_Din , M_Clk , Daten , 1 ' die Daten senden
M_Cs = 1 ' jetzt den Mund anzeigen
endif
Return
' --- data Reihen... -------------------------------------------------------------------------------------------
Augenarten:
' 0 --- Augen zu ---
data &B00100000 , &B00010000 , &B00001000 , &B00001000 , &B00001000 , &B00001000 , &B00010000 , &B00100000
' 8 --- Augen auf ---
data &B00111100 , &B01000010 , &B10000001 , &B10011001 , &B10011001 , &B10000001 , &B01000010 , &B00111100
' 16 --- Augen unten ---
data &B00111100 , &B01000010 , &B10000001 , &B10110001 , &B10110001 , &B10000001 , &B01000010 , &B00111100
' 24 --- Augen links unten ---
data &B00111100 , &B01000010 , &B10110001 , &B10110001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 32 --- Augen links ---
data &B00111100 , &B01000010 , &B10011001 , &B10011001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 40 --- Augen links oben ---
data &B00111100 , &B01000010 , &B10001101 , &B10001101 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 48 --- Augen oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10001101 , &B10001101 , &B10000001 , &B01000010 , &B00111100
' 56 --- Augen rechts oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10001101 , &B10001101 , &B01000010 , &B00111100
' 64 --- Augen rechts ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10011001 , &B10011001 , &B01000010 , &B00111100
' 72 --- Augen rechts unten ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10110001 , &B10110001 , &B01000010 , &B00111100
Mundarten:
' 0 --- Mund zu ---
data &B00000000 , &B00000000 , &B00000000 , &B01111111 , &B01111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B11111110 , &B11111110 , &B00000000 , &B00000000 , &B00000000
' 32 --- Mund auf ---
data &B00000000 , &B00001111 , &B00011111 , &B00011000 , &B00011000 , &B00011111 , &B00001111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B11110000 , &B11111000 , &B00011000 , &B00011000 , &B11111000 , &B11110000 , &B00000000
' 64 --- Mund lach ---
data &B00000000 , &B01100000 , &B01110000 , &B00111100 , &B00001111 , &B00000011 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B11111111 , &B11111111 , &B00000000
data &B00000000 , &B00000110 , &B00001110 , &B00111100 , &B11110000 , &B11000000 , &B00000000 , &B00000000
' 96 --- Mund traurig ---
data &B00000000 , &B00000000 , &B00000011 , &B00001111 , &B00111100 , &B01110000 , &B01100000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B11111111 , &B11111111 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
data &B00000000 , &B00000000 , &B11000000 , &B11110000 , &B00111100 , &B00001110 , &B00000110 , &B00000000
' --------------------------------------------------------------------------------------------------------------