LCDInfo.com
http://forum.lcdinfo.com/

LCD demos
http://forum.lcdinfo.com/viewtopic.php?f=8&t=1310
Page 1 of 5

Author:  Zee [ Mon Aug 15, 2005 12:51 ]
Post subject:  LCD demos

Have you tried to program your display on your own and have something interresting to show? :wink:


http://oms.wmhost.com/lcd/pcd8544.avi

Author:  coorz [ Mon Aug 15, 2005 14:16 ]
Post subject: 

VERY nice dude! Is it in color BTW?

Author:  Zee [ Mon Aug 15, 2005 16:39 ]
Post subject: 

Only black'n'white currently. Still waiting to get a new working color display to play with.

Author:  Zee [ Wed Aug 17, 2005 23:48 ]
Post subject: 

Punishing Optrex DMF5001NY-LY :)

Image

Image


Not so great in the Nokia style...

Image

Image

Author:  Rexxie [ Thu Aug 18, 2005 21:19 ]
Post subject: 

That's pretty damn awesome! Niiiice work :D

Author:  Sereja [ Mon Aug 22, 2005 11:32 ]
Post subject: 

Very impressive ;-). Do u use some LCD Drivers or u connect LCD directly to PC? Very nice work!!!!!!!!My congratulations!!!.

Author:  Zee [ Mon Aug 22, 2005 13:40 ]
Post subject: 

It's hardly practical to control displays without dedicated controller. :)

Optrex uses T6963C and the Nokia display PCD8544. Both panels are controlled through the LPT port.

