I am posting my code for the LED_Matrix board
Hi everyone,
I have my new username scrolling on the LED Matrix board.
p2Man
https://youtu.be/izLHN4wvJnE
I have my new username scrolling on the LED Matrix board.
p2Man
https://youtu.be/izLHN4wvJnE

Comments
P2 Man
Sounds good.
P2Man
CON BASE2 = 2 BASE8 = 8 BASE16 = 16 NULL = 0 PERIOD_ASCII_CDE = 46 VAR stk[64] matrixCogID byte fd, pf PUB LED_matrixStart() 'start next free cog and if started get its ID matrixCogID := COGSPIN(NEWCOG, LED_matrix(), @stk) PUB LED_matrixStop() 'terminates the cog that renders to the LED matrix COGSTOP(matrixCogID) PUB LED_matrix() | byte ph, ptv pf := TRUE repeat 'pause frame from rendering while pf is 'FALSE' repeat until pf 'fd set to 'FALSE' means rendering is about to start fd := FALSE 'ph value drives pins 0-7 high and helps compute word[] and bit positions repeat ph from 0 to 7 'ptv values are usd to drive selected pin(s) low and for computations repeat ptv from 0 to 6 'turns on LEDS according to one bits in bmp[].[15..8] if bmp[(ptv + ph * 7) / 8].[15 - (ptv + ph * 7) +// 8 ADDBITS 0] PINH(ph) PINL(plt[ptv + ph * 7]) WAITCT(clkfreq / 56 / 50 + GETCT()) DIRA.[7..0] := 0 'fd set to'TRUE means rendering is finished fd := TRUE PUB displayScrollingStr(as, d) | byte c, l 'write char bitmap to bmp[].[7..0] until 'NULL' terminator is reached repeat while byte[as] c := byte[as++] asciiChrToBmp(c, 0) 'shift left eight times to get next char fully displayed repeat 8 'shift left seven rows of bmp by one bit to make more columns of char visible repeat l from 0 to 6 bmp[l] <<= 1 WAITCT(d + GETCT()) PUB asciiChrToBmp(a, b) | byte l, long ca 'pause rendering to allow changes to bmp stopRendering() 'non-printable chars are displayed as a period if a < 32 a := PERIOD_ASCII_CDE 'calculate address of char ca := @space + ((a - 32) * 7) 'writes char bitmap to either high/low byte of bmp repeat l from 0 to 6 WORD[@bmp][l].[b * 8 addbits 7] := byte[ca++] 'changes to bmp are done start rendering startRendering() PUB startRendering() 'set pf to start rendering pf := TRUE PUB stopRendering() 'set pf to stop rendering and wait to make sure rendering is done pf := FALSE repeat until fd PUB displayNumBaseToStr(n , b, d, s) | byte dg[32], i1, long dgt, i, t 'initialize indexes to are two arrays i := 0 i1 := 0 'n is negative place minus sign before number, make n positive- 'so the number is displayed properly if n & $80000000 == $80000000 && (s == TRUE) numBaseStr[i1++] := "-" ABS= n 'number base prefixes placed before number case b BASE2: numBaseStr[i1++] := "0" numBaseStr[i1++] := "b" BASE8: numBaseStr[i1++] := "0" numBaseStr[i1++] := "o" BASE16: numBaseStr[i1++] := "0" numBaseStr[i1++] := "x" 'extract digits of number in reverse order repeat if s dgt := n // b else dgt := n +// b dg[i++] := ABS (dgt) if s n /= b else n +/= b while n <> 0 'write digits in proper order to output string repeat numBaseStr[i1++] := decHex[dg[--i]] while i > 0 'place null trminator at the end of string numBaseStr[i1] := NULL 'scrolling number on LED_Matrix displayScrollingStr(@numBaseStr, d) DAT Plt BYTE 1,2,3,4,5,6,7 BYTE 0,2,3,4,5,6,7 BYTE 0,1,3,4,5,6,7 BYTE 0,1,2,4,5,6,7 BYTE 0,1,2,3,5,6,7 BYTE 0,1,2,3,4,6,7 BYTE 0,1,2,3,4,5,7 BYTE 0,1,2,3,4,5,6 numBaseStr BYTE 0[35] decHex BYTE "0123456789ABCDEF" bmp WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 'ASCII Code Character ' ----------- --------- space BYTE %00000000 '32 [space] BYTE %00000000 BYTE %00000000 BYTE %00000000 BYTE %00000000 BYTE %00000000 BYTE %00000000 exclamation BYTE %00010000 '33 ! BYTE %00010000 BYTE %00010000 BYTE %00010000 BYTE %00010000 BYTE %00000000 BYTE %00010000******************************Below is code that I used to test the LED_Matrix object******************************
CON OBJ lm : "JHB_LED_matrix_8x7_V1.0_Update" VAR PUB main() lm.LED_matrixStart() repeat 'display character immediatly to LED_Matrix lm.asciiChrToBmp(127, 1) WAITCT(clkfreq + GETCT()) 'example how to display a string between double quotes lm.displayScrollingStr(string("Man!!! "), clkfreq / 15) 'example of how to display a string defined in a 'DAT' section lm.displayScrollingStr(@myName, clkfreq / 15) 'display scrolling 'SPACE' to clear LED_Matrix lm.displayScrollingStr(string(" "), clkfreq / 15) 'method to display signed/unsigned numbers in different bases 'lm.displayNumBaseToStr(number, base, delay, signed = TRUE/FALSE) lm.displayNumBaseToStr(4294967295 , 10, clkfreq / 15, FALSE) lm.displayScrollingStr(string(" "), clkfreq / 15) DAT 'examples of how to define a 'NULL' terminated strings in a 'DAT' section myName byte "Insert Name Here ", 0 P2Logo byte 127,32, "Logo", 0P2Man
CON OBJ cs : "LED_matrix_character_set" VAR stk[64] matrixCogID byte fd, pf PUB start() 'start next free cog and if started get its ID matrixCogID := COGSPIN(NEWCOG, LED_matrix(), @stk) PUB stop() 'terminates the cog that renders to the LED matrix COGSTOP(matrixCogID) PUB LED_matrix() | byte ph, ptv pf := TRUE repeat 'pause frame from rendering while pf is 'FALSE' repeat until pf 'fd set to 'FALSE' means rendering is about to start fd := FALSE 'ph value drives pins 0-7 high and helps compute word[] and bit positions repeat ph from 0 to 7 'ptv values are usd to drive selected pin(s) low and for computations repeat ptv from 0 to 6 'turns on LEDS according to one bits in bmp[].[15..8] if bmp[(ptv + ph * 7) / 8].[15 - (ptv + ph * 7) +// 8 ADDBITS 0] PINH(ph) PINL(plt[ptv + ph * 7]) WAITCT(clkfreq / 56 / 50 + GETCT()) DIRA.[7..0] := 0 'fd set to'TRUE means rendering is finished fd := TRUE PUB get_fd() : fdv return fd PUB get_numBaseStrAdr() : a return @numBaseStr PUB get_decHexAdr() : a return @decHex PUB get_bmpAdr() : a return @bmp PUB get_asciiAdr(asc) : a return cs.get_asciiAdr(asc) PUB set_pf(tf) pf := tf PUB set_fd(tf) fd := tf DAT Plt BYTE 1,2,3,4,5,6,7 BYTE 0,2,3,4,5,6,7 BYTE 0,1,3,4,5,6,7 BYTE 0,1,2,4,5,6,7 BYTE 0,1,2,3,5,6,7 BYTE 0,1,2,3,4,6,7 BYTE 0,1,2,3,4,5,7 BYTE 0,1,2,3,4,5,6 numBaseStr BYTE 0[35] decHex BYTE "0123456789ABCDEF" bmp WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000 WORD %00000000_00000000*********************************Below method calls object******************************
CON BASE2 = 2 BASE8 = 8 BASE16 = 16 NULL = 0 PERIOD_ASCII_CDE = 46 OBJ lm : "JHB_LED_matrix_8x7_V1.0_Update" PUB start() lm. start() PUB displayScrollingStr(as, d) | byte c, l, long ba 'write char bitmap to bmp[].[7..0] until 'NULL' terminator is reached repeat while byte[as] c := byte[as++] asciiChrToBmp(c, 0) 'shift left eight times to get next char fully displayed repeat 8 'shift left seven rows of bmp by one bit to make more columns of char visible repeat l from 0 to 6 WORD[lm.get_bmpAdr()][l] <<= 1 WAITCT(d + GETCT()) PUB asciiChrToBmp(a, b) | byte l, long ca 'pause rendering to allow changes to bmp stopRendering() 'non-printable chars are displayed as a period if a < 32 a := PERIOD_ASCII_CDE 'calculate address of char ca := lm.Get_asciiAdr(a) 'writes char bitmap to either high/low byte of bmp repeat l from 0 to 6 WORD[lm.get_bmpAdr()][l].[b * 8 addbits 7] := byte[ca++] 'changes to bmp are done start rendering startRendering() PUB startRendering() 'set pf to start rendering lm.set_pf(TRUE) PUB stopRendering() 'set pf to stop rendering and wait to make sure rendering is done lm.set_pf(FALSE) repeat until lm.get_fd() PUB displayNumBaseToStr(n , b, d, s) | byte dg[32], i1, long dgt, i, t 'initialize indexes to are two arrays i := 0 i1 := 0 'n is negative place minus sign before number, make n positive- 'so the number is displayed properly if n & $80000000 == $80000000 && (s == TRUE) BYTE[lm.get_numBaseStrAdr()][i1++] := "-" ABS= n 'number base prefixes placed before number case b BASE2: BYTE[lm.get_numBaseStrAdr()][i1++] := "0" BYTE[lm.get_numBaseStrAdr()][i1++] := "b" BASE8: BYTE[lm.get_numBaseStrAdr()][i1++] := "0" BYTE[lm.get_numBaseStrAdr()][i1++] := "o" BASE16: BYTE[lm.get_numBaseStrAdr()][i1++] := "0" BYTE[lm.get_numBaseStrAdr()][i1++] := "x" 'extract digits of number in reverse order repeat if s dgt := n // b else dgt := n +// b dg[i++] := ABS (dgt) if s n /= b else n +/= b while n <> 0 'write digits in proper order to output string repeat BYTE[lm.get_numBaseStrAdr()][i1++] := BYTE[lm.get_decHexAdr()][dg[--i]] while i > 0 'place null trminator at the end of string BYTE[lm.get_numBaseStrAdr()][i1++] := NULL 'scrolling number on LED_Matrix displayScrollingStr(lm.get_numBaseStrAdr(), d)I am going to try and add a little more functionality.
HydraHacker