Beschreibung:
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