![]() |
Forum Index : Microcontroller and PC projects : MM+: SSD1963 paged driver
Author | Message | ||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
In working with the 3D demo I wanted to find a way of updating the display without flicker. a paged display with updates happening in the background was the answer ![]() If you have a 4.3" SSD1963 display, please try the attached driver. The driver allows you to use 480 x 816 lines (816 = 3 x 272) on a 4.3" display. Now of course you can only display 272 lines at any one time but by using the command "SSD1963 page-number" (valid numbers are 1-3) you can instantly move between different sets of lines. "SSD1963 1" shows lines 0-271, "SSD1963 2" shows lines 272 to 543 and "SSD1963 3" shows lines 544 to 815. This allows you to prepare graphics on one page that isn't visible and then swap to it for display. It should also allow for 3 pages of different GUI controls Load the driver and then type "library save" Then load and run the simple demo program. You could also load images into different pages in the background and swap between images instantly. The rotating 3d cube uses this paged driver the source for this is also attached Simple demo font 5
text 0,0,"page 1" text 0,272,"page 2" text 0,544,"page 3" do ssd1963 1 pause 1000 ssd1963 2 pause 1000 ssd1963 3 pause 1000 loop Paged Driver sub mm.startup
'orientations: LANDSCAPE 1, PORTRAIT 2, RLANDSCAPE 3, RPORTRAIT 4 SSD1963 0,0,1,4 'Page number (use 0 for initialising the driver), Number of RD pin (0 if not used), orientation, size of display in inches" ' note the paged display facility only works on the 4.3" display end sub CSUB SSD1963 00000251 'write_command_data 27BDFFF8 AFA60010 AFA70014 3C02BF88 24031000 AC436134 27A60010 AFA60000 308400FF 34840800 AC446430 24040800 AC446134 AC446138 AC436138 18A0000D 8FA40000 00001821 24060800 24870004 AFA70000 80840000 34841800 AC446430 AC466134 AC466138 24630001 1465FFF7 8FA40000 03E00008 27BD0008 'defineregion 2482FFFF 00463021 24A2FFFF 00471021 24091000 3C08BF88 AD096134 3C089D00 8D090094 8D230000 8D080098 8D080000 0103502B 11400003 01004821 00604821 01001821 3C089D00 8D0D0090 81A80015 240A0001 150A000C 24070002 00805821 00C05021 81A3002C 28630007 14600023 00A06021 00063027 00042027 00895021 1000001E 00C95821 15070008 24070003 00A05821 00405021 00063027 00C36021 00041027 10000015 00431021 1507000E 00021027 00C05021 00436021 00051027 00431021 81A3002C 28630007 1060000B 00805821 00063027 00042027 00895021 10000006 00C95821 00495821 00052827 00A95021 00806021 00C01021 3C03BF88 2404022A AC646430 24080800 AC686134 AC686138 24091000 AC696138 000B2202 34841800 AC646430 AC686134 AC686138 356B1800 AC6B6430 AC686134 AC686138 000A2202 34841800 AC646430 AC686134 AC686138 354A1800 AC6A6430 AC686134 AC686138 AC696134 2404022B AC646430 AC686134 AC686138 AC696138 000C2202 34841800 AC646430 AC686134 AC686138 358C1800 AC6C6430 AC686134 AC686138 00022202 34841800 AC646430 AC686134 AC686138 34421800 AC626430 AC686134 AC686138 03E00008 00000000 'DrawBitmap_SSD1963 27BDFF98 AFBF0064 AFBE0060 AFB7005C AFB60058 AFB50054 AFB40050 AFB3004C AFB20048 AFB10044 AFB00040 AFA40068 AFA5006C AFA70074 8FB00078 8FB40080 8FB30084 3C029D00 8C430094 8C710000 8C420098 8C420000 AFA20024 24020001 16820053 00C09021 3C029D00 8C420090 8044002D 1080004F 8FA2007C 3C159D00 8EA20028 0040F809 24160001 0056B004 8EA30090 8EA20024 8064002D 0040F809 24050006 0040B821 8EA30090 8EA20024 8064002D 0040F809 24050005 0040F021 24020003 72421002 8FA30074 70431002 70501002 00500018 00001812 AFA30014 8EA2003C 0040F809 00002012 AFA20018 8FA40068 8FA5006C 72123002 8FA20074 72023802 0411FF4B 00000000 3C02BF88 24031000 AC436134 2404022E AC446430 24040800 AC446134 AC446138 AC436138 240300FF AC43641C 8FA30018 00002821 3C02BF81 3C04BF88 AFD60000 8C46F220 8C46F220 AEF60000 8C866420 A0660000 AFD60000 8C46F220 8C46F220 AEF60000 8C866420 A0660001 AFD60000 8C46F220 8C46F220 AEF60000 8C866420 A0660002 24A50003 8FA70014 00A7302A 14C0FFEA 24630003 240300FF 3C02BF88 AC43641C 8FA2007C 0002BC03 36F71800 0002B203 36D61800 34551800 00141403 34421800 AFA20010 00141203 34421800 AFA20014 369E1800 8FA40068 8FA5006C 72123002 8FA20074 72023802 0411FF0E 00000000 3C02BF88 24031000 AC436134 2404022C AC446430 24040800 AC446134 AC446138 AC436138 8FA30074 1860008B 0200C821 8FA4006C AFA40028 00123823 AFA70030 70721002 2442FFFF AFA20020 AFB20034 0000C021 AFA0002C 00007021 240F0001 3C05BF88 10000078 24060800 04400043 0051202B 50800042 24630001 04E20040 24630001 5160003E 24630001 91A40000 008C2024 1080000C 00000000 ACB76430 ACA66134 ACA66138 ACB66430 ACA66134 ACA66138 ACB56430 ACA66134 ACA66138 1000002E 25CE0003 168F0022 8FA40010 3C049D00 8C840090 8084002D 1080001D 8FA40010 8FA40018 008E2021 AFA40038 80840000 34841800 ACA46430 ACA66134 ACA66138 8FA40018 008E2021 AFA40038 80840001 34841800 ACA46430 ACA66134 ACA66138 8FA40018 008E2021 AFA40038 80840002 34841800 AFA40038 ACA46430 25CE0003 ACA66134 ACA66138 1000000C 24630001 ACA46430 ACA66134 ACA66138 8FA40014 ACA46430 ACA66134 ACA66138 ACBE6430 ACA66134 ACA66138 24630001 1470FFBA 24420001 25290001 2508FFFF 11320010 01595021 01381021 24430007 284D0000 006D100B 000268C3 026D6821 000817C3 00021742 01026021 318C0007 01826023 018F6004 01401021 1000FFA7 00001821 8FA2001C 24420001 AFA2001C 14500004 24E70001 10000009 8FA4002C AFA0001C 1A40FFF7 8FAA0068 8FA80020 00004821 8FA30024 1000FFE3 00E3582B 24840001 AFA4002C 8FA70028 00F93821 AFA70028 8FA20020 8FA30030 00431021 AFA20020 8FA40034 8FA7002C 8FA20074 10E20005 0304C021 1E00FFE9 8FA70028 1000FFEF 8FA4002C 24020001 1682000B 8FBF0064 3C029D00 8C420090 8042002D 10400007 8FBE0060 3C029D00 8C420044 0040F809 8FA40018 8FBF0064 8FBE0060 8FB7005C 8FB60058 8FB50054 8FB40050 8FB3004C 8FB20048 8FB10044 8FB00040 03E00008 27BD0068 'DrawRectangle_SSD1963 27BDFFE0 AFBF001C AFB10018 AFB00014 0086102A 14400004 8FB00030 00801021 00C02021 00403021 00A7102A 14400005 28820000 00A01021 00E02821 00403821 28820000 0002200B 3C029D00 8C420094 8C430000 0083402B 2462FFFF 0048200A 28C20000 0002300B 00C3102B 2463FFFF 0062300A 28A20000 0002280B 3C029D00 8C420098 8C430000 00A3402B 2462FFFF 0048280A 28E20000 0002380B 00E01021 00E3382B 2463FFFF 0067100A 24070001 00E41823 00663021 00E53823 00E23821 70E68802 0411FE2D 00000000 3C02BF88 24031000 AC436134 2404022C AC446430 24040800 AC446134 AC446138 AC436138 7E053C00 34A51800 7E063A00 321000FF 36101800 10B00005 34C61800 1620001E 2624FFFF 1000002C 8FBF001C 14A6FFFB 3C02BF88 AC456430 24030800 AC436134 AC436138 AC436134 AC436138 AC436134 AC436138 2631FFFF 1220001E 2631FFFF 3C03BF88 24020800 2404FFFF AC626134 AC626138 AC626134 AC626138 AC626134 AC626138 2631FFFF 1624FFF8 8FBF001C 10000012 8FB10018 3C02BF88 24030800 2407FFFF AC456430 AC436134 AC436138 AC466430 AC436134 AC436138 AC506430 AC436134 AC436138 2484FFFF 1487FFF5 00000000 8FBF001C 8FB10018 8FB00014 03E00008 27BD0020 'getFPC 27BDFFF8 AFBF0004 00852023 03E42021 ACC40000 8FBF0004 03E00008 27BD0008 'pstring 27BDFFE0 AFBF001C AFB00018 00808021 00002021 3C059D00 24A50920 27A60010 0411FFEF 00000000 8FA40010 3C029D00 8C42002C 0040F809 02042021 8FBF001C 8FB00018 03E00008 27BD0020 'main 27BDFF98 AFBF0064 AFB30060 AFB2005C AFB10058 AFB00054 00808021 00A08821 00C09021 00E09821 00002021 3C059D00 24A50984 27A60048 0411FFD6 00000000 8E070000 8E020004 00E21025 144001F0 3C029D00 8C430090 8E240000 A064002D 8C430090 8E440000 A0640015 8C430090 8E640000 A064002C 8C420090 2403001C A043002E 2402003C AFA20028 2402003D AFA2002C 2402003E AFA20030 2402003F AFA20034 24020040 AFA20038 24020001 AFA2003C 24020002 AFA20040 24020003 AFA20044 27B20028 27B30048 3C109D00 8E510000 8E020010 02202021 24050008 0040F809 00003021 8E020010 02202021 24050065 0040F809 00003021 8E02001C 02202021 0040F809 24050005 26520004 5653FFF0 8E510000 3C109D00 8E020010 2404001B 24050008 0040F809 00003021 8E020010 2404001B 24050065 0040F809 00003021 3C11BF88 24021000 AE226138 8E020010 24040018 24050008 0040F809 00003021 8E020010 24040018 24050065 0040F809 00003021 24020800 AE226138 8E030090 8E020010 8064002E 24050008 0040F809 00003021 8E030090 8E020010 8064002E 24050065 0040F809 00003021 8E030090 8E02001C 8064002E 0040F809 24050006 8E020090 8044002D 10800011 3C029D00 8E020010 24050008 0040F809 00003021 8E030090 8E020010 8064002D 24050065 0040F809 00003021 8E030090 8E02001C 8064002D 0040F809 24050006 3C029D00 8C430090 8062002C 28420005 24040330 241201E0 0082900B 240401E0 24110320 0082880B 3C109D00 8E02001C 8064002E 0040F809 24050006 8E020004 0040F809 24042710 8E030090 8E02001C 8064002E 0040F809 24050005 8E020004 0040F809 24042710 8E030090 8E02001C 8064002E 0040F809 24050006 8E020004 0040F809 24042710 8E020090 8042002C 28430005 10600017 28420006 24020054 AFA20010 240400E2 24050003 24060023 24070002 0411FCFD 00000000 24020001 AFA20010 24020010 AFA20014 AFA00018 AFA0001C 24040033 24050006 00003021 00003821 0411FCF1 00000000 10000015 240400E0 1040000B 24020004 24020054 AFA20010 240400E2 24050003 2406001E 24070002 0411FCE5 00000000 10000009 240400E0 AFA20010 240400E2 24050003 24060023 24070002 0411FCDC 00000000 240400E0 24050001 24060001 0411FCD7 00000000 3C109D00 8E020004 0040F809 24042710 240400E0 24050001 24060003 0411FCCE 00000000 8E020004 0040F809 24042710 24040001 00002821 0411FCC7 00000000 8E020004 3C040001 0040F809 348486A0 8E020090 8042002C 28430005 10600035 28420006 240200FF AFA20010 240400E6 24050003 24060001 2407001F 0411FCB6 00000000 24020001 AFA20010 240300DF AFA30014 AFA20018 2402000F AFA2001C AFA00020 240400B0 24050007 24060020 00003821 0411FCA8 00000000 AFA00010 24020008 AFA20014 2402002B AFA20018 AFA0001C 24100002 AFB00020 AFA00024 240400B4 24050008 24060002 24070013 0411FC99 00000000 AFA00010 24020004 AFA20014 2402000C AFA20018 AFA0001C AFB00020 240400B6 24050007 24060001 24070020 0411FC8C 00000000 1000004F 240400BA 1040001A 240200E0 240200FF AFA20010 240400E6 24050003 24060003 240700FF 0411FC80 00000000 24020003 AFA20010 2402001F AFA20014 24020001 AFA20018 240200DF AFA2001C AFA00020 240400B0 24050007 24060024 00003821 0411FC71 00000000 10000018 AFA00010 AFA20010 240400E6 24050003 24060004 24070093 0411FC68 00000000 24020003 AFA20010 2402001F AFA20014 24020001 AFA20018 240200DF AFA2001C AFA00020 240400B0 24050007 00003021 00003821 0411FC59 00000000 AFA00010 2402002E AFA20014 24020030 AFA20018 AFA0001C 2402000F AFA20020 AFA00024 240400B4 24050008 24060003 240700A0 0411FC4A 00000000 AFA00010 24020010 AFA20014 AFA20018 AFA0001C 24020008 AFA20020 240400B6 24050007 24060002 2407000D 0411FC3D 00000000 240400BA 24050001 2406000F 0411FC38 00000000 240400B8 24050002 24060007 24070001 0411FC32 00000000 24040036 24050001 00003021 0411FC2D 00000000 240400F0 24050001 00003021 0411FC28 00000000 2404003A 24050001 24060070 0411FC23 00000000 24040026 24050001 24060001 0411FC1E 00000000 3C109D00 8E020004 0040F809 24042710 24040029 00002821 0411FC16 00000000 24020001 AFA20010 240200F0 AFA20014 AFA00018 AFA0001C 240400BE 24050006 24060006 240700F0 0411FC0A 00000000 240400D0 24050001 2406000D 0411FC05 00000000 8E030090 80620015 24040002 14440008 24040004 8066002C 28C60006 240400E0 240500A0 00A6200B 1000000A 00803021 14440008 240600A0 8066002C 28C60006 24040020 24050060 00A6200B 1000000A 00803021 24040001 14440008 24040003 8066002C 28C60006 24020040 0006100B 1000000A 00403021 24040003 14440008 24040036 8066002C 28C60006 240200C0 24030080 0066100A 00403021 24040036 24050001 0411FBDA 00000000 3C029D00 8C420090 90420015 30420001 10400006 3C029D00 8C430094 AC710000 8C420098 10000005 AC520000 8C430098 AC710000 8C420094 AC520000 8FA50048 3C029D00 8C430048 3C049D00 24840700 00852021 AC640000 8FA50048 8C43004C 3C049D00 24840248 00852021 AC640000 8C430048 8C440094 8C860000 8C420098 8C470000 AFA00010 8C620000 00002021 00002821 24C6FFFF 0040F809 24E7FFFF 3C049D00 24841198 0411FDEC 00000000 1000000C 8FBF0064 24E7FFFF 00071100 00073A00 00473821 24040037 24050002 00073203 30E700F0 0411FBA2 00000000 8FBF0064 8FB30060 8FB2005C 8FB10058 8FB00054 03E00008 27BD0068 '.rodata 'startup 31445353 20333639 76697264 6C207265 6564616F 000A0D64 End CSUB[/code] 3D rotating cube demo option explicit
option default FLOAT ' ' 3D solid graphics demo using quaternions to rotate the coordinates ' cls backlight 5 ' ' Adjust the following to fit your display ' dim scale=400 'length of the edge of the cube in "real" space 'define the projection plane in units from the observer DIM viewplane = -500 DIM cubelocation(2)=(mm.hres/2,MM.VRES/6,-2000) 'actual location of the centre of the cube in "real" 3D space ' ' ' define the coordinates of a cube with the z-axis towards the viewer and the centre at 0,0,0 dim cube(3,7)=(-1,-1,1,0, -1,1,1,0, 1,1,1,0, 1,-1,1,0, -1,-1,-1,0, -1,1,-1,0, 1,1,-1,0, 1,-1,-1,0 ) 'coordinates of the cube dim centroid(3,5)=(0,0,1,0, -1,0,0,0, 0,1,0,0, 1,0,0,0, 0,0,-1,0, 0,-1,0,0) 'centre of each face in space ' ' define the coordinate triples that make up two triangles for each face of the cube, together with a face index number ' all drawing is done as filled triangles ' NB the triangles must be in the same order as the faces, two triangles/face ' dim cubetriangles%(3,11)=(0,1,2,0, 0,2,3,0, 0,1,5,1, 0,4,5,1, 1,2,6,2, 1,5,6,2, 3,6,7,3, 3,2,6,3, 4,6,7,4, 4,5,6,4, 0,4,7,5, 0,3,7,5) ' dim q1(4),v(4),vout(4),M_PI=3.14159265359,i%,j%,k%,x1,y1,z1,x2,y2,z2,x3,y3,z3,p% dim csort(5) dim sortorder%(5) DIM integer yinc, xx0(11), yy0(11), xx1(11), yy1(11), xx2(11), yy2(11), tcol(5) ,scol(11) 'arrays for calling the triangle draw routine ' for i%=0 to 7 'scale the cube verticies up depending on the display size for j%=0 to 2 cube(j%,i%)=cube(j%,i%)*scale/2 next j% next i% ' for i%=0 to 5 'scale the centroid positions up depending on the display size for j%=0 to 2 centroid(j%,i%)=centroid(j%,i%)*scale/2 next j% next i% ' ' ' define the colour of each face of the cube tcol(0)=rgb(red) tcol(1)=rgb(blue) tcol(2)=rgb(magenta) tcol(3)=rgb(yellow) tcol(4)=rgb(cyan) tcol(5)=rgb(green) for i%=0 to 7 'convert coordinates to normalised form x1=cube(0,i%): y1=cube(1,i%): z1=cube(2,i%) create_vector(x1,y1,z1,v()) cube(0,i%)=v(2): cube(1,i%)=v(3): cube(2,i%)=v(4): cube(3,i%)=v(0) next i% ' for i%=0 to 5 'convert centroid coordinates to normalised form x1=centroid(0,i%): y1=centroid(1,i%): z1=centroid(2,i%) create_vector(x1,y1,z1,v()) centroid(0,i%)=v(2): centroid(1,i%)=v(3): centroid(2,i%)=v(4): centroid(3,i%)=v(0) next i% 'create a quarternion to rotate 15 degrees about a chosen axis 'play with the x,y,z vector which is the sxis of rotation create_normalised_quaternion(15,1,0.5,0.25,q1()) ' p%=0 'start by writing to the first page ssd1963 2' start by displaying page 2 do for i%=0 to 7 'rotate coordinates v(2)=cube(0,i%): v(3)=cube(1,i%): v(4)=cube(2,i%): v(0)=cube(3,i%): v(1)=0 rotate_vector(vout(),v(),q1()) cube(0,i%)=vout(2): cube(1,i%)=vout(3): cube(2,i%)=vout(4): cube(3,i%)=vout(0) next i% ' for i%=0 to 5 'rotate centroids v(2)=centroid(0,i%): v(3)=centroid(1,i%): v(4)=centroid(2,i%): v(0)=centroid(3,i%): v(1)=0 rotate_vector(vout(),v(),q1()) centroid(0,i%)=vout(2): centroid(1,i%)=vout(3): centroid(2,i%)=vout(4): centroid(3,i%)=vout(0) csort(i%)=vout(4) sortorder%(i%)=i% next i% ' floatindexsort(csort(),sortorder%(),6) 'sort the faces in the order of the depth ' yinc=0 if p% and 1 then yinc=272 p%=p%+1 for i%=0 to 5 'project the coordinates onto the viewplane j%=sortorder%(i%)*2 'get the furthest, as yet undisplayed, face from the viewer k%=i%*2 z1=cube(2,cubetriangles%(0,j%))*cube(3,cubetriangles%(0,j%))+cubelocation(2) x1=(cube(0,cubetriangles%(0,j%))*cube(3,cubetriangles%(0,j%))*viewplane/z1 +cubelocation(0)) y1=(cube(1,cubetriangles%(0,j%))*cube(3,cubetriangles%(0,j%))*viewplane/z1 +cubelocation(1)) +yinc z2=cube(2,cubetriangles%(1,j%))*cube(3,cubetriangles%(1,j%))+cubelocation(2) x2=(cube(0,cubetriangles%(1,j%))*cube(3,cubetriangles%(1,j%))*viewplane/z2 +cubelocation(0)) y2=(cube(1,cubetriangles%(1,j%))*cube(3,cubetriangles%(1,j%))*viewplane/z2 +cubelocation(1)) +yinc z3=cube(2,cubetriangles%(2,j%))*cube(3,cubetriangles%(2,j%))+cubelocation(2) x3=(cube(0,cubetriangles%(2,j%))*cube(3,cubetriangles%(2,j%))*viewplane/z3 +cubelocation(0)) y3=(cube(1,cubetriangles%(2,j%))*cube(3,cubetriangles%(2,j%))*viewplane/z3 +cubelocation(1)) +yinc xx0(k%)=x1 :yy0(k%)=y1: xx1(k%)=x2 :yy1(k%)=y2: xx2(k%)=x3 :yy2(k%)=y3 :scol(k%)=tcol(j%\2) k%=k%+1 z1=cube(2,cubetriangles%(0,j%+1))*cube(3,cubetriangles%(0,j%+1))+cubelocation(2) x1=(cube(0,cubetriangles%(0,j%+1))*cube(3,cubetriangles%(0,j%+1))*viewplane/z1 +cubelocation(0)) y1=(cube(1,cubetriangles%(0,j%+1))*cube(3,cubetriangles%(0,j%+1))*viewplane/z1 +cubelocation(1)) +yinc z2=cube(2,cubetriangles%(1,j%+1))*cube(3,cubetriangles%(1,j%+1))+cubelocation(2) x2=(cube(0,cubetriangles%(1,j%+1))*cube(3,cubetriangles%(1,j%+1))*viewplane/z2 +cubelocation(0)) y2=(cube(1,cubetriangles%(1,j%+1))*cube(3,cubetriangles%(1,j%+1))*viewplane/z2 +cubelocation(1)) +yinc z3=cube(2,cubetriangles%(2,j%+1))*cube(3,cubetriangles%(2,j%+1))+cubelocation(2) x3=(cube(0,cubetriangles%(2,j%+1))*cube(3,cubetriangles%(2,j%+1))*viewplane/z3 +cubelocation(0)) y3=(cube(1,cubetriangles%(2,j%+1))*cube(3,cubetriangles%(2,j%+1))*viewplane/z3 +cubelocation(1)) +yinc xx0(k%)=x1 :yy0(k%)=y1: xx1(k%)=x2 :yy1(k%)=y2: xx2(k%)=x3 :yy2(k%)=y3 :scol(k%)=tcol(j%\2) next i% triangles(12,xx0(),yy0(),xx1(),yy1(),xx2(),yy2(),scol(),0) if yinc=0 then ssd1963 1 'swap to page 1 box 0,272,480,272,0,0,0 ' clear page 2 else ssd1963 2 'swap to page 2 box 0,0,480,272,0,0,0 'clear page 1 endif loop end ' sub create_normalised_quaternion(theta,x,y,z,q()) local radians = theta/180.0*M_PI local sineterm= sin(radians!/2) q(1)=cos(radians/2) q(2)=x* sineterm q(3)=y* sineterm q(4)=z* sineterm q(0)=sqr(q!(1)*q(1) + q(2)*q(2) + q(3)*q(3) + q(4)*q(4)) 'calculate the magnitude q(1)=q(1)/q(0) 'create a normalised quaternion q(2)=q(2)/q(0) q(3)=q(3)/q(0) q(4)=q(4)/q(0) q(0)=1 end sub ' sub invert_quaternion(n(),q()) n(0)=q(0) n(1)=q(1) n(2)=-q(2) n(3)=-q(3) n(4)=-q(4) end sub ' sub multiply_quaternion(n(),q1(),q2()) local a1=q1(1),a2=q2(1),b1=q1(2),b2=q2(2),c1=q1(3),c2=q2(3),d1=q1(4),d2=q2(4) n(1)=a1*a2-b1*b2-c1*c2-d1*d2 n(2)=a1*b2+b1*a2+c1*d2-d1*c2 n(3)=a1*c2-b1*d2+c1*a2+d1*b2 n(4)=a1*d2+b1*c2-c1*b2+d1*a2 n(0)=q1(0)*q2(0) end sub ' sub create_vector(x,y,z,v()) v(0)=sqr(x*x + y*y + z*z) v(1)=0 v(2)=x/v(0) v(3)=y/v(0) v(4)=z/v(0) end sub sub rotate_vector(vnew(),v(),q()) local n(4),iq(4) multiply_quaternion(n(),q(),v()) invert_quaternion(iq(),q()) multiply_quaternion(vnew(),n(),iq()) end sub Csub triangles 'draws multiple triangles with a delay between if required 00000000 8C820004 27BDFFA0 AFBF005C AFBE0058 AFB70054 AFB60050 AFB5004C AFB40048 AFB30044 AFB20040 AFB1003C AFB00038 AFA40060 AFA50064 AFA60068 184000EE AFA7006C AFA00030 3C159D00 8FA30030 8FA50068 8FA80070 000310C0 00A22021 01021821 8C840000 8C630000 8FA90064 AFA40018 01223821 AFA3001C 8FA40074 8FA3006C 8FA80078 8FA9007C 00623021 00822821 01022021 01221021 8FA80018 8FA9001C 8CC60000 8CA50000 0128182A 8CF30000 8C9E0000 AFA60028 AFA5002C 10600006 8C540000 02601021 AFA90018 00C09821 AFA8001C AFA20028 8FA5001C 03C5102A 10400008 8FA90018 8FA20028 8FA8002C AFBE001C AFA80028 00A0F021 AFA2002C 8FA90018 8FA3001C 0069102A 10400008 8FA50018 8FA4001C 02601021 AFA40018 8FB30028 AFA9001C AFA20028 8FA50018 10BE008C 8FA4001C 109E00A4 8FA50018 2483FFFF 0065102A 1440002E 8FB00018 8FA90028 8FA2002C 8FA8001C 01334823 00531023 03C5B023 AFBE0034 0105B823 0280F021 AFA90020 AFA20024 00A08021 00009021 00008821 0060A021 0237001A 02E001F4 8FA30024 8FA20020 02002821 02003821 02228821 26100001 00002012 0256001A 02C001F4 00932021 02439021 00003012 00D33021 00C4182A 10600003 00801021 00C02021 00403021 8EA20048 AFBE0010 8C420000 0040F809 00000000 0290102A 1040FFE5 00000000 03C0A021 8FBE0034 03D0102A 14400030 8FA8001C 8FA90018 8FA4002C 8FA50028 0093B023 0085B823 02089023 02098823 03C91823 03C81023 72579002 72368802 AFB40018 AFB6001C AFB70020 0260B021 00A0B821 00609821 0040A021 0254001A 028001F4 8FA3001C 8FA20020 02002821 02003821 02429021 26100001 00002012 0233001A 026001F4 00972021 02238821 00003012 00D63021 00C4182A 10600003 00801021 00C02021 00403021 8FA80018 8EA20048 AFA80010 8C420000 0040F809 00000000 03D0102A 1040FFE4 00000000 8FA90080 8D240000 8D220004 00821025 5440001D 8EA20004 8FA20030 8FA40060 24420001 8C830004 AFA20030 000217C3 0043202A 5480FF52 8FA30030 14620006 8FA50060 8FA80030 8CA20000 0102102B 1440FF4B 8FA30030 8FBF005C 8FBE0058 8FB70054 8FB60050 8FB5004C 8FB40048 8FB30044 8FB20040 8FB1003C 8FB00038 03E00008 27BD0060 0040F809 00000000 1000FFE2 8FA20030 8FA80028 0113102A 1440001D 02603821 0268102A 1440001C 8FA70028 02603821 02602021 8FA9002C 0124102A 54400003 8FA4002C 00E9102A 0122380B 8EA20048 8FA30018 AFB40010 00E33821 8C420000 00602821 00803021 0040F809 00E43823 1000FFC2 8FA90080 8FA3001C 0065102A 1040FF5F 8FA90028 1000FF89 8FB00018 1000FFE8 8FA40028 1000FFE6 02602021 1440FFCC 8FBF005C 8C820000 5440FF10 AFA00030 1000FFC8 8FBE0058 End Csub Csub floatindexsort ' sorts a floating point array but keeps an index so you know the original order 00000000 8CC60000 27BDFF98 AFB00040 AFBF0064 AFBE0060 AFB7005C AFB60058 AFB50054 AFB40050 AFB3004C AFB20048 AFB10044 AFA6001C AFA40068 AFA5006C 00C08021 3C039D00 001017C2 00508021 00108043 12000068 8FBF0064 8FA4001C 0204102A 1040FFF9 001017C2 8FA60068 00102080 00C42021 00102823 AFA50010 AFA40028 8FA5001C 8FA4006C 001010C0 AFA6002C 8FA60010 00821021 00B02823 AFA20024 AFA50034 AFA00020 0006F080 0006B8C0 8FA20020 8FA50028 0202B021 8FA20024 8CA60000 AFA50014 8C450000 02D0202A AFA60018 1480002A AFA50030 8FA60020 8FA2006C 000690C0 00529021 8FB50024 8FB40028 8FB1002C 1000000F 00C09821 8E220000 8E440000 8E450004 0213B021 02D0302A AE820000 023E8821 02401021 AEA40000 AEA50004 02579021 029EA021 14C00013 02B7A821 8FA40010 8E250000 8C620068 02649821 8FA40018 AFA30038 0040F809 AFB10014 2405FFFF 1045FFE8 8FA30038 8FA60068 00161080 8FA4006C 00C21021 0016B0C0 AFA20014 00961021 8FA60020 8FA50030 24C60001 AFA60020 000527C3 8FA60018 8FA50014 ACA60000 8FA50028 8FA60030 24A50004 AFA50028 AC460000 AC440004 8FA20024 8FA4002C 8FA50020 8FA60034 24420008 24840004 AFA20024 14A6FFB6 AFA4002C 001017C2 00508021 00108043 5600FF9C 8FA4001C 8FBF0064 8FBE0060 8FB7005C 8FB60058 8FB50054 8FB40050 8FB3004C 8FB20048 8FB10044 8FB00040 03E00008 27BD0068 End Csub |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
Here is a version of the paging driver for the 44-pin MX170 and also the C source of the driver. C code: 2016-02-05_193133_SSD1963_paged.zip text 0,0,"page 1" text 0,272,"page 2" text 0,544,"page 3" do ssd1963_44 1 pause 1000 ssd1963_44 2 pause 1000 ssd1963_44 3 pause 1000 loop sub mm.startup 'orientations: LANDSCAPE 1, PORTRAIT 2, RLANDSCAPE 3, RPORTRAIT 4 SSD1963_44 0,0,1,4,42 'Page number (use 0 for initialising the driver), Number of RD pin (0 if not used), orientation, size of display in inches", Number of reset pin ' Note: you must use pins 25,26,27,36,37,38,2,3 for the data pins DB0-DB7 ' you must use pin 4 for RS and pin 5 for WR ' Tie CS Low and either tie RD high or connect it to the uP pin specified in the call to SSD1963_44 ' the paged display facility only works on the 4.3" display end sub CSUB SSD1963_44 0000023E 'write_command_data 27BDFFF8 AFA60010 AFA70014 27A20010 AFA20000 308400FF 34840200 3C02BF88 AC446230 24030200 AC436234 AC436238 18A0000D 8FA40000 00001821 24060200 24870004 AFA70000 80840000 34840300 AC446230 AC466234 AC466238 24630001 1465FFF7 8FA40000 03E00008 27BD0008 'defineregion 2482FFFF 00463021 24A2FFFF 00471021 3C089D00 8D090094 8D230000 8D080098 8D080000 0103482B 11200003 01006021 00606021 01001821 3C089D00 8D0D0090 81A80015 24090001 1509000C 24070002 00805021 00C04821 81A3002C 28630007 14600023 00A05821 00063027 00042027 008C4821 1000001E 00CC5021 15070008 24070003 00A05021 00404821 00063027 00C35821 00041027 10000015 00431021 1507000E 00021027 00C04821 00435821 00051027 00431021 81A3002C 28630007 1060000B 00805021 00063027 00042027 008C4821 10000006 00CC5021 004C5021 00052827 00AC4821 00805821 00C01021 3C03BF88 2404022A AC646230 24080200 AC686234 AC686238 000A2202 34840300 AC646230 AC686234 AC686238 354A0300 AC6A6230 AC686234 AC686238 00092202 34840300 AC646230 AC686234 AC686238 35290300 AC696230 AC686234 AC686238 2404022B AC646230 AC686234 AC686238 000B2202 34840300 AC646230 AC686234 AC686238 356B0300 AC6B6230 AC686234 AC686238 00022202 34840300 AC646230 AC686234 AC686238 34420300 AC626230 AC686234 AC686238 03E00008 00000000 'DrawBitmap_SSD1963 27BDFF98 AFBF0064 AFBE0060 AFB7005C AFB60058 AFB50054 AFB40050 AFB3004C AFB20048 AFB10044 AFB00040 AFA40068 AFA5006C AFA70074 8FB00078 8FB40080 8FB30084 3C029D00 8C430094 8C710000 8C420098 8C420000 AFA20024 24020001 16820050 00C09021 3C029D00 8C420090 8044002D 1080004C 8FA2007C 3C159D00 8EA20028 0040F809 24160001 0056B004 8EA30090 8EA20024 8064002D 0040F809 24050006 0040B821 8EA30090 8EA20024 8064002D 0040F809 24050005 0040F021 24020003 72421002 8FA30074 70431002 70501002 00500018 00001812 AFA30014 8EA2003C 0040F809 00002012 AFA20018 8FA40068 8FA5006C 72123002 8FA20074 72023802 0411FF52 00000000 3C02BF88 2403022E AC436230 24030200 AC436234 AC436238 240300FF AC43621C 8FA30018 00002821 3C02BF81 3C04BF88 AFD60000 8C46F220 8C46F220 AEF60000 8C866220 A0660000 AFD60000 8C46F220 8C46F220 AEF60000 8C866220 A0660001 AFD60000 8C46F220 8C46F220 AEF60000 8C866220 A0660002 24A50003 8FA70014 00A7302A 14C0FFEA 24630003 240300FF 3C02BF88 AC43621C 8FA2007C 0002BC03 36F70300 0002B203 36D60300 34550300 00141403 34420300 AFA20010 00141203 34420300 AFA20014 369E0300 8FA40068 8FA5006C 72123002 8FA20074 72023802 0411FF18 00000000 3C02BF88 2403022C AC436230 24030200 AC436234 AC436238 8FA30074 1860008B 0200C821 8FA4006C AFA40028 00123823 AFA70030 70721002 2442FFFF AFA20020 AFB20034 0000C021 AFA0002C 00007021 240F0001 3C05BF88 10000078 24060200 04400043 0051202B 50800042 24630001 04E20040 24630001 5160003E 24630001 91A40000 008C2024 1080000C 00000000 ACB76230 ACA66234 ACA66238 ACB66230 ACA66234 ACA66238 ACB56230 ACA66234 ACA66238 1000002E 25CE0003 168F0022 8FA40010 3C049D00 8C840090 8084002D 1080001D 8FA40010 8FA40018 008E2021 AFA40038 80840000 34840300 ACA46230 ACA66234 ACA66238 8FA40018 008E2021 AFA40038 80840001 34840300 ACA46230 ACA66234 ACA66238 8FA40018 008E2021 AFA40038 80840002 34840300 AFA40038 ACA46230 25CE0003 ACA66234 ACA66238 1000000C 24630001 ACA46230 ACA66234 ACA66238 8FA40014 ACA46230 ACA66234 ACA66238 ACBE6230 ACA66234 ACA66238 24630001 1470FFBA 24420001 25290001 2508FFFF 11320010 01595021 01381021 24430007 284D0000 006D100B 000268C3 026D6821 000817C3 00021742 01026021 318C0007 01826023 018F6004 01401021 1000FFA7 00001821 8FA2001C 24420001 AFA2001C 14500004 24E70001 10000009 8FA4002C AFA0001C 1A40FFF7 8FAA0068 8FA80020 00004821 8FA30024 1000FFE3 00E3582B 24840001 AFA4002C 8FA70028 00F93821 AFA70028 8FA20020 8FA30030 00431021 AFA20020 8FA40034 8FA7002C 8FA20074 10E20005 0304C021 1E00FFE9 8FA70028 1000FFEF 8FA4002C 24020001 1682000B 8FBF0064 3C029D00 8C420090 8042002D 10400007 8FBE0060 3C029D00 8C420044 0040F809 8FA40018 8FBF0064 8FBE0060 8FB7005C 8FB60058 8FB50054 8FB40050 8FB3004C 8FB20048 8FB10044 8FB00040 03E00008 27BD0068 'DrawRectangle_SSD1963 27BDFFE0 AFBF001C AFB10018 AFB00014 0086102A 14400004 8FB00030 00801021 00C02021 00403021 00A7102A 14400005 28820000 00A01021 00E02821 00403821 28820000 0002200B 3C029D00 8C420094 8C430000 0083402B 2462FFFF 0048200A 28C20000 0002300B 00C3102B 2463FFFF 0062300A 28A20000 0002280B 3C029D00 8C420098 8C430000 00A3402B 2462FFFF 0048280A 28E20000 0002380B 00E01021 00E3382B 2463FFFF 0067100A 24070001 00E41823 00663021 00E53823 00E23821 70E68802 0411FE3A 00000000 3C02BF88 2403022C AC436230 24030200 AC436234 AC436238 7E053C00 34A50300 7E063A00 321000FF 36100300 10B00005 34C60300 1620001E 2624FFFF 1000002C 8FBF001C 14A6FFFB 3C02BF88 AC456230 24030200 AC436234 AC436238 AC436234 AC436238 AC436234 AC436238 2631FFFF 1220001E 2631FFFF 3C03BF88 24020200 2404FFFF AC626234 AC626238 AC626234 AC626238 AC626234 AC626238 2631FFFF 1624FFF8 8FBF001C 10000012 8FB10018 3C02BF88 24030200 2407FFFF AC456230 AC436234 AC436238 AC466230 AC436234 AC436238 AC506230 AC436234 AC436238 2484FFFF 1487FFF5 00000000 8FBF001C 8FB10018 8FB00014 03E00008 27BD0020 'getFPC 27BDFFF8 AFBF0004 00852023 03E42021 ACC40000 8FBF0004 03E00008 27BD0008 'pstring 27BDFFE0 AFBF001C AFB00018 00808021 00002021 3C059D00 24A508D4 27A60010 0411FFEF 00000000 8FA40010 3C029D00 8C42002C 0040F809 02042021 8FBF001C 8FB00018 03E00008 27BD0020 'main 27BDFF98 AFBF0064 AFB40060 AFB3005C AFB20058 AFB10054 AFB00050 00808021 00A08821 00C09021 00E09821 8FB40078 00002021 3C059D00 24A50940 27A60048 0411FFD4 00000000 8E070000 8E020004 00E21025 144001F3 3C029D00 8C430090 8E840000 A064002E 8C430090 8E240000 A064002D 8C430090 8E440000 A0640015 8C430090 8E640000 A064002C 8C420090 8E830000 A043002E 24020019 AFA20028 2402001A AFA2002C 2402001B AFA20030 24020024 AFA20034 24020025 AFA20038 24020026 AFA2003C 24020002 AFA20040 24020003 AFA20044 27B20028 27B30048 3C109D00 8E510000 8E020010 02202021 24050008 0040F809 00003021 8E020010 02202021 24050065 0040F809 00003021 8E02001C 02202021 0040F809 24050005 26520004 5653FFF0 8E510000 3C109D00 8E020010 24040004 24050008 0040F809 00003021 8E020010 24040004 24050065 0040F809 00003021 3C11BF88 24020100 AE226238 8E020010 24040005 24050008 0040F809 00003021 8E020010 24040005 24050065 0040F809 00003021 24020200 AE226238 8E030090 8E020010 8064002E 24050008 0040F809 00003021 8E030090 8E020010 8064002E 24050065 0040F809 00003021 8E030090 8E02001C 8064002E 0040F809 24050006 8E020090 8044002D 10800011 3C029D00 8E020010 24050008 0040F809 00003021 8E030090 8E020010 8064002D 24050065 0040F809 00003021 8E030090 8E02001C 8064002D 0040F809 24050006 3C029D00 8C430090 8062002C 28420005 24040330 241201E0 0082900B 240401E0 24110320 0082880B 3C109D00 8E02001C 8064002E 0040F809 24050006 8E020004 0040F809 24042710 8E030090 8E02001C 8064002E 0040F809 24050005 8E020004 0040F809 24042710 8E030090 8E02001C 8064002E 0040F809 24050006 8E020004 0040F809 24042710 8E020090 8042002C 28430005 10600017 28420006 24020054 AFA20010 240400E2 24050003 24060023 24070002 0411FD0B 00000000 24020001 AFA20010 24020010 AFA20014 AFA00018 AFA0001C 24040033 24050006 00003021 00003821 0411FCFF 00000000 10000015 240400E0 1040000B 24020004 24020054 AFA20010 240400E2 24050003 2406001E 24070002 0411FCF3 00000000 10000009 240400E0 AFA20010 240400E2 24050003 24060023 24070002 0411FCEA 00000000 240400E0 24050001 24060001 0411FCE5 00000000 3C109D00 8E020004 0040F809 24042710 240400E0 24050001 24060003 0411FCDC 00000000 8E020004 0040F809 24042710 24040001 00002821 0411FCD5 00000000 8E020004 3C040001 0040F809 348486A0 8E020090 8042002C 28430005 10600035 28420006 240200FF AFA20010 240400E6 24050003 24060001 2407001F 0411FCC4 00000000 24020001 AFA20010 240300DF AFA30014 AFA20018 2402000F AFA2001C AFA00020 240400B0 24050007 24060020 00003821 0411FCB6 00000000 AFA00010 24020008 AFA20014 2402002B AFA20018 AFA0001C 24100002 AFB00020 AFA00024 240400B4 24050008 24060002 24070013 0411FCA7 00000000 AFA00010 24020004 AFA20014 2402000C AFA20018 AFA0001C AFB00020 240400B6 24050007 24060001 24070020 0411FC9A 00000000 1000004F 240400BA 1040001A 240200E0 240200FF AFA20010 240400E6 24050003 24060003 240700FF 0411FC8E 00000000 24020003 AFA20010 2402001F AFA20014 24020001 AFA20018 240200DF AFA2001C AFA00020 240400B0 24050007 24060024 00003821 0411FC7F 00000000 10000018 AFA00010 AFA20010 240400E6 24050003 24060004 24070093 0411FC76 00000000 24020003 AFA20010 2402001F AFA20014 24020001 AFA20018 240200DF AFA2001C AFA00020 240400B0 24050007 00003021 00003821 0411FC67 00000000 AFA00010 2402002E AFA20014 24020030 AFA20018 AFA0001C 2402000F AFA20020 AFA00024 240400B4 24050008 24060003 240700A0 0411FC58 00000000 AFA00010 24020010 AFA20014 AFA20018 AFA0001C 24020008 AFA20020 240400B6 24050007 24060002 2407000D 0411FC4B 00000000 240400BA 24050001 2406000F 0411FC46 00000000 240400B8 24050002 24060007 24070001 0411FC40 00000000 24040036 24050001 00003021 0411FC3B 00000000 240400F0 24050001 00003021 0411FC36 00000000 2404003A 24050001 24060070 0411FC31 00000000 24040026 24050001 24060001 0411FC2C 00000000 3C109D00 8E020004 0040F809 24042710 24040029 00002821 0411FC24 00000000 24020001 AFA20010 240200F0 AFA20014 AFA00018 AFA0001C 240400BE 24050006 24060006 240700F0 0411FC18 00000000 240400D0 24050001 2406000D 0411FC13 00000000 8E030090 80620015 24040002 14440008 24040004 8066002C 28C60006 240400E0 240500A0 00A6200B 1000000A 00803021 14440008 240600A0 8066002C 28C60006 24040020 24050060 00A6200B 1000000A 00803021 24040001 14440008 24040003 8066002C 28C60006 24020040 0006100B 1000000A 00403021 24040003 14440008 24040036 8066002C 28C60006 240200C0 24030080 0066100A 00403021 24040036 24050001 0411FBE8 00000000 3C029D00 8C420090 90420015 30420001 10400006 3C029D00 8C430094 AC710000 8C420098 10000005 AC520000 8C430098 AC710000 8C420094 AC520000 8FA50048 3C029D00 8C430048 3C049D00 248406C0 00852021 AC640000 8FA50048 8C43004C 3C049D00 24840220 00852021 AC640000 8C430048 8C440094 8C860000 8C420098 8C470000 AFA00010 8C620000 00002021 00002821 24C6FFFF 0040F809 24E7FFFF 3C049D00 24841164 0411FDE7 00000000 1000000C 8FBF0064 24E7FFFF 00071100 00073A00 00473821 24040037 24050002 00073203 30E700F0 0411FBB0 00000000 8FBF0064 8FB40060 8FB3005C 8FB20058 8FB10054 8FB00050 03E00008 27BD0068 '.rodata 'startup 31445353 5F333639 64203434 65766972 6F6C2072 64656461 00000A0D End CSUB |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
Revised version of the drivers for 44-pin and 64-pin parts including C source. Changes are limiting paged usage to landscape mode Compatibility with calibrating touch 2016-03-19_084622_SSD1963paged.zip NB touch must be calibrated before any call to swap pages. Touch will always give a location (x,y coordinates) that appears to be on page 1 (lines 0-271). It is up to the programmer to reconcile this with button positions on whichever page is actually being displayed. If using GUI controls then controls on pages other than the one being displayed should be disabled. The driver supports all panel sizes on both the 44 and 64-pin Micromites and for all panels has the optional connection to the RD pin to allow overlay (transparent) text. This is controlled by simply setting the background colour to 1 The paged memory system only works on the 4.3" display in landscape mode NB in the rotating demo code above, please include "pause 10" after calls to swap pages "ssd1963 1" and "ssd1963 2". This will completely eliminate any flicker. Without this flicker arises because until a complete screen refresh has occurred after swapping pages, immediate writes to screen memory on the original page may still be viewable. Pause 10 allows enough time for the screen to completely refresh. |
||||
akashh Senior Member ![]() Joined: 19/01/2014 Location: IndiaPosts: 115 |
I am about to try and hook up the ssd1963 from Eastrising, it's a 5" display, and noticed there does not seem to be support for the 28 pin IC. Is there any current code that will work on the latest mmbasic for the 28 pin version? |
||||
centrex![]() Guru ![]() Joined: 13/11/2011 Location: AustraliaPosts: 320 |
only the 44 pin and 64 pin are supported. Cliff |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
Correct. I could do a driver for the 28-pin but it needs 11 pins minimum (12 to include transparent text) which doesn't leave many for other purposes. To be efficient it really needs to use 16,17,18,21,21,23,24,25,26 as the data pins which means you lose SPI, I2C, PWM2, and com1 capability. Alternatively you can have flexible assignment of all pins but the code will be roughly 8x slower |
||||
akashh Senior Member ![]() Joined: 19/01/2014 Location: IndiaPosts: 115 |
Thanks for the offer but I have just gone ahead and ordered the explorer64 board, and will use that. I am looking at creating a kind of serial graphical console as I mentioned in another post, will share the source once I get it going. Basically the idea is to create a fancy UI that can be updated via serial commands from another micro controller that will focus on the processing part. This will be the front end for my hydroponic automation controller. |
||||
lew247![]() Guru ![]() Joined: 23/12/2015 Location: United KingdomPosts: 1702 |
Just seen this thread I'm about to start working on the indoor part of the weather station and I'[m going to use a 7" SDD1963 display with touchscreen Looking at the above, am I right in assuming that this paged driver won't work for the 7 inch screen? |
||||
lew247![]() Guru ![]() Joined: 23/12/2015 Location: United KingdomPosts: 1702 |
Will this work with a 7" display? If not is there any way to have a "2nd" page which is selected by a touch button? |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
No, it relies on the fact the 4.3" display only uses part of the available graphics memory on the SSD1963. The 5" and 7" displays use all of it. Yes, but you will have to draw each page afresh each time you go to it. This is how all Geoff's demos work. Not something I've ever done. |
||||
![]() |
![]() |
The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |