#PICAXE 20M2
#NO_DATA
SETFREQ M32
; SYMBOL Definitions
SYMBOL DIn_7219 = PINB.0
SYMBOL Load_7219 = B.2
SYMBOL Clk_7219 = B.1
; 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 C_1 = b11
Symbol C_2 = b12
Symbol C_3 = b13
Symbol C_4 = b14
Symbol C_5 = b15
Symbol C_6 = b16
Symbol C_7 = b17
Symbol C_8 = b18
Symbol C_9 = b19
Symbol C_0 = b20
;===============================================
; Initialise the PICAXE Pins for communication with the MAX7219
;===============================================
Init:
DIRSB = %00000111
LOW Load_7219
LOW Clk_7219
DIn_7219 = 0
;===============================================
; Main Program loop
;===============================================
GOSUB Initialise7219
'$7E, $30, $6D, $79, $33, $5B, $5F, $70, $7F, $7B, $77, $1F, $4E, $3D, $4F, $47 < number code
' 0 1 2 3 4 5 6 7 8 9 A B C D E F
DO
C_1 = $30 :C_2 = $6D:C_3 = $79:C_4 = $33:C_5 = $5B:C_6 = $5F:C_7 = $70:C_8 = $7F:C_9 = $7B:C_0 = $7E
GOSUB SetDigitDisplay
PAUSE 40000
C_0 = $30 :C_9 = $6D:C_8 = $79:C_7 = $33:C_6 = $5B:C_5 = $5F:C_4 = $70:C_3 = $7F:C_2 = $7B:C_1 = $7E
GOSUB SetDigitDisplay
PAUSE 40000
LOOP
Initialise7219:
Register = Decode: Data_7219 = Dec_Digits : GOSUB ShiftTo7219
Register = Decode: Data_7219 = Dec_Digits : GOSUB ShiftTo7219:PULSOUT Load_7219, 1
Register = Intens : Data_7219 = 10 :GOSUB ShiftTo7219 ' DISPLAY BRIGHTNESS
Register = Intens : Data_7219 = 10 :GOSUB ShiftTo7219:PULSOUT Load_7219, 1
Register = ScanLim : Data_7219 = 1 : GOSUB ShiftTo7219 ' 0 to 1 only using 2 digits on 2nd max7219
Register = ScanLim : Data_7219 = 7 : GOSUB ShiftTo7219:PULSOUT Load_7219, 1
Register = ShutDwn : Data_7219 = Set_On : GOSUB ShiftTo7219
Register = ShutDwn : Data_7219 = Set_On : GOSUB ShiftTo7219 :PULSOUT Load_7219, 1
Register = DigTest : Data_7219 = Set_Off : GOSUB ShiftTo7219
Register = DigTest : Data_7219 = Set_Off : GOSUB ShiftTo7219:PULSOUT Load_7219, 1
RETURN
SetDigitDisplay:
' second max7219 ---------------------------------------------
Register = Digit1 : Data_7219 = C_0 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = Digit0 : Data_7219 = C_9 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
'first max7219 ------------------------------------------------
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit0 : Data_7219 = C_1 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit1 : Data_7219 = C_2 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit2 : Data_7219 = C_3 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit3 : Data_7219 = C_4 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit4 : Data_7219 = C_5 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit5 : Data_7219 = C_6 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit6 : Data_7219 = C_7 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
Register = $00 : Data_7219 = $00 : GOSUB ShiftTo7219 ': PULSOUT Load_7219, 1
Register = Digit7 : Data_7219 = C_8 : GOSUB ShiftTo7219 : PULSOUT Load_7219, 1
RETURN
ShiftTo7219:
PULSOUT Clk_7219, 1 ; bit 15 is don't care - enable if two or more MAX7219 are cascased together
PULSOUT Clk_7219, 1 ; bit 14 is don't care
PULSOUT Clk_7219, 1 ; bit 13 is don't care
PULSOUT Clk_7219, 1 ; bit 12 is don't care
DIn_7219 = bit11 : PULSOUT Clk_7219, 1
DIn_7219 = bit10 : PULSOUT Clk_7219, 1
DIn_7219 = bit9 : PULSOUT Clk_7219, 1
DIn_7219 = bit8 : PULSOUT Clk_7219, 1
DIn_7219 = bit7 : PULSOUT Clk_7219, 1
DIn_7219 = bit6 : PULSOUT Clk_7219, 1
DIn_7219 = bit5 : PULSOUT Clk_7219, 1
DIn_7219 = bit4 : PULSOUT Clk_7219, 1
DIn_7219 = bit3 : PULSOUT Clk_7219, 1
DIn_7219 = bit2 : PULSOUT Clk_7219, 1
DIn_7219 = bit1 : PULSOUT Clk_7219, 1
DIn_7219 = bit0 : PULSOUT Clk_7219, 1
RETURN