Back Forum Reply New

Wrobot 16*16 Dot Matrix LED Shield



http://www.emartee.com/product/41903/Wrobot-16*16-Dot-Matrix-LED-Shield



Able to make multi-screen connection, rolling display



Occupy few MCU ports, ability of scrolling display of a few hundred words4-screen series, text scrolling display, can build electronic billboards



Features:

1、Use high-quality bright LED dot-matrix block

2、Optimized circuit design, with brightness uniformity

3、Standard interface that can be expanded in a variety of development boards

4、Multi-screen connectivity is available

5、138-line scan, 595 numbers

6、Applicable to a variety of platforms including  Arduino / AVR / ARM

Able to support direct multi-screen connection , it can achieve rolling display by cascading the LED 16*16 Matrix directly like putting up building block only with  5 pin jumper wire.

How to achieve the cascading and achieve rolling display ?

The answer is that you just need two 5 pin jumper cables used to link one LED brick to another,then you have achieve rolling display,because our circuit have solved all the query at the back stage.So this allow that you can cascade as more piece as you can.

However it occupy few MCU interface and own the ability of scrolling display of hundreds of words.
Support text、cartoon、etc scrolling display, so you can build electronic billboards and any other application you need easily.

The most important is that:you can achieve what you need and what you imagine in your mind about Matrix LED.

Now i am telling you something of LED Array Screen. I will show you an DIY experiment.
Tools used :


   1. Arduino Duemilanove With ATmega 328
   
   2. Arduino Sensor shield v4.0
   
   3. 4-pin jumper wire
  
   4. 1-pin jumper wire
   
   5. Wrobot 16x16 LED Array Screen











Connect digital pin 4,5,6,7 to input pin OIA,OIB,OIC,OID of LED screen, which choose the row. Connect digital pin 8,9,10 to pin SER,SCK,RCKof screen, which input the data of a row. Connect GND and VCC to power.



Extension connection is very easy too.Connect pin on the OUT side of one board to the pin with the same name on the IN side of the next board.













