There you go:
' target PICAXE - 18X
SYMBOL mem = b1
SYMBOL char = b2
SYMBOL pos = b3
SYMBOL col = b5
SYMBOL temp = b6
SYMBOL n2 = b13
SYMBOL tempbyte = b12
SYMBOL outByte = b11
' output pins
SYMBOL row_clock = 0
SYMBOL row_data = 1
SYMBOL row_latch = 2
SYMBOL col_clock = 7
SYMBOL col_data = 6
SYMBOL col_latch = 5
eeprom 0,("AB")
low row_latch
low row_clock
low row_data
low col_latch
low col_clock
low col_data
main:
for mem = 0 to 3
read mem, char
outByte = 0
if char = 0 then goto next_byte
' get index of character
lookdown char,("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1","2","3","4","5","6","7","8","9","0"),pos
' multiply by 5 to retrieve first index in 5*7 grid
pos = pos * 5
for col = 1 to 8
outByte = 0
' 8x8 matrix and chars = 7x5 matrix
if col = 1 or col = 2 or col = 8 then goto skip
' get first value for index
if pos < 105 then
lookup pos,($1F,$24,$44,$24,$1F,$7F,$49,$49,$49,$36,$3E,$41,$41,$41,$22,$7F,$41,$41,$41,$3E,$7F,$49,$49,$41,$41,$7F,$48,$48,$40,$40,$3E,$41,$49,$49,$2E,$7F,$08,$08,$08,$7F,$00,$41,$7F,$41,$00,$02,$01,$41,$7E,$40,$7F,$08,$14,$22,$41,$7F,$01,$01,$01,$01,$7F,$20,$10,$20,$7F,$7F,$10,$08,$04,$7F,$3E,$41,$41,$41,$3E,$7F,$48,$48,$48,$30,$3E,$41,$45,$42,$3D,$7F,$48,$4C,$4A,$31,$32,$49,$49,$49,$26,$40,$40,$7F,$40,$40,$7E,$01,$01,$01,$7E),outByte
else
temp = pos - 105
lookup temp,($7C,$02,$01,$02,$7C,$7F,$02,$04,$02,$7F,$63,$14,$08,$14,$63,$60,$10,$0F,$10,$60,$43,$45,$49,$51,$61,$00,$21,$7F,$01,$00,$21,$43,$45,$49,$31,$41,$41,$49,$49,$36,$0C,$14,$24,$7F,$04,$71,$49,$49,$49,$46,$3E,$45,$49,$49,$26,$40,$40,$40,$40,$7F,$36,$49,$49,$49,$36,$30,$48,$48,$48,$3F,$3E,$51,$7F,$45,$3E,$00,$08,$08,$08,$00,$00,$7F,$41,$00,$00,$00,$00,$41,$7F,$00,$00,$08,$1C,$08,$00,$62,$64,$08,$13,$23),outByte
end if
pos = pos + 1 ' move pos to next char
skip: ' skip to next column
gosub row595
select col
case 1
outByte = $7F
case 2
outByte = $BF
case 3
outByte = $DF
case 4
outByte = $EF
case 5
outByte = $F7
case 6
outByte = $FB
case 7
outByte = $FD
case 8
outByte = $FE
endselect
gosub col595
next col
next_byte:
pause 300
next mem
goto main
row595:
tempbyte = outByte
for n2 = 1 to 8
if tempbyte >= 128 then ' most sig bit (neg temp)
high row_data
else
low row_data
endif
pulsout row_clock,1 ' clock pulse
tempbyte = tempbyte * 2 ' next bit in most sig bit position
next n2
pulsout row_latch,1 ' transfer shift register to latch
return
col595:
tempbyte = outByte
for n2 = 1 to 8
if tempbyte >= 128 then ' most sig bit (neg temp)
high col_data
else
low col_data
endif
pulsout col_clock,1 ' clock pulse
tempbyte = tempbyte * 2 ' next bit in most sig bit position
next n2
pulsout col_latch,1 ' transfer shift register to latch
return