' 2 x 20 module LED matrix display by Janke 2017-06-09 GOSUB setup: ' ------------------ mainloop: size=1 displaytime = 4000 a$="This is the first row of characters -" a2$="and of course this is then the second." gosub output: size=2 displaytime = 2000 a$="Testing this BIG font ! !" gosub output: goto mainloop: END ' ------------------ output: GOSUB buildbits: GOSUB display: GOSUB show: return ' ------------------ buildbits: ' Build bit data: IF size=1 THEN gosub buildbitsupper: gosub buildbitslower: ELSE ' size=2 u=1 FOR k=1 TO LEN(a$) j=ASCII(MID$(a$,k)) a = largepointer(1,j-31) b = largepointer(2,j-31) FOR i=a TO b bytedata(u)=(large(i)&255) bytedata2(u)=INT(large(i)/256) u=u+1 if u>modules*8 then u=modules*8+1 endif NEXT i NEXT k FOR i=u TO 8*modules bytedata(i)=0 bytedata2(i)=0 NEXT i gosub convertupper: gosub convertlower: ENDIF RETURN ' ------------------ buildbitsupper: u=1 FOR k=1 TO LEN(a$) j=ASCII(MID$(a$,k)) a = smallpointer(1,j-31) b = smallpointer(2,j-31) FOR i=a TO b bytedata(u)=small(i) u=u+1 if u>modules*8 then u=modules*8+1 endif NEXT i NEXT k FOR i=u TO 8*modules bytedata(i)=0 NEXT i convertupper: for mdl = 0 to modules-1 b=1 for j = 8 to 1 step -1 t=0 for i = 8 to 1 step -1 t = t+t if ( bytedata(i+mdl*8) & b ) <> 0 then t = t+1 endif next i bytedata_top(j) = t b=b+b next j for ij=1 to 8 bytedata(ij+mdl*8)=bytedata_top(ij) next ij next mdl RETURN ' ------------------ buildbitslower: u=1 FOR k=1 TO LEN(a2$) j=ASCII(MID$(a2$,k)) a = smallpointer(1,j-31) b = smallpointer(2,j-31) FOR i=a TO b bytedata2(u)=small(i) u=u+1 if u>modules*8 then u=modules*8+1 endif NEXT i NEXT k FOR i=u TO 8*modules bytedata2(i)=0 NEXT i convertlower: for mdl = 0 to modules-1 b=1 for j = 8 to 1 step -1 t=0 for i = 8 to 1 step -1 t = t+t if ( bytedata2(i+mdl*8) & b ) <> 0 then t = t+1 endif next i bytedata_btm(j) = t b=b+b next j for ij=1 to 8 bytedata2(ij+mdl*8)=bytedata_btm(ij) next ij next mdl RETURN ' ------------------ display: ' shift out stuff gosub hide: gosub displayupper: gosub displaylower: GOSUB show: wait displaytime RETURN ' ------------------ displaylower: FOR q = 1 TO 8 FOR n = modules-1 TO 0 STEP -1 SHIFTOUT (datapin2,clockpin2,0,q) SHIFTOUT (datapin2,clockpin2,0,bytedata2(q+n*8)) NEXT n OUTD loadpin2,1 OUTD loadpin2,0 NEXT q RETURN ' ------------------ displayupper: FOR q = 1 TO 8 FOR n = modules-1 TO 0 STEP -1 SHIFTOUT (datapin,clockpin,0,q) SHIFTOUT (datapin,clockpin,0,bytedata(q+n*8)) NEXT n OUTD loadpin,1 OUTD loadpin,0 NEXT q RETURN ' ------------------ initialize: ' NOPs to clear MAX buffers address=0 data=0 GOSUB init: ' no scan limit address=11 data=7 GOSUB init: ' 7-segment decode mode off address=9 data=0 GOSUB init: ' test mode off address=15 data=0 GOSUB init: ' shutdown off GOSUB show: ' set brightness (data = 0 to 15) ' Mind current consumption & power supply ripple! brightness: address=10 data=bright GOSUB init: RETURN ' ------------------ init: FOR n=1 TO modules SHIFTOUT (datapin,clockpin,0,address) SHIFTOUT (datapin,clockpin,0,data) SHIFTOUT (datapin2,clockpin2,0,address) SHIFTOUT (datapin2,clockpin2,0,data) NEXT n OUTD loadpin,1 OUTD loadpin2,1 OUTD loadpin,0 OUTD loadpin2,0 RETURN ' ------------------ show: address=12 data=1 GOSUB init: RETURN ' ------------------ hide: address=12 data=0 GOSUB init: RETURN ' ------------------ clear: GOSUB hide: data=0 FOR m=1 TO 8 address=m GOSUB init: NEXT m RETURN ' ------------------ setup: ' EzSBC1 setup modules = 20 ' number of modules datapin2=26 loadpin2=25 clockpin2=27 datapin=30 loadpin=31 clockpin=32 PINMODE datapin, OUT PINMODE clockpin, OUT PINMODE loadpin, OUT PINMODE datapin2, OUT PINMODE clockpin2, OUT PINMODE loadpin2, OUT bright=0 DIM bytedata(modules*8+4) DIM bytedata2(modules*8+4) DIM bytedata_top(8) DIM bytedata_btm(8) GOSUB datahere: ' Load all the pixel data GOSUB initialize: ' Reset the MAX parameters GOSUB clear: ' Erase the display RETURN ' ------------------ datahere: ' small font DIM small(475)=0x00,0x00,0x00,0x00,0x5F,0x00,0x03,0x00,0x03,0x00,0x7c,0x7e,0x13,0x13,0x7e,0x7c,0x00,0x7f,0x7F,0x49,0x49,0x7f,0x36,0x00,0x3e,0x7f,0x41,0x41,0x63,0x22,0x00,0x36,0x36,0x00,0x03,0x00,0x1C,0x22,0x41,0x00,0x41,0x22,0x1C,0x00,0x28,0x18,0x0E,0x18,0x28,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0xA0,0x60,0x00,0x10,0x10,0x10,0x00,0x00,0x60,0x60,0x00,0x60,0x1C,0x03,0x00,0x00,0x00,0x3E,0x41,0x41,0x3E,0x00,0x42,0x7F,0x40,0x00,0x62,0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x36,0x00,0x18,0x14,0x12,0x7F,0x00,0x27,0x45,0x45,0x39,0x00,0x3E,0x49,0x49,0x30,0x00,0x01,0x71,0x09,0x07,0x00,0x36,0x49,0x49,0x36,0x00,0x06,0x49,0x49,0x3E,0x00,0x14,0x00,0x80,0x50,0x00,0x10,0x28,0x44,0x00,0x14,0x14,0x14,0x00,0x44,0x28,0x10,0x00,0x02,0x59,0x09,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x11,0x11,0x7e,0x00,0x00,0x7F,0x49,0x49,0x36,0x00,0x3E,0x41,0x41,0x22,0x00,0x7F,0x41,0x41,0x3E,0x00,0x7F,0x49,0x49,0x41,0x00,0x7F,0x09,0x09,0x01,0x00,0x3E,0x41,0x49,0x7A,0x00,0x7F,0x08,0x08,0x7F,0x00,0x41,0x7F,0x41,0x00,0x30,0x40,0x41,0x3F,0x00,0x00,0x7F,0x14,0x22,0x41,0x00,0x7F,0x40,0x40,0x40,0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x7F,0x09,0x09,0x06,0x00,0x3E,0x41,0x61,0xC1,0xBE,0x00,0x7F,0x09,0x19,0x66,0x00,0x46,0x49,0x49,0x31,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x3F,0x40,0x40,0x3F,0x00,0x0F,0x30,0x40,0x30,0x0F,0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x78,0x17,0x15,0x17,0x78,0x00,0x7D,0x12,0x12,0x12,0x7D,0x00,0x3D,0x42,0x42,0x42,0x3D,0x00,0x01,0x01,0x01,0x00,0x00,0x80,0x80,0x80,0x00,0xFF,0x00,0x00,0x20,0x54,0x54,0x78,0x00,0x7F,0x44,0x44,0x38,0x00,0x38,0x44,0x44,0x44,0x00,0x38,0x44,0x44,0x7F,0x00,0x38,0x54,0x54,0x18,0x00,0x04,0x7E,0x05,0x00,0x98,0xA4,0xA4,0x7C,0x00,0x7F,0x04,0x04,0x78,0x00,0x44,0x7D,0x40,0x00,0x80,0x84,0x7D,0x00,0x7F,0x10,0x28,0x44,0x00,0x3F,0x40,0x00,0x7C,0x04,0x7C,0x04,0x78,0x00,0x7C,0x04,0x04,0x78,0x00,0x38,0x44,0x44,0x38,0x00,0xFC,0x24,0x24,0x18,0x00,0x18,0x24,0x24,0xFC,0x00,0x7C,0x08,0x04,0x04,0x00,0x48,0x54,0x54,0x24,0x00,0x04,0x3F,0x44,0x00,0x3C,0x40,0x40,0x7C,0x00,0x0C,0x30,0x40,0x30,0x0C,0x00,0x3C,0x40,0x3C,0x40,0x3C,0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x9C,0xA0,0xA0,0x7C,0x00,0x44,0x64,0x54,0x4C,0x00,0x20,0x54,0x55,0x7C,0x00,0x20,0x55,0x54,0x79,0x00,0x39,0x44,0x44,0x39,0x00,0x06,0x09,0x09,0x06,0x00,0x09,0x11,0xFF,0xA8,0x88,0x00 DIM smallpointer(2,96)= 1,2,5,6,7,10,11,17,18,24,25,31,32,34,35,36,37,40,41,44,45,50,51,56,57,59,60,63,65,67,68,71,74,78,78,82,83,87,88,92,93,97,98,102,103,107,108,112,113,117,118,122,123,124,125,127,128,131,132,135,136,139,140,144,144,150,151,155,157,161,162,166,167,171,172,176,177,181,182,186,187,191,192,195,196,200,202,206,207,211,212,217,218,223,224,229,230,234,235,240,241,245,246,250,251,256,257,261,262,267,268,273,274,279,280,285,286,291,292,297,298,303,304,309,310,312,315,317,319,319,322,326,327,331,332,336,337,341,342,346,347,350,351,355,356,360,361,364,365,368,369,373,374,376,377,382,383,387,388,392,393,397,398,402,403,407,408,412,413,416,417,421,422,427,428,433,434,439,440,444,445,449,450,454,455,459,460,464,465,469,470,475 ' large font DIM large(788)=0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x33FE,0x33FE,0x0000,0x000E,0x0000,0x000E,0x0000,0x0220,0x0FF8,0x0220,0x0220,0x0FF8,0x0220,0x0000,0x0470,0x08F8,0x0888,0x3FFE,0x0888,0x0F88,0x0710,0x0000,0x001C,0x3814,0x061C,0x01C0,0x1C30,0x140E,0x1C00,0x0000,0x1E38,0x3FFC,0x20C2,0x2122,0x1E1E,0x140C,0x2200,0x0000,0x0016,0x000E,0x0000,0x0FF8,0x1FFC,0x2002,0x2002,0x0000,0x2002,0x2002,0x1FFC,0x0FF8,0x0000,0x0480,0x0280,0x01F0,0x0280,0x0480,0x0000,0x0080,0x0080,0x0080,0x07F0,0x0080,0x0080,0x0080,0x0000,0xB000,0x7000,0x0000,0x0080,0x0080,0x0080,0x0080,0x0080,0x0080,0x0000,0x3000,0x3000,0x0000,0x3800,0x0600,0x01C0,0x0030,0x000E,0x0000,0x0FF8,0x1FFC,0x2002,0x2002,0x2002,0x2002,0x1FFC,0x0FF8,0x0000,0x2010,0x2008,0x3FFC,0x3FFE,0x2000,0x2000,0x0000,0x380C,0x3C06,0x2602,0x2302,0x2186,0x20FC,0x3078,0x0000,0x1004,0x3006,0x2082,0x2082,0x2082,0x1F7C,0x0E38,0x0000,0x0300,0x02C0,0x0230,0x020C,0x2202,0x3FFE,0x3FFE,0x2200,0x0000,0x107E,0x307E,0x2042,0x2042,0x30C2,0x1F82,0x0F02,0x0000,0x0FF8,0x1FFC,0x2082,0x2042,0x2042,0x1F86,0x0F04,0x0000,0x0006,0x0002,0x3C02,0x3F82,0x03F2,0x007E,0x000E,0x0000,0x0E38,0x1F7C,0x2082,0x2082,0x2082,0x1F7C,0x0E38,0x0000,0x1078,0x30FC,0x2102,0x2102,0x2082,0x1FFC,0x0FF8,0x0000,0x0630,0x0630,0x0000,0xB180,0x7180,0x0000,0x0080,0x0140,0x0220,0x0410,0x0000,0x0140,0x0140,0x0140,0x0140,0x0140,0x0140,0x0000,0x0410,0x0220,0x0140,0x0080,0x0000,0x0004,0x0006,0x3302,0x3382,0x00C2,0x007E,0x003C,0x0000,0x07F0,0x0808,0x10C4,0x1124,0x1124,0x1124,0x09F8,0x0000,0x2000,0x3C00,0x2380,0x0270,0x020E,0x0206,0x023E,0x23F0,0x3F80,0x3C00,0x2000,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x2082,0x2082,0x3086,0x1F7C,0x0E38,0x0000,0x0FF8,0x1FFC,0x3006,0x2002,0x2002,0x2002,0x1004,0x180E,0x0000,0x2002,0x3FFE,0x3FFE,0x2002,0x2002,0x2002,0x3006,0x1FFC,0x0FF8,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x2082,0x21C2,0x2002,0x3006,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x0082,0x01C2,0x0002,0x0006,0x0000,0x0FF8,0x1FFC,0x3006,0x2002,0x2002,0x2084,0x1F8E,0x0F80,0x0000,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x0080,0x0080,0x2082,0x3FFE,0x3FFE,0x2002,0x0000,0x2002,0x3FFE,0x3FFE,0x2002,0x0000,0x0800,0x1800,0x2000,0x2000,0x2002,0x1FFE,0x0FFE,0x0002,0x0000,0x2002,0x3FFE,0x3FFE,0x2182,0x0340,0x0620,0x2C10,0x380A,0x3006,0x2002,0x0000,0x2002,0x3FFE,0x3FFE,0x2002,0x2000,0x2000,0x2000,0x3000,0x0000,0x2002,0x3FFE,0x3FFE,0x200C,0x0030,0x00C0,0x0300,0x00C0,0x0030,0x200C,0x3FFE,0x3FFE,0x2002,0x0000,0x2002,0x3FFE,0x2006,0x001E,0x00F8,0x03C0,0x0E00,0x3802,0x3FFE,0x0002,0x0000,0x0FF8,0x1FFC,0x1004,0x2002,0x2002,0x2002,0x1004,0x1FFC,0x0FF8,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x0082,0x0082,0x0086,0x007C,0x0038,0x0000,0x0FF8,0x1FFC,0x1004,0x2402,0x3802,0x6002,0x9004,0x9FFC,0x0FF8,0x0000,0x2002,0x3FFE,0x3FFE,0x2082,0x0182,0x0782,0x1C86,0x307C,0x2038,0x0000,0x1838,0x307C,0x20C6,0x2082,0x2082,0x3182,0x1F06,0x0E0C,0x0000,0x0006,0x0002,0x2002,0x3FFE,0x3FFE,0x2002,0x0002,0x0006,0x0000,0x0002,0x0FFE,0x1FFE,0x2002,0x2000,0x2000,0x2000,0x1002,0x0FFE,0x0002,0x0000,0x0002,0x000E,0x007E,0x03F2,0x0F80,0x3C00,0x3000,0x0C00,0x0380,0x0072,0x000E,0x0002,0x0000,0x0002,0x001E,0x01FE,0x0FE2,0x3E00,0x3000,0x0E00,0x01C0,0x0F80,0x1E00,0x3000,0x0F00,0x00F2,0x001E,0x0002,0x0000,0x2002,0x380E,0x263E,0x01F2,0x01C0,0x0380,0x2640,0x3C32,0x380E,0x2002,0x0000,0x0002,0x000E,0x003E,0x2072,0x3FC0,0x3FC0,0x20C0,0x0032,0x000E,0x0002,0x0000,0x2006,0x3802,0x3C02,0x2702,0x23C2,0x20F2,0x203A,0x300E,0x0000,0x2000,0x3C00,0x2380,0x0276,0x0209,0x0209,0x0239,0x23F6,0x3F80,0x3C00,0x2000,0x0000,0x2000,0x3C03,0x2383,0x0270,0x020E,0x0206,0x023C,0x23F0,0x3F83,0x3C03,0x2000,0x0000,0x0FF3,0x1FFB,0x1008,0x2004,0x2004,0x2004,0x1008,0x1FFB,0x0FF3,0x0000,0x0001,0x0001,0x0001,0x0001,0x0001,0x0000,0x8000,0x8000,0x8000,0x8000,0x0000,0xFFFF,0xFFFF,0x0000,0x1C00,0x3E40,0x2260,0x2220,0x2220,0x3FE0,0x3FC0,0x2000,0x0000,0x0002,0x1FFE,0x3FFE,0x2040,0x2020,0x2020,0x1FC0,0x0F80,0x0000,0x0F80,0x1FC0,0x3060,0x2020,0x2020,0x1060,0x0000,0x0000,0x0F80,0x1FC0,0x2020,0x2020,0x1042,0x3FFE,0x3FFE,0x2000,0x0000,0x0F80,0x1FC0,0x2220,0x2220,0x2220,0x23C0,0x1380,0x0000,0x2020,0x3FFC,0x3FFE,0x2022,0x0024,0x0000,0x6BC0,0xFFE0,0x9420,0x9420,0x97E0,0xF1C0,0x6020,0x0000,0x2002,0x3FFE,0x3FFE,0x2040,0x0020,0x2020,0x3FE0,0x3FC0,0x2000,0x0000,0x2020,0x3FE6,0x3FE6,0x2000,0x0000,0x4000,0x8020,0xFFE6,0x7FE6,0x0000,0x2002,0x3FFE,0x3FFE,0x0600,0x0D00,0x38A0,0x3060,0x2020,0x0000,0x0002,0x1FFE,0x3FFE,0x2000,0x0000,0x2020,0x3FE0,0x3FE0,0x0040,0x0020,0x3FE0,0x3FC0,0x0040,0x0020,0x3FE0,0x3FC0,0x0000,0x2020,0x3FE0,0x3FE0,0x2040,0x0020,0x2020,0x3FE0,0x3FC0,0x2000,0x0000,0x0F80,0x1FC0,0x2020,0x2020,0x2020,0x1FC0,0x0F80,0x0000,0x8020,0xFFE0,0xFFC0,0x8820,0x1020,0x1020,0x0FC0,0x0780,0x0000,0x0780,0x0FC0,0x1020,0x1020,0x8820,0xFFE0,0xFFE0,0x8020,0x0000,0x2020,0x3FE0,0x3FE0,0x2040,0x0020,0x0020,0x0060,0x0000,0x11C0,0x23E0,0x2220,0x2220,0x3E20,0x1C40,0x0000,0x0020,0x1FF8,0x3FFC,0x2020,0x2020,0x0000,0x0020,0x1FE0,0x3FE0,0x2000,0x2000,0x1020,0x3FE0,0x3FE0,0x2000,0x0000,0x0020,0x00E0,0x07E0,0x1F20,0x3800,0x1800,0x0720,0x00E0,0x0020,0x0000,0x0020,0x01E0,0x1FE0,0x3E20,0x2000,0x1E00,0x2000,0x1E20,0x01E0,0x0020,0x0000,0x2020,0x3860,0x25E0,0x0300,0x0600,0x3D20,0x38E0,0x2020,0x0000,0x0020,0x40E0,0x83E0,0x8F00,0x7C00,0x3000,0x0E20,0x01E0,0x0020,0x0000,0x2060,0x3820,0x2E20,0x2720,0x21A0,0x3060,0x0000,0x1C00,0x3E40,0x2264,0x222A,0x222A,0x3FE4,0x3FC0,0x2000,0x0000,0x1C00,0x3E46,0x2266,0x2220,0x2226,0x3FE6,0x3FC0,0x2000,0x0000,0x0F80,0x1FC6,0x2026,0x2020,0x2026,0x1FC6,0x0F80,0x0000,0x0000,0x000C,0x0012,0x0012,0x000C,0x0000,0x0000,0x0022,0x0042,0x0042,0x07FE,0x0540,0x0540,0x7D40,0x0800,0x1000,0x2000,0x7C00,0x0000 DIM largepointer(2,96)=1,4,7,9,10,13,14,20,21,28,29,36,37,44,45,47,48,52,53,57,58,63,64,71,72,74,75,81,82,84,85,90,91,99,100,106,107,114,115,122,123,131,132,139,140,147,148,154,155,163,164,171,172,174,175,177,178,182,183,189,190,194,195,202,203,210,211,222,223,232,233,241,242,251,252,260,261,269,270,278,280,290,291,295,296,304,305,315,316,324,325,338,339,349,350,359,360,369,370,379,380,389,390,398,399,407,408,418,419,431,432,447,448,458,459,469,470,478,479,490,491,502,503,512,513,516,519,522,524,524,527,535,536,544,545,551,553,561,562,569,570,575,576,583,584,593,594,598,599,603,604,612,613,617,618,629,630,639,640,647,648,656,657,665,666,673,674,680,681,686,687,696,697,706,707,717,718,726,727,736,737,743,744,752,753,761,762,769,770,776,777,788 RETURN ' ------------------ END