Then upload the test code to Arduino.
  1.     #define SPEED    6                               //Speed of rolling. The bigger,the slower
  2.     #define WordNO 12                                 //number of letters(here one letter on one screen) you want to display + Screen number
  3.     #define ScreenNO 4                                //define the screen number used

  4.     byte HZ[]={
  5.     //===== You have to give 32*ScreenNo 0xff bytes as follows,here 4 screens =====

  6.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  7.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  8.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  9.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  10.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  11.     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,


  12.     //=============================================================================


  13.     /*0xff,0xff,0x80,0x01,0x80,0x01,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x03,
  14.     0x80,0x03,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x01,0x80,0x01,0xff,0xff, //"E"

  15.     0xff,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,
  16.     0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x01,0x80,0x01,0xff,0xff,// "L"

  17.     0xff,0xff,0x80,0x01,0x80,0x01,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x03,
  18.     0x80,0x03,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x01,0x80,0x01,0xff,0xff, //"E"

  19.     0xff,0xff,0xe0,0x07,0xc0,0x03,0xcf,0xf3,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,
  20.     0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0xcf,0xf3,0xc0,0x03,0xe0,0x07,0xff,0xff,// "C"

  21.     0xff,0xff,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x80,0x01,
  22.     0x80,0x01,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0xff,0xff,// "H"

  23.     0xff,0xff,0xf8,0x1f,0xf0,0x0f,0xe3,0xc7,0xe7,0xe7,0xc7,0xe3,0xcf,0xf3,0xcf,0xf3,
  24.     0xcf,0xf3,0xcf,0xf3,0xc7,0xe3,0xe7,0xe7,0xe3,0xc7,0xf0,0x0f,0xf8,0x1f,0xff,0xff,// "O"

  25.     0xff,0xff,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,
  26.     0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0x8f,0xf1,0xc0,0x03,0xe0,0x07,0xff,0xff,// "U"

  27.     0xff,0xff,0xfc,0x3f,0xf9,0x9f,0xf3,0xcf,0xe7,0xe7,0xe7,0xff,0xf3,0xff,0xf8,0x3f,
  28.     0xfc,0x1f,0xff,0xcf,0xff,0xe7,0xe7,0xe7,0xf3,0xcf,0xf9,0x9f,0xfc,0x3f,0xff,0xff,// "S"

  29.     0xff,0xff,0x80,0x01,0x80,0x01,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x03,
  30.     0x80,0x03,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x01,0x80,0x01,0xff,0xff, //"E"

  31.     0xff,0xff,0x8f,0xf1,0x87,0xe1,0x83,0xc1,0x93,0xc9,0x93,0xc9,0x99,0x99,0x99,0x99,
  32.     0x99,0x99,0x9c,0x39,0x9c,0x39,0x9e,0x79,0x9f,0xf9,0x9f,0xf9,0x9f,0xf9,0xff,0xff,// "M"*/

  33.     0xff,0xff,0xfc,0x3f,0xf3,0xcf,0xef,0xf7,0xdf,0xfb,0xd3,0xcb,0xbf,0xfd,0xbf,0xfd,
  34.     0xbf,0xfd,0xbb,0xdd,0xdc,0x3b,0xdf,0xfb,0xef,0xf7,0xf3,0xcf,0xfc,0x3f,0xff,0xff,//smile

  35.     0xff,0xff,0xfc,0x3f,0xfc,0x3f,0xf8,0x1f,0xf9,0x9f,0xf1,0x8f,0xf3,0xcf,0xf3,0xcf,
  36.     0xe0,0x07,0xe0,0x07,0xe7,0xe7,0xc7,0xe3,0xcf,0xf3,0x8f,0xf1,0x9f,0xf9,0xff,0xff,//"A"

  37.     0xff,0xff,0xe7,0xcf,0xe7,0x9f,0xe7,0x3f,0xe6,0x7f,0xe4,0xff,0xe1,0xff,0xe3,0xff,
  38.     0xe7,0xff,0xe7,0xff,0xe7,0xff,0xe7,0xff,0xe7,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,//"r"

  39.     0xff,0xff,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xf0,0x1f,0xe0,0x1f,0xc7,0x9f,
  40.     0xcf,0x9f,0xcf,0x9f,0xcf,0x9f,0xc7,0x9f,0xe0,0x0f,0xf0,0x0f,0xff,0xff,0xff,0xff,//"d"

  41.     0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,
  42.     0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xe3,0x8f,0xf0,0x0f,0xf8,0x27,0xff,0xff,0xff,0xff,//"u"

  43.     0xff,0xff,0xfe,0x7f,0xfe,0x7f,0xff,0xff,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,
  44.     0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xff,0xff,0xff,0xff,//"i"

  45.     0xff,0xff,0xff,0xff,0xf8,0x3f,0xf0,0x1f,0xe3,0x8f,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,
  46.     0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xe7,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,//"n"

  47.     0xff,0xff,0xff,0xff,0xf8,0x3f,0xf0,0x1f,0xf3,0x9f,0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,
  48.     0xe7,0xcf,0xe7,0xcf,0xe7,0xcf,0xf3,0x9f,0xf0,0x1f,0xf8,0x3f,0xff,0xff,0xff,0xff//"o"

  49.     };
  50.     byte BUFF[2*ScreenNO+2];
  51.     byte col,disrow;                                   //col--moving pointer;disrow--scanning row
  52.     unsigned int wordnumber;                           //the bytes of words you want to display
  53.     int Dpin[]={4,5,6,7};
  54.     int OOE=2;
  55.     int RCK=10;
  56.     int SCK=9;
  57.     int SER=8;
  58.     int VCC=11;
  59.     int GND=3;

  60.     void setup()
  61.     {
  62.        pinMode(2,OUTPUT);
  63.        pinMode(3,OUTPUT);
  64.        pinMode(4,OUTPUT);
  65.        pinMode(5,OUTPUT);
  66.        pinMode(6,OUTPUT);
  67.        pinMode(7,OUTPUT);
  68.        pinMode(8,OUTPUT);
  69.        pinMode(9,OUTPUT);
  70.        pinMode(10,OUTPUT);
  71.        pinMode(11,OUTPUT);
  72.       
  73.             //Serial.begin(9600);
  74.        digitalWrite(OOE,HIGH);
  75.             digitalWrite(VCC,HIGH);
  76.             digitalWrite(GND,LOW);
  77.             digitalWrite(SCK,LOW);
  78.     }
  79.     void loop()
  80.     {
  81.     byte i;
  82.     col=0;wordnumber=0;
  83.     while(1)
  84.     {
  85.        while(col<16)               // circulate for 16 time, which is moving a letter through a creen
  86.        {
  87.           for(i=0;i<SPEED;i++)    //the time of static display for a letter
  88.           {
  89.              for(disrow=0;disrow<16;disrow++)            //scanning the row
  90.              {
  91.                              digitalWrite(OOE,HIGH);
  92.                              digitalWrite(RCK,LOW);
  93.              loadoneline();                              //load the data of a row
  94.              sendoneline();                              //send the data of a row
  95.              sendPin(disrow);
  96.              digitalWrite(OOE,LOW);                     // enable the row scanning
  97.                   digitalWrite(RCK,HIGH);                    //light a row
  98.                             delay(1);
  99.              }
  100.           }
  101.        col++;                                                  //moving pointer
  102.        }
  103.     col=0;
  104.     wordnumber+=32;               // point to the next word
  105.     if(wordnumber>=WordNO*32)wordnumber=0;              //while all the letters are dispalyed, back to the beginning
  106.     }
  107.     }
  108.     /***************** load the data of a row *****************/
  109.     void loadoneline( )
  110.     {
  111.     byte s;
  112.     unsigned int k;
  113.        for(s=0;s< ScreenNO+1;s++)           
  114.        {
  115.             k = wordnumber+32*s+2*disrow;
  116.             if (k>=WordNO*32)k -= WordNO*32;
  117.        BUFF[2*s]=HZ[k];
  118.        BUFF[2*s+1]=HZ[k+1];
  119.        }
  120.     }
  121.     /*************** send the data of a row *******************/
  122.     void sendoneline( )
  123.     {
  124.     byte s;
  125.     byte inc;
  126.     if(col<8)inc=0;else inc=1;
  127.        for(s=2*ScreenNO+inc;s>=1+inc;s--)
  128.        {
  129.        sendUtra(two_onechar(BUFF[s-1],BUFF[s]));
  130.        }
  131.     }
  132.     /*********** generate data which makes word moving ************/
  133.     byte two_onechar(byte h1,byte h2)
  134.     {
  135.     byte temp,tempcol;
  136.     if(col<8) tempcol=col;
  137.     else tempcol=col-8;
  138.     temp=(h1<<tempcol)|(h2>>(8-tempcol));
  139.     //temp=255-temp;
  140.     return temp;
  141.     }
  142.     /***************************************************************/
  143.     void sendPin(byte j)
  144.     {
  145.             for (int n=0;n<4;n++)
  146.        {
  147.           if((0x01&j) < 0x01)
  148.                     {digitalWrite(Dpin[n],LOW);}
  149.                     else
  150.                     {digitalWrite(Dpin[n],HIGH);}
  151.           j>>=1;
  152.        }
  153.     }
  154.     /**************************************************************/
  155.     void sendUtra(byte j)
  156.     {
  157.        for (int n=0;n<8;n++)
  158.        {
  159.           digitalWrite(SCK,LOW);
  160.                     if((0x01&j) < 0x01)
  161.                     {digitalWrite(SER,LOW);}
  162.                     else
  163.                     {digitalWrite(SER,HIGH);}
  164.           j=j>>1;
  165.           digitalWrite(SCK,HIGH);
  166.                     //delay(1);

  167.        }
  168.     }
Copy Code

The program above is displaying words moving from left to right.

Here is some function which moves the words from right to left:
  1.     /***************** load the data of a row *****************/
  2.     void loadoneline( )
  3.     {
  4.     byte s;
  5.     unsigned int k;
  6.        for(s=0;s< ScreenNO+1;s++)           
  7.        {
  8.             k = wordnumber+32*s+2*disrow;
  9.             if (k>=WordNO*32)k -= WordNO*32;
  10.        BUFF[2*s+1]=HZ[k];
  11.        BUFF[2*s]=HZ[k+1];
  12.        }
  13.     }
  14.     /*************** send the data of a row *******************/
  15.     void sendoneline( )
  16.     {
  17.     byte s;
  18.     byte inc;
  19.     if(col<8)inc=0;else inc=1;
  20.        for(s=1+inc;s<=2*ScreenNO+inc;s++)
  21.        {
  22.        sendUtra(two_onechar(BUFF[s-1],BUFF[s]));
  23.        }
  24.     }
  25.     /******* generate data which makes word moving ************/
  26.     byte two_onechar(byte h1,byte h2)
  27.     {
  28.     byte temp,tempcol;         
  29.     if(col<8) tempcol=col;
  30.     else tempcol=col-8;
  31.     temp=(h1>>tempcol)|(h2<<(8-tempcol));   
  32.     return temp;           
  33.     }
Copy Code




In fact, you can assemble a acreen of ant size you want(times of 16), large square screen or long screen. And you can program it to display anything you want.
You may be confused about about the letter coding. Here is an example:







Click to see schematic diagram
Back Forum