' Compiler: Bascom-Demo 2.0.7.5
' Dateiname: Augen und Mund bewegen.avr
' Funktion: die Augen und den Mund für Nr. 6 mit Tastern bewegen
' Datum: 12.01.2020, Stand 14.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... -----------------------------------------------------------------------------------------
Din alias portd.0 ' max-Modul Dateneingang
Cs alias portd.1 ' max-Modul Steuerung der Datenübernahme, anzeigen/nicht anzeigen
Clk alias portd.2 ' max-Modul Takteingang
config Din = output
config Cs = output
config 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 das max-Modul
dim Daten as byte ' Daten für das max-Modul
dim Zeile as byte ' Zähler für die Zeilen der max-Module
dim leeren as byte ' Zähler um die max_Module zu leeren
dim A6 as byte ' Position im Datafeld für max-Modul 6 (Auge rechts)
dim A5 as byte ' Position im Datafeld für max-Modul 5 (Auge links)
dim M4 as byte ' Position im Datafeld für max-Modul 4 (Mund rechts)
dim M3 as byte ' Position im Datafeld für max-Modul 3 (Mund rechts m)
dim M2 as byte ' Position im Datafeld für max-Modul 2 (Mund links m)
dim M1 as byte ' Position im Datafeld für max-Modul 1 (Mund links)
dim Nr6 as byte ' so fühlt sich Nr. 6 aktuell
dim Zeit as word ' die vergangene Zeit ohne eine Aktion von mir
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
Anzahl = 6 ' 2 Module für die Augen und 4 Module für den Mund
A6 = 0 ' Position für Auge rechts zu
A5 = 0 ' Position für Auge links zu
M4 = 0 ' Positionen für Mund zu
Nr6 = 0 ' Nr. 6 schläft
Zeit = 0 ' die Zeit fängt an zu laufen ;-)
' --- Programm Anfang ------------------------------------------------------------------------------------------
gosub Init_max ' max-Module initialisieren
gosub Zero_max ' max-Module leeren
waitms 1000 ' eine kleine Pause bevor es los geht
gosub Gesicht ' Mund und Augen zu machen, 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 = lach
' --- 24 = Augen rechts unten 96 = Mund traurig 3 = traurig
' --- 32 = Augen rechts 4 = langweilig
' --- 40 = Augen rechts oben 5 = genervt
' --- 48 = Augen oben 6 = unruhig
' --- 56 = Augen links oben 7 = redet
' --- 64 = Augen links 8 =
' --- 72 = Augen links unten 9 =
do
if Taster_1 = 1 then : Zeit = 0 : Nr6 = 0 : A6 = 0 : A5 = 0 : M4 = 0 : gosub Gesicht : endif ' Mund zu, Augen zu
if Taster_2 = 1 then : Zeit = 0 : Nr6 = 1 : A6 = 8 : A5 = 8 : M4 = 32 : gosub Gesicht : endif ' Mund auf, Augen auf
if Taster_3 = 1 then : Zeit = 0 : Nr6 = 1 : A6 = 32 : A5 = 32 : M4 = 64 : gosub Gesicht : endif ' Mund lach, Augen rechts
if Taster_4 = 1 then : Zeit = 0 : Nr6 = 1 : A6 = 64 : A5 = 64 : M4 = 96 : gosub Gesicht : 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 : A6 = 8 : A5 = 8 : M4 = 32 : endif ' Mund auf, Augen auf
Case 1 : if Nr6 = 1 then : Nr6 = 0 : A6 = 0 : A5 = 0 : M4 = 0 : endif ' Mund zu, Augen zu
End Select
gosub Gesicht
endif
waitms 1
incr Zeit
loop
' --- Programm Ende --------------------------------------------------------------------------------------------
end
' --- Prozeduren, Funktionen... --------------------------------------------------------------------------------
Gesicht:
M3 = M4 + 8 : M2 = M3 + 8 : M1 = M2 + 8
for Zeile = 1 to 8
Cs = 0 : Din = 0 : Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( A6 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( A5 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1 die Erste 8x8 Matrix seriel angeschloßen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
incr A6 : incr A5 ' die nächste Zeile vom Auge
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
Cs = 1 ' jetzt anzeigen
next Zeile
return
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
Zero_max:
for Modul = 1 to Anzahl
For leeren = 1 To 8
Befehl = leeren
Daten = &B00000000
Gosub Send_max
Next leeren
next Modul
Return
Send_max:
Cs = 0 : Din = 0 : Clk = 0 ' die Augen und den Mund noch nicht anzeigen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Cs = 1 ' jetzt die Augen und den Mund anzeigen
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 rechts unten ---
data &B00111100 , &B01000010 , &B10110001 , &B10110001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 32 --- Augen rechts ---
data &B00111100 , &B01000010 , &B10011001 , &B10011001 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 40 --- Augen rechts oben ---
data &B00111100 , &B01000010 , &B10001101 , &B10001101 , &B10000001 , &B10000001 , &B01000010 , &B00111100
' 48 --- Augen oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10001101 , &B10001101 , &B10000001 , &B01000010 , &B00111100
' 56 --- Augen links oben ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10001101 , &B10001101 , &B01000010 , &B00111100
' 64 --- Augen links ---
data &B00111100 , &B01000010 , &B10000001 , &B10000001 , &B10011001 , &B10011001 , &B01000010 , &B00111100
' 72 --- Augen links 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
' --------------------------------------------------------------------------------------------------------------