; } ?>
:ISP: Lottozahlengenerator © BubbersBeschreibung:


MODULE Lotto
"Lottozahlengenerator: Beim Tastendruck (T1) wird von 01 bis 49 gezhlt
DECLARATIONS "******** Ein- und Ausgnge *****************************************
taktein , start PIN 11,16; "Takteingang Y0, Starttaster T1
ctrZbit3..ctrZbit0 NODE ISTYPE'BUFFER,REG'; "Zhler Zehner Ausgnge
ctrEbit3..ctrEbit0 NODE ISTYPE'BUFFER,REG'; "Zhler Einer Ausgnge
ctrZ = [ctrZbit3..ctrZbit0]; "Zusammenfassung der
ctrE = [ctrEbit3..ctrEbit0]; "Zhlerausgnge
a2,b2,c2,d2,e2,f2,g2 PIN 38,37,40,41,42,43,44 ISTYPE'BUFFER,COM'; "Anzeige 2
a1,b1,c1,d1,e1,f1,g1 PIN 4,3,6,7,8,9,10 ISTYPE'BUFFER,COM'; "Anzeige 1
"************* Funktionstabelle Anzeige 2 (Einer) ********************************
TRUTH_TABLE (ctrE -> [a2,b2,c2,d2,e2,f2,g2]) "Ausgnge Zhler = Eing. Codeumsetzer
0 -> [1 ,1 ,1 ,1 ,1 ,1 ,0 ]; "LEDs high-aktiv!
1 -> [0 ,1 ,1 ,0 ,0 ,0 ,0 ]; " a
2 -> [1 ,1 ,0 ,1 ,1 ,0 ,1 ]; " ---
3 -> [1 ,1 ,1 ,1 ,0 ,0 ,1 ]; " f | g | b
4 -> [0 ,1 ,1 ,0 ,0 ,1 ,1 ]; " ---
5 -> [1 ,0 ,1 ,1 ,0 ,1 ,1 ]; " e | d | c
6 -> [1 ,0 ,1 ,1 ,1 ,1 ,1 ]; " ---
7 -> [1 ,1 ,1 ,0 ,0 ,0 ,0 ];
8 -> [1 ,1 ,1, 1, 1, 1, 1 ];
9 -> [1 ,1 ,1 ,1 ,0 ,1 ,1 ];
"************* Funktionstabelle Anzeige 1 (Zehner) *******************************
TRUTH_TABLE (ctrZ -> [a1,b1,c1,d1,e1,f1,g1])
0 -> [0 ,0 ,0 ,0 ,0 ,0 ,0 ]; "f¸hrende Null dunkel
1 -> [0 ,1 ,1 ,0 ,0 ,0 ,0 ];
2 -> [1 ,1 ,0 ,1 ,1 ,0 ,1 ];
3 -> [1 ,1 ,1 ,1 ,0 ,0 ,1 ];
4 -> [0 ,1 ,1 ,0 ,0 ,1 ,1 ];
5 -> [1 ,0 ,1 ,1 ,0 ,1 ,1 ];
6 -> [1 ,0 ,1 ,1 ,1 ,1 ,1 ];
7 -> [1 ,1 ,1 ,0 ,0 ,0 ,0 ];
8 -> [1 ,1 ,1, 1, 1, 1, 1 ];
9 -> [1 ,1 ,1 ,1 ,0 ,1 ,1 ];
EQUATIONS "***********************************************************************
"2-stelliger Zhler: Einerstelle E = ctrE, Zehnerstelle Z = ctrZ
when start then { "zhlen wenn Start gedr¸ckt
when (ctrE.q == 9) "wenn -> dann
then { when (ctrZ.q ==4)
then {ctrZ.d = 0; "Z=4, E=9 -> Z=0, E=1
ctrE.d = 1;
}
else {ctrZ.d = ctrZ.q +1; "E=9, Z<4 -> Z weiterzhlen
ctrE.d = 0; " -> E=0
}
}
else { ctrE.d = ctrE.q + 1; "E<>9 -> E weiterzhlen
ctrZ.d = ctrZ.q; " -> Z unverndert
}
}
else { ctrE.d = ctrE.q; "stehenbleiben weil
ctrZ.d = ctrZ.q; "nicht Start gedr¸ckt
}
ctrZ.clk = taktein; "gleicher Takt f¸r beide Stellen -> synchroner Zhler
ctrE.clk = taktein; "&Mac220;bertrag Einer -> Zehner entsteht durch Bedingungen oben
TEST_VECTORS ( [start,taktein] -> a1); "Segmente interessieren eigentlich nicht,
@repeat 20 { [1 ,.c. ] -> .x.;} "Start: 20 Takte
@repeat 2 { [0 ,.c. ] -> .x.;} "Stop
@repeat 30 { [1 ,.c. ] -> .x.;} "Start: 30 Takte
"bei der Simulation: Edit-> Show ->Instances -> D -> einzelne Zhlerbits anzeigen
END