I can currently refresh the full area of the Nokia display at about 75fps and the Optrex should be able to work at around 120fps (haven't measured with it yet) as it's 8-bit compared to the PCD which is 1-bit. The LPT port seems to be able to output data at ~300kb/s. Don't know how CPU dependant it is but board manufacturers really should recreate the electronics for this still so handy utility-port. :)

Both displays are currently written without any delays without problems but the PCD seems to be picky about the cable length and needs some delay in the initialization.

Author:  Zee [ Tue Aug 23, 2005 21:02 ]
Post subject: 

These are made to work with my 160x128 Optrex panel so changes are needed to make them work on others.

Also, I'm not one of the cleanest programmers. :)


Simple 4x4 & 16x16 ordered dithering for 8-bit grayscale image.
Code:
unsigned char dithmap[] = {0x00, 0x88, 0x22, 0xaa, 0xcc, 0x44, 0xee, 0x66, 0x33, 0xbb, 0x11, 0x99, 0xff, 0x77, 0xdd, 0x55};

            if ((sourcepixel+dithmap[(x&3)+((y&3)<<2)])>>8 == 1)
            {
               Plot(x,y);
            }


unsigned char dithmap16[] = {0x00, 0x80, 0x20, 0xA0, 0x08, 0x88, 0x28, 0xA8, 0x02, 0x82, 0x22, 0xA2, 0x0A, 0x8A, 0x2A, 0xAA,
0xC0, 0x40, 0xE0, 0x60, 0xC8, 0x48, 0xE8, 0x68, 0xC2, 0x42, 0xE2, 0x62, 0xCA, 0x4A, 0xEA, 0x6A,
0x30, 0xB0, 0x10, 0x90, 0x38, 0xB8, 0x18, 0x98, 0x32, 0xB2, 0x12, 0x92, 0x3A, 0xBA, 0x1A, 0x9A,
0xF0, 0x70, 0xD0, 0x50, 0xF8, 0x78, 0xD8, 0x58, 0xF2, 0x72, 0xD2, 0x52, 0xFA, 0x7A, 0xDA, 0x5A,
0x0C, 0x8C, 0x2C, 0xAC, 0x04, 0x84, 0x24, 0xA4, 0x0E, 0x8E, 0x2E, 0xAE, 0x06, 0x86, 0x26, 0xA6,
0xCC, 0x4C, 0xEC, 0x6C, 0xC4, 0x44, 0xE4, 0x64, 0xCE, 0x4E, 0xEE, 0x6E, 0xC6, 0x46, 0xE6, 0x66,
0x3C, 0xBC, 0x1C, 0x9C, 0x34, 0xB4, 0x14, 0x94, 0x3E, 0xBE, 0x1E, 0x9E, 0x36, 0xB6, 0x16, 0x96,
0xFC, 0x7C, 0xDC, 0x5C, 0xF4, 0x74, 0xD4, 0x54, 0xFE, 0x7E, 0xDE, 0x5E, 0xF6, 0x76, 0xD6, 0x56,
0x03, 0x83, 0x23, 0xA3, 0x0B, 0x8B, 0x2B, 0xAB, 0x01, 0x81, 0x21, 0xA1, 0x09, 0x89, 0x29, 0xA9,
0xC3, 0x43, 0xE3, 0x63, 0xCB, 0x4B, 0xEB, 0x6B, 0xC1, 0x41, 0xE1, 0x61, 0xC9, 0x49, 0xE9, 0x69,
0x33, 0xB3, 0x13, 0x93, 0x3B, 0xBB, 0x1B, 0x9B, 0x31, 0xB1, 0x11, 0x91, 0x39, 0xB9, 0x19, 0x99,
0xF3, 0x73, 0xD3, 0x53, 0xFB, 0x7B, 0xDB, 0x5B, 0xF1, 0x71, 0xD1, 0x51, 0xF9, 0x79, 0xD9, 0x59,
0x0F, 0x8F, 0x2F, 0xAF, 0x07, 0x87, 0x27, 0xA7, 0x0D, 0x8D, 0x2D, 0xAD, 0x05, 0x85, 0x25, 0xA5,
0xCF, 0x4F, 0xEF, 0x6F, 0xC7, 0x47, 0xE7, 0x67, 0xCD, 0x4D, 0xED, 0x6D, 0xC5, 0x45, 0xE5, 0x65,
0x3F, 0xBF, 0x1F, 0x9F, 0x37, 0xB7, 0x17, 0x97, 0x3D, 0xBD, 0x1D, 0x9D, 0x35, 0xB5, 0x15, 0x95,
0xFF, 0x7F, 0xDF, 0x5F, 0xF7, 0x77, 0xD7, 0x57, 0xFD, 0x7D, 0xDD, 0x5D, 0xF5, 0x75, 0xD5, 0x55};

            if ((sourcepixel+dithmap16[(x&15)+((y&15)<<4)])>>8 == 1)
            {
               Plot(x,y);
            }




Floyd-Steinberg dithering for 8-bit grayscale image (160x128 in this case). workbuf/worktemp are both the size of the image in pixels to be processed. All variables are int:
Code:
      for (bcy=0; bcy<128; bcy++)
      {
         for (bcx=0; bcx<160; bcx++)
         {
            imagepixel=workbuf[bcx+(bcy<<7)+(bcy<<5)];
            temppixel=worktemp[bcx+(bcy<<7)+(bcy<<5)];
            newpixel=imagepixel+temppixel;
            if (newpixel<=127.5)
            {
               level=0;
            }
            else
            {
               level=255;
            }
            diff=(newpixel-level)>>4;
            diff3=diff+diff+diff;
            diff5=diff+diff+diff3;
            diff7=diff+diff+diff5;
            if (bcx<159) worktemp[(bcx+1)+(bcy<<7)+(bcy<<5)]=worktemp[(bcx+1)+(bcy<<7)+(bcy<<5)]+diff7;
            if ((bcx>0) && (bcy<127)) worktemp[(bcx-1)+((bcy+1)<<7)+((bcy+1)<<5)]=worktemp[(bcx-1)+((bcy+1)<<7)+((bcy+1)<<5)]+diff3;
            if (bcy<127) worktemp[bcx+((bcy+1)<<7)+((bcy+1)<<5)]=worktemp[bcx+((bcy+1)<<7)+((bcy+1)<<5)]+diff5;
            if ((bcx<159) && (bcy<127)) worktemp[(bcx+1)+((bcy+1)<<7)+((bcy+1)<<5)]=worktemp[(bcx+1)+((bcy+1)<<7)+((bcy+1)<<5)]+diff;
            if (imagepixel!=0 && level!=0)
            {
               buffer[(bcx>>3)+(bcy<<2)+(bcy<<4)]=buffer[(bcx>>3)+(bcy<<2)+(bcy<<4)] | (1<<(7-(bcx&7)));
            }
         }
      }

Author:  Zee [ Wed Aug 24, 2005 7:12 ]
Post subject: 

http://oms.wmhost.com/lcd/patriotic_cellphone.avi

Author:  Zee [ Wed Aug 24, 2005 16:56 ]
Post subject: 

One oldie effect...

Code:
   int x, y, l, diam, temp, count=0;
   double sintab[360], costab[360], d=0;

   for (l=0;l<360;l++)
   {
      sintab[l]=sin(d);
      costab[l]=cos(d);
      d=d+(6.283185307/360);
   }

   do
   {
      temp=count;
      for (diam=8; diam<140; diam=diam+2)
      {
         x=sintab[count]*32+80;
         y=costab[count]*32+64;
         count=count-7;
         if (count<0) count+=360;
         for (l=0; l<360; l=l+4)
         {
            Plot(x+sintab[l]*(diam+(costab[count]*5)),y+costab[l]*(diam+(sintab[count]*5)));
         }
      }
      count=temp+4;
      if (count>359) count-=360;
   } while (!kbhit());

Author:  Zee [ Thu Aug 25, 2005 23:17 ]
Post subject: 

Another classic...

Code:
   const unsigned int   swidth   = 160;
   const unsigned int   sheight   = 128;

   unsigned char buffer[swidth/8*sheight], texture[128*128], workbuf[swidth*sheight];
   char worktemp[swidth*sheight];
   double sintab[360], costab[360], z, zoom, zoominc;
   int i, d1, d2, x, y, x1, y1, x2, y2, x3, y3;

   z=0;
   d1=0;
   d2=180;
   zoom=1;
   zoominc=0.0025;

   for (i=0;i<360;i++)
   {
      sintab[i]=sin(z);
      costab[i]=cos(z);
      z=z+(6.283185307/360);
   }

   for(y=0; y<128; y++)
   {
      for(x=0; x<128; x++)
      {
         texture[x+y*128] = (x ^ y) * 2;
      }
   }

   do
   {
      for (i=0; i<sizeof(buffer); i++)
      {
         buffer[i]=0;
      }
      for (i=0; i<sizeof(workbuf); i++)
      {
         workbuf[i]=0;
         worktemp[i]=0;
      }
      y2=-(sheight>>1);
      for (y1=0; y1<sheight; y1++)
      {
         x3=sintab[d1]*y2/zoom;
         y3=costab[d1]*y2/zoom;
         x2=-(swidth>>1);
         for (x1=0; x1<swidth; x1++)
         {
            x=sintab[d2]*x2/zoom+x3;
            y=costab[d2]*x2/zoom+y3;
            workbuf[x1+y1*swidth] = texture[((64+x)&127)+(((64+y)&127)<<7)];
//            sourcepixel = texture[((64+x)&127)+(((64+y)&127)<<7)];
/*   Use ordered dithering here.   */
            x2++;
         }
         y2++;
      }
/*   Use FS dithering here.      */
/*   Send buffer to LCD here.   */
      d1+=4;
      if (d1>359) d1-=360;
      d2+=4;
      if (d2>359) d2-=360;
      zoom+=zoominc;
      if ((zoom<0.03) || (zoom>1)) zoominc=-zoominc;
   } while (!kbhit());

Author:  Sereja [ Sat Aug 27, 2005 9:06 ]
Post subject: 

Zee I found your theme on Development, do u have problems with init on SED1335 (S1D13305)?

Author:  Zee [ Sat Aug 27, 2005 16:20 ]
Post subject: 

Solved it a while ago with some help from Henri and using a source example for KS-controlled displays. The main problem was with using winio, but everythings running fine now.

Author:  Sereja [ Sat Aug 27, 2005 17:08 ]
Post subject: 

I have such a question. What time is needed to load 320*240 image true the SED1335. It takes on my device 5 - 8 secs, is it too slow?

Author:  Zee [ Sat Aug 27, 2005 18:12 ]
Post subject: 

For me, transferring 320x240 image takes around 45 milliseconds.

Page 1 of 5 All times are UTC + 2 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/