newplumber
Senior Member
Hi
I wanted to make a 10 digit display so I could random do levels on the card game Phase 10
Thanks to Hippy which gave me the random code/idea and Westaust55 for making sample codes for the max7219
What this project does is just basically gives a random order of level as you play the game
first part of code
I wanted to make a 10 digit display so I could random do levels on the card game Phase 10
Thanks to Hippy which gave me the random code/idea and Westaust55 for making sample codes for the max7219
What this project does is just basically gives a random order of level as you play the game
first part of code
Code:
#PICAXE 20M2 '/// PHASE TEN GAME NUMBER DECIDER
#NO_DATA '/// uses two max7219 chips and one picaxe 20m2
SETFREQ M32 '/// shows random levels in order on a 10 digit display
; SYMBOL Definitions
SYMBOL DIn_7219 = PINB.0 ' 20m2 pin # 18
SYMBOL Load_7219 = B.2 ' 20m2 pin # 16
SYMBOL Clk_7219 = B.1 ' 20m2 pin # 17
; MAX7219 Registers -
SYMBOL No_Op = 0
SYMBOL Digit0 = 1
SYMBOL Digit1 = 2
SYMBOL Digit2 = 3
SYMBOL Digit3 = 4 ; for more digits, dig4 thru dig7 = 5 to 8 respectively
SYMBOL Digit4 = 5
SYMBOL Digit5 = 6
SYMBOL Digit6 = 7
SYMBOL Digit7 = 8
SYMBOL Digit8 = 9
SYMBOL Digit9 = 10
SYMBOL Decode = 9
SYMBOL Intens = 10
SYMBOL ScanLim = 11
SYMBOL ShutDwn = 12
SYMBOL DigTest = 15
SYMBOL Set_Off = 0
SYMBOL Set_On = 1
SYMBOL No_Digits = 7 ; Scan limit for digits 0 to 3 = 4
SYMBOL Dec_Digits = 0 ; decode digits 0 to 3 according to "code B"
SYMBOL Init_Inten = 12 ; 0 (=1/32 PWM on time) to 15 (=31/32 PWM on time)
SYMBOL DigBlank = 15 ; "Code B" value to black a digit
SYMBOL DecimPnt = 128 ; Add this value to a digit value/code when we want the demical point illuminated
; Define variables
SYMBOL Data_7219 = b0
SYMBOL Register = b1
Symbol reserveW0 = w1 ; b2:b3
Symbol randomNumber = w2 ; b4:b5
Symbol numberOfCards = b6
Symbol choosenCard = b7
Symbol level = b8
Symbol card1 = b9
Symbol card2 = b10
Symbol card3 = b11
Symbol card4 = b12
Symbol card5 = b13
Symbol card6 = b14
Symbol card7 = b15
Symbol card8 = b16
Symbol card9 = b17
Symbol card10 = b18
Symbol PTIME = W10 'b20:b21 pause time for clear display to scroll
Symbol S_Switch = B22 ' value of switch on pinC.1 or PinC.0
Symbol B_Switch = b23 ' value if both switches are pressed at the same time
;===============================================
; Initialise the PICAXE Pins for communication with the MAX7219
;===============================================
Init:
DIRSB = %00000111
DIRSC = %00000000
LOW Load_7219
LOW Clk_7219
DIn_7219 = 0
;===============================================
; Main Program loop
;===============================================
GOSUB Initialise7219 'program both max7219 displays
START:
gosub all_ready
DO
B_Switch = 0
If numberOfCards = 0 and S_Switch = 1 Then gosub ONE_AT_TIME 'display 10 digits per switch pushed
If numberOfCards = 0 and S_Switch = 0 Then
bptr = 30
' SerTxd( CR, LF, "New:" )
Gosub StartWithTenCards
EndIf
Gosub ChooseRandom
Gosub ReadCard
'SerTxd( " ", #level )
@bptrinc = level
IF pinc.1 = 1 And pinc.0 = 0 or pinc.1 = 0 And pinc.0 = 1 then :S_Switch = 1 :endif
Gosub RemoveChosenCard
LOOP
StartWithTenCards:
numberOfCards = 10
card1 = 1
card2 = 2
card3 = 3
card4 = 4
card5 = 5
card6 = 6
card7 = 7
card8 = 8
card9 = 9
card10 = 10
Return
ChooseRandom:
For b0 = 0 To 10
Random randomNumber
IF pinc.1 = 1 And pinc.0 = 0 or pinc.1 = 0 And pinc.0 = 1 then :S_Switch = 1 :endif
Next
choosenCard = randomNumber ** numberOfCards + 1
Return
ReadCard:
Select Case choosenCard
Case 1 : level = card1
Case 2 : level = card2
Case 3 : level = card3
Case 4 : level = card4
Case 5 : level = card5
Case 6 : level = card6
Case 7 : level = card7
Case 8 : level = card8
Case 9 : level = card9
Case 10 : level = card10
End Select
Return
RemoveChosenCard:
If choosenCard = 1 Then : card1 = card2 : End If
If choosenCard <= 2 Then : card2 = card3 : End If
If choosenCard <= 3 Then : card3 = card4 : End If
If choosenCard <= 4 Then : card4 = card5 : End If
If choosenCard <= 5 Then : card5 = card6 : End If
If choosenCard <= 6 Then : card6 = card7 : End If
If choosenCard <= 7 Then : card7 = card8 : End If
If choosenCard <= 8 Then : card8 = card9 : End If
If choosenCard <= 9 Then : card9 = card10 : End If
numberOfCards = numberOfCards - 1
Return
ALL_READY:' shows display waiting for switch input
Card10 = $7E :card9 = $00
card8 = $30 :card7 = $00
card6 = $4E :card5 = $00
card4 = $00 :card3 = $77
card2 = $4E :card1 = $4F
gosub SetDigitDisplay_to_scroll
RETURN
ALL_OFF:' shows display waiting for switch input
Card10 = $00 :card9 = $00
card8 = $00 :card7 = $00
card6 = $00 :card5 = $00
card4 = $00 :card3 = $00
card2 = $00 :card1 = $00
gosub SetDigitDisplay_to_scroll
RETURN
ONE_AT_TIME: ' makes each digit display one at time per switch is pressed
gosub ALL_OFF : pause 10000
Peek 30,card1:Peek 31,card2:Peek 32,card3:Peek 33,card4:Peek 34,card5
Peek 35,card6:Peek 36,card7:Peek 37,card8:Peek 38,card9:Peek 39,card10
LOOKUP card1, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card1
LOOKUP card2, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card2
LOOKUP card3, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card3
LOOKUP card4, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card4
LOOKUP card5, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card5
LOOKUP card6, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card6
LOOKUP card7, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card7
LOOKUP card8, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card8
LOOKUP card9, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card9
LOOKUP card10, ($7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $7E), card10
'$7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $77, $1F, $4E, $3D, $4F, $47
' 0 1 2 3 4 5 6 7 8 9 A b c d E F
' second max7219 only 2 digits used ---------------------------------------------
Register = Digit1 : Data_7219 = card10 : GOSUB ShiftTo7219
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = Digit0 : Data_7219 = card9 : GOSUB ShiftTo7219
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
'first max7219 all 8 digits used ------------------------------------------------
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit7 : Data_7219 = card8 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit6 : Data_7219 = card7 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit5 : Data_7219 = card6 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit4 : Data_7219 = card5 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit3 : Data_7219 = card4 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit2 : Data_7219 = card3 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit1 : Data_7219 = card2 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit0 : Data_7219 = card1 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :GOSUB CHECK_SWITCH
Pause 4000 ' delay so switch can release
RETURN
SetDigitDisplay_TO_SCROLL: ' scrolls display on or off
ptime = 1000
' second max7219 ---------------------------------------------
Register = Digit1 : Data_7219 = card10 : GOSUB ShiftTo7219
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = Digit0 : Data_7219 = card9 : GOSUB ShiftTo7219
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
'first max7219 ------------------------------------------------
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit7 : Data_7219 = card8 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit6 : Data_7219 = card7 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit5 : Data_7219 = card6 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit4 : Data_7219 = card5 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit3 : Data_7219 = card4 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit2 : Data_7219 = card3 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit1 : Data_7219 = card2 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219
Register = Digit0 : Data_7219 = card1 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1 :pause Ptime
RETURN
Attachments
-
87.1 KB Views: 22