Scrolling text in LED dotmatrix display

Introduction:
Multiplexed displays are electronic displays where the entire display is not driven at one time. Instead, sub-units of the display (typically, rows or columns for a dot matrix display or individual characters for a character orientated display, occasionally individual display elements) are multiplexed, that is, driven one at a time, but the electronics and the persistence of vision combine to make the viewer believe the entire display is continuously active.

10x8 LED dot matrix display:
   Below figure illustrates the construction of a 10x8 LED dot matrix display.

































 Working:
In the above figure, the rows are negative and columns are positive. Now, if I connect a single column to positive 3V and a single row to negative (0v), then the LED in place of the intersection of the corresponding row and column will glow. Now , if we select a single column(means a + volt at selected column) , say column 1 and multiple rows (means connect 0V to few selected rows), say row 1,2 & 8, then the selected 1,2 and 8 LEDs in column 1 will glow. Now if i shift the column(means shifting the positive voltage from column 1 to column 2), and if i change the row data ,then the new data will be displayed in column 2.
    Now, if i continuously shift the column and provide row data corresponding to each column, then i can display the different row data (8 bit) in different columns...
  . So, if one frame(10 column shift) is completed within 1/16 th of a second, then due to the persistence of vision of our eye, we will feel the entire columns are activated at a time, and thus we will see all the ten -8bit data corresponding to the 10 columns , at a time.........
    Now, if a set of 8bit data (say 5x8 ) represents a letter, say , 'F' then we will see letter 'F' in the display.



SCROLLING TEXT IN 10x8 LED DOT MATRIX DISPLAY


























DOWNLOAD COMPLETE SOURCE CODE + CIRCUIT DIAGRAM + HEX CODE (all in a ZIP  archive) FROM BELOW:










Circuit  explanation:
   In the above circuit, the PIC16F877A provides the 8 bit row data. CD4017 is used to select the column one by one. Now, for shifting the column position, a clock is provided by the PIC to the CD4017. On every clock, the column is shifted .(from right to left in this case).
  Note:
    Here, I used a PIC16F877A microcontroller and a CD4017 johnson counter. But the 40 pin PIC16F877A is having more number of PORT pins, and thus there is no need of the CD4017 for this small display, and i could use some other port pins of the PIC to work as a johnson counter. But any way, i used a CD4017 just because, in the same circuit board, i could use other free PORT pins for some other purpose like LCD interfacing, USRT, SPI, PWM etc later...

    
Programming:
I am using Hi-Tech C compiler with MPLAB IDE for compiling the embedded C program and thereby generating the hex file which is to be loaded/burned to the PIC. There are many other C compilers, but i started with Hi-Tech C and I like it. So I am continuing with it....

Before doing a scrolling text,what i did is a still letter display.

Program to display a still letter 'F' in the display (example)

/* To display a still letter 'F' in the display */
#include<pic.h>
#define _XTAL_FREQ 20e6
__CONFIG(0x3F3A);
unsigned char i;
void clock()
{
    RB6=1;
    RB6=0;
}
void reset()
{
    RB7=1;
    RB7=0;
}
void display(unsigned char c)
{
    PORTD=c;          /* to display 1/5th of letter                                              */
    __delay_ms(1);    /* to display the data in a column for 1ms                        */
    PORTD=255;      /* to blank the display                                                     */
    clock();                /* to give a clock to CD4017 for column multiplexing      */
}
void pic_init()
{
    TRISD=0;
    TRISB6=0;
    TRISB7=0;
}
/* MAIN FUNCTION */
void main()
{
    __delay_ms(100);
    pic_init();                /* to set out ports                                            */
    while(1)
    {
        reset();               /* to jump to first column from right              */
        display(0x7f);    /* 1/5 portion of letter F                                 */
        display(0x6f);    /* 1/5 portion of letter F                                 */
        display(0x6f);    /* 1/5 portion of letter F                                 */
        display(0x6f);    /* 1/5 portion of letter F                                  */
        display(0x01);   /* 1/5 portion of letter F                                  */
        reset();               /* to jump to first column from right               */
    }
}
/*program end */

The above photo shows the letter 'F' in my 10x8 LED dotmatrix display . 

       In the photo we can observe that the first 1/5 th of the letter is less brighter than the other 4 columns. Now, the last column is the brightest column compared to other 4. This happens due to the unequal loading in different columns. In first 1/5 th of the letter requires more number of LEDs to be active. This result in increased current. If the current increases, the voltage drop inside the CD4017 and PIC  increases and thus the voltage across LED will be reduced which results in the unequal brightness. I can rectify this problem by some hardware modifications. But any way, i feel better choice is software modification. This problem is solved in scrolling text program, by including a scanning with in the column. So, at an instant, only a single LED will be active with in a column. This could be compared to the horizontal scanning in a TV.(even though here it is vertical).


Scrolling text in this 10x8 LED dot matrix display:

In the case of scrolling display we need to create a buffer of 10 bytes and need to store the data to be displayed in a frame. Then after displaying a frame, we need to shift the data with in the array as shown below.
for(i=9;i>0;i--)
{
    array[i]=array[i-1];
} 
The above code shift the data in the array which is to be displayed as next shifted frame. Now, array[0] (the data to be displayed in first column from the right) is loaded with new data, which will be a fraction (1/5) of a 5x8 font. Now the new frame array is displayed for a particular interval of time (depending on the variable speed and delays used in the program). 
   Brightness is equalized by activating the column LEDs one by one , using a scanning with in the column.


for(j=0;j<9;j++)
{
    PORTD=~(array[i]&(p));__delay_ms(.1);p<<=1;
}
PROGRAM

/* Scrolling text in 10x8 LED dot matrix display */
#include<pic.h>
#define _XTAL_FREQ 20e6
__CONFIG(0x3F3A);
char array[10],p,j,s,i,still;
void clock(){ RB6=1;RB6=0;}
void reset(){ RB7=1;RB7=0;}
void scroll(char a,char b,char c,char d,char e)            //display function //
{
    short int count=6;
    while(count>0)
    {
        array[0]=~a;
        a=b;b=c;c=d;d=e;e=255;
        reset();
        for(s=0;s<still;s++)
        {
            for(i=0;i<10;i++)
            {
                p=1;
                for(j=0;j<9;j++)
                {
                    PORTD=~(array[i]&(p));__delay_ms(.1);p<<=1;
                }
                clock();
            }
        }
        for(i=9;i>0;i--)
        {
            array[i]=array[i-1];
        }
        count--;
    }
}
////////////////////////FONT DATA////////////////////////
void A(){scroll(0xC1,  0xB7,   0x77,   0xB7,   0xC1);}   //letter A
void B(){scroll(0x01,  0x6D,   0x6D,   0x6D,   0x93);}   //letter B
void C(){scroll(0x83,  0x7D,   0x7D,   0x7D,   0xBB);}  //  "
void D(){scroll(0x01,  0x7D,   0x7D,   0xBB,   0xC7);}
void E(){scroll(0x01,  0x6D,   0x6D,   0x6D,   0x7D);}
void F(){scroll(0x01,  0x6F,   0x6F,   0x6F,   0x7F);}
void G(){scroll(0x83,  0x7D,   0x65,   0x6D,   0xA3);}
void H(){scroll(0x01,  0xEF,   0xEF,   0xEF,   0x01);}
void I(){scroll(0x7D,  0x7D,   0x1,   0x7D,   0x7D);}
void J(){scroll(0xF3,  0x7D,   0x7D,   0x03,   0x7F);}
void K(){scroll(0x01,  0xEF,   0xD7,   0xBB,   0x7D);}
void L(){scroll(0x01,  0xFD,   0xFD,   0xFD,   0xFD);}
void M(){scroll(0x01,  0xBF,   0xDF,   0xBF,   0x01);}
void N(){scroll(0x01,  0xBF,   0xDF,   0xEF,   0x01);}
void O(){scroll(0x83,  0x7D,   0x7D,   0x7D,   0x83);}
void P(){scroll(0x01,  0x6F,   0x6F,   0x6F,   0x9F);}
void Q(){scroll(0x83,  0x7D,   0x75,   0x79,   0x81);}
void R(){scroll(0x01,  0x6F,   0x6F,   0x6F,   0x91);}
void S(){scroll(0x9B,  0x6D,   0x6D,   0x6D,   0xB3);}
void T(){scroll(0x7F,  0x7F,   0x01,   0x7F,   0x7F);}
void U(){scroll(0x03,  0xFD,   0xFD,   0xFD,   0x03);}
void V(){scroll(0x07,  0xFB,   0xFD,   0xFB,   0x07);}
void W(){scroll(0x01,  0xFB,   0xF7,   0xFB,   0x01);}
void X(){scroll(0x39,  0xD7,   0xEF,   0xD7,   0x39);}
void Y(){scroll(0x3F,  0xDF,   0xE1,   0xDF,   0x3F);}
void Z(){scroll(0x79,  0x75,   0x6D,   0x5D,   0x3D);}    //letter Z
void D0(){scroll(0x83,  0x7D,   0x7D,   0x7D,   0x83);}  //NUM 0
void D1(){scroll(0xDD,  0xBD,   0x1,   0xFD,   0xFD);}
void D2(){scroll(0xBD,  0x79,   0x75,   0x6D,   0x9D);}
void D3(){scroll(0x7B,  0x7D,   0x5D,   0x4D,   0x33);}
void D4(){scroll(0xCF,  0xAF,   0x6F,   0xEF,   0x1);}
void D5(){scroll(0xB,  0x5D,   0x5D,   0x5D,   0x63);}
void D6(){scroll(0x83,  0x6D,   0x6D,   0x6D,   0xB3);}
void D7(){scroll(0x79,  0x77,   0x6F,   0x5F,   0x3F);}
void D8(){scroll(0x93,  0x6D,   0x6D,   0x6D,   0x93);}
void D9(){scroll(0x9B,  0x6D,   0x6D,   0x6D,   0x83);}  //NUM 9
void SP(){scroll(255,255,255,255,255);}               //SPACE
/////////////////////////////////////////
void main()
{
    TRISD=0;
    TRISB6=0;
    TRISB7=0;
    still=20; //SPEED CONTROL
    while(1)
    {
        A(); B(); C(); D(); E(); F(); G(); H(); I(); J();
        K(); L(); M(); N(); O(); P(); SP(); SP();
        /* etc etc etc  */
    }
}
//PROGRAM END//

In the above code, we can see that each font is a function. But that is not a good way. Better method is a look up table implementation for the font data so that they could be easily fetched without any if else condition and this decrease the access time and increase the efficiency..
////////////////////////////////////////////////////////////////////
/* Scrolling text in 10x8 LED dot matrix display                  */
/* Improved code compared to previous one                         */
/*Implemented a look up table for font to increase the access time*/
/*vinodstanur@gmail.com http://blog.vinu.co.in                    */
////////////////////////////////////////////////////////////////////
#include<pic.h>
#define _XTAL_FREQ 20e6
__CONFIG(0x3F3A);
char array[10],p,j,s,i,still;
extern const char font_5x7[95][5];
void clock(){ RB6=1;RB6=0;}
void reset(){ RB7=1;RB7=0;}
void scroll(char a,char b,char c,char d,char e)            //display function //
{
    short int count=6;
    while(count>0)
    {
        array[0]=a;
        a=b;b=c;c=d;d=e;e=0;
        reset();
        for(s=0;s<still;s++)
        {
            for(i=0;i<10;i++)
            {
                p=1;
                for(j=0;j<9;j++)
                {
                    PORTD=~(array[i]&(p));__delay_ms(.1);p<<=1;
                }
                clock();
            }
        }
        for(i=9;i>0;i--)
        {
            array[i]=array[i-1];
        }
        count--;
    }
}

void printf(const char *p)
{
    while(*p) {
        scroll(font_5x7[*p-' '][0],font_5x7[*p-' '][1],font_5x7[*p-' '][2],font_5x7[*p-' '][3],font_5x7[*p-' '][4]);
        p++;
    }
}
//SPACE
/////////////////////////////////////////
void main()
{
    TRISD=0;
    TRISB6=0;
    TRISB7=0;
    still=20; //SPEED CONTROL
    while(1)
    {
        printf("HELLO WORLD ");
        printf("I am testing font..*!~_+=-/\\,.7895WMvuy....");
        
    }
}

//look up table for font//
const char font_5x7[95][5] = {
    {0x00,0x00,0x00,0x00,0x00}, //
    {0x00,0x00,0x7a,0x00,0x00}, // !
    {0x00,0x70,0x00,0x70,0x00}, // "
    {0x14,0x3e,0x14,0x3e,0x14}, // #
    {0x10,0x2a,0x3e,0x2a,0x04}, // $
    {0x64,0x08,0x10,0x26,0x00}, // %
    {0x14,0x2a,0x14,0x02,0x00}, // &
    {0x00,0x00,0x70,0x00,0x00}, // '
    {0x00,0x3c,0x42,0x00,0x00}, // (
    {0x00,0x42,0x3c,0x00,0x00}, // )
    {0x00,0x2a,0x1c,0x2a,0x00}, // *
    {0x08,0x08,0x3e,0x08,0x08}, // +
    {0x00,0x01,0x06,0x04,0x00}, // ,
    {0x08,0x08,0x08,0x08,0x00}, // -
    {0x00,0x06,0x06,0x00,0x00}, // .
    {0x04,0x08,0x10,0x20,0x00}, // /
    {0x00,0x3c,0x42,0x3c,0x00}, // 0
    {0x00,0x22,0x7e,0x02,0x00}, // 1
    {0x22,0x46,0x4a,0x32,0x00}, // 2
    {0x44,0x52,0x52,0x6c,0x00}, // 3
    {0x18,0x28,0x7e,0x08,0x00}, // 4
    {0x74,0x52,0x52,0x4c,0x00}, // 5
    {0x3c,0x52,0x52,0x0c,0x00}, // 6
    {0x40,0x46,0x58,0x60,0x00}, // 7
    {0x2c,0x52,0x52,0x2c,0x00}, // 8
    {0x30,0x4a,0x4a,0x3c,0x00}, // 9
    {0x00,0x36,0x36,0x00,0x00}, // :
    {0x01,0x36,0x34,0x00,0x00}, // ;
    {0x00,0x08,0x14,0x22,0x00}, // <
    {0x14,0x14,0x14,0x14,0x00}, // =
    {0x00,0x22,0x14,0x08,0x00}, // >
    {0x00,0x20,0x4a,0x30,0x00}, // ?
    {0x3c,0x42,0x5a,0x38,0x00}, // @
    {0x3e,0x48,0x48,0x3e,0x00}, // A
    {0x7e,0x52,0x52,0x2c,0x00}, // B
    {0x3c,0x42,0x42,0x24,0x00}, // C
    {0x7e,0x42,0x42,0x3c,0x00}, // D
    {0x7e,0x52,0x52,0x42,0x00}, // E
    {0x7e,0x50,0x50,0x40,0x00}, // F
    {0x3c,0x42,0x4a,0x2e,0x00}, // G
    {0x7e,0x10,0x10,0x7e,0x00}, // H
    {0x00,0x42,0x7e,0x42,0x00}, // I
    {0x04,0x02,0x02,0x7c,0x00}, // J
    {0x7e,0x18,0x24,0x42,0x00}, // K
    {0x7e,0x02,0x02,0x02,0x00}, // L
    {0x7e,0x30,0x30,0x7e,0x00}, // M
    {0x7e,0x30,0x0c,0x7e,0x00}, // N
    {0x3c,0x42,0x42,0x3c,0x00}, // O
    {0x7e,0x48,0x48,0x30,0x00}, // P
    {0x3c,0x46,0x42,0x3d,0x00}, // Q
    {0x7e,0x48,0x4c,0x32,0x00}, // R
    {0x24,0x52,0x4a,0x24,0x00}, // S
    {0x00,0x40,0x7e,0x40,0x00}, // T
    {0x7c,0x02,0x02,0x7c,0x00}, // U
    {0x78,0x06,0x06,0x78,0x00}, // V
    {0x7e,0x0c,0x0c,0x7e,0x00}, // W
    {0x66,0x18,0x18,0x66,0x00}, // X
    {0x00,0x70,0x0e,0x70,0x00}, // Y
    {0x46,0x4a,0x52,0x62,0x00}, // Z
    {0x00,0x7e,0x42,0x42,0x00}, // [
    {0x20,0x10,0x08,0x04,0x00}, // "\"
    {0x00,0x42,0x42,0x7e,0x00}, // ]
    {0x00,0x20,0x40,0x20,0x00}, // ^
    {0x02,0x02,0x02,0x02,0x00}, // _
    {0x00,0x40,0x20,0x00,0x00}, // `
    {0x0c,0x12,0x14,0x1e,0x00}, // a
    {0x7e,0x12,0x12,0x0c,0x00}, // b
    {0x0c,0x12,0x12,0x00,0x00}, // c
    {0x0c,0x12,0x12,0x7e,0x00}, // d
    {0x0c,0x16,0x1a,0x08,0x00}, // e
    {0x08,0x3e,0x48,0x20,0x00}, // f
    {0x0a,0x15,0x15,0x19,0x00}, // g
    {0x7e,0x10,0x10,0x0e,0x00}, // h
    {0x00,0x12,0x5e,0x02,0x00}, // i
    {0x00,0x02,0x01,0x5e,0x00}, // j
    {0x7e,0x08,0x14,0x02,0x00}, // k
    {0x00,0x42,0x7e,0x02,0x00}, // l
    {0x1e,0x08,0x18,0x0e,0x00}, // m
    {0x1e,0x10,0x10,0x0e,0x00}, // n
    {0x0c,0x12,0x12,0x0c,0x00}, // o
    {0x1f,0x12,0x12,0x0c,0x00}, // p
    {0x0c,0x12,0x12,0x1f,0x00}, // q
    {0x1e,0x10,0x10,0x08,0x00}, // r
    {0x0a,0x1a,0x16,0x14,0x00}, // s
    {0x10,0x7c,0x12,0x02,0x00}, // t
    {0x1c,0x02,0x02,0x1e,0x00}, // u
    {0x00,0x1c,0x02,0x1c,0x00}, // v
    {0x1e,0x06,0x06,0x1e,0x00}, // w
    {0x12,0x0c,0x0c,0x12,0x00}, // x
    {0x18,0x05,0x02,0x1c,0x00}, // y
    {0x12,0x16,0x1a,0x12,0x00}, // z
{0x00,0x10,0x3c,0x42,0x00}, // {
        {0x00,0x00,0x7e,0x00,0x00}, // |
{0x00,0x42,0x3c,0x10,0x00}, // }
    {0x20,0x40,0x20,0x40,0x00}, // ~
};
VIDEO OF SCROLLING TEXT (taken through my mobile)

























 

50 comments :

  1. This comment has been removed by the author.

    ReplyDelete
  2. If any problem while compiling above code in latest version of Hi Tech C, then just post it here...Today, when I tried the above code in Hi Tech C latest version (at present 9.81) it is showing some errors as below:

    Error [984] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.9 type redeclared
    Error [1098] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.9 conflicting declarations for variable "D" (C:\Program Files\HI-TECH Software\PICC\9.81\include\pic16f877a.h:902)
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.9 ";" expected
    Error [285] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.47 no identifier in declaration
    Warning [374] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.47 missing basic type; int assumed
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 44.47 ";" expected
    Error [984] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.9 type redeclared
    Error [1098] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.9 conflicting declarations for variable "P" (C:\Program Files\HI-TECH Software\PICC\9.81\include\pic16f877a.h:897)
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.9 ";" expected
    Error [285] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.47 no identifier in declaration
    Warning [374] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.47 missing basic type; int assumed
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 56.47 ";" expected
    Error [984] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.9 type redeclared
    Error [1098] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.9 conflicting declarations for variable "R" (C:\Program Files\HI-TECH Software\PICC\9.81\include\pic16f877a.h:901)
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.9 ";" expected
    Error [285] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.47 no identifier in declaration
    Warning [374] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.47 missing basic type; int assumed
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 58.47 ";" expected
    Error [984] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.9 type redeclared
    Error [1098] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.9 conflicting declarations for variable "S" (C:\Program Files\HI-TECH Software\PICC\9.81\include\pic16f877a.h:896)
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.9 ";" expected
    Error [285] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.47 no identifier in declaration
    Warning [374] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.47 missing basic type; int assumed
    Error [314] D:\ELECTRONICS\new 2842011 c files\TEST.C; 59.47 ";" expected
    Error [183] D:\ELECTRONICS\new 2842011 c files\TEST.C; 88.18 function or function pointer required
    Advisory[1] too many errors (21)

    ********** Build failed! **********
    .
    .
    .
    SO JUST CHANGE THE void A(), void B(), etc etc to void _A_(), void _B_(), etc etc... and compile it.....

    ReplyDelete
  3. this is gourav, and i m new in embedded.
    i gnerate a pattern but i don't under stood how to scroll...please help me....

    ReplyDelete
  4. hi thanks for ur valuable one. now i have one doubt. if i want to connect more than 2 8x8 matrix led display, then what change has to made in ur coding and hardware part? please reply me by mail plz urgent. thank you very much.
    amanikandan.be89@gmail.com

    ReplyDelete
  5. ullu na banavo...rows badhi sarkhi j lage che


    ULLU MAT BANAO..

    ReplyDelete
  6. may you sagest me, this topic in code vision compiling with atmega8 ic.
    thanks

    ReplyDelete
  7. how to do if we want to make the display more than 10 colom.
    please replay.
    thanks

    ReplyDelete
  8. can this program be used to in 8x8x8 led matirx and can i also get the schematic diagram of the above ?
    can 74hc595 be used with cd4017 to scroll the word?
    please do reply if u have the answer, it would so gratful of u, please mail me at rajesh_200@ymail.com

    ReplyDelete
  9. hello Sir! I'm interested in trying out your project, can i get your full circuit diagram for the above project 10*8 led dot matrix display? it would be really grateful Sir. Please email me at agastya_21@hotmail.com. thank your very much Sir!

    ReplyDelete
  10. You didn't seen any circuit diagram here?!!!

    ReplyDelete
  11. Sir! I can't download the (DOWNLOAD COMPLETE SOURCE CODE + CIRCUIT DIAGRAM + HEX CODE (all in a ZIP archive) FROM BELOW:)

    ReplyDelete
  12. Programming Target (12/14/2012 3:13:10 PM)
    PIC16F876A found (b2)
    Erasing Target
    Programming Program Memory (0x0 - 0xA17)
    Programming Program Memory (0xA20 - 0xA27)
    Programming Program Memory (0xA40 - 0xA7F)
    Programming Program Memory (0xAC0 - 0xAFF)
    Programming Program Memory (0xB40 - 0xB7F)
    Programming Program Memory (0xBC0 - 0xBFF)
    Programming Program Memory (0xC40 - 0xC7F)
    Programming Program Memory (0xCC0 - 0xCFF)
    Programming Program Memory (0xD40 - 0xD7F)
    Programming Program Memory (0xDC0 - 0xDFF)
    Programming Program Memory (0xE40 - 0xE7F)
    Programming Program Memory (0xEC0 - 0xEFF)
    Programming Program Memory (0xF40 - 0xF7F)
    Programming Program Memory (0xFC0 - 0x12FF)
    Programming Program Memory (0x1340 - 0x137F)
    Programming Program Memory (0x13C0 - 0x13FF)
    Programming Program Memory (0x1440 - 0x147F)
    Programming Program Memory (0x14C0 - 0x14FF)
    Programming Program Memory (0x1540 - 0x157F)
    Programming Program Memory (0x15C0 - 0x15FF)
    Programming Program Memory (0x1640 - 0x167F)
    Programming Program Memory (0x16C0 - 0x16FF)
    Programming Program Memory (0x1740 - 0x177F)
    Programming Program Memory (0x17C0 - 0x1987)
    Programming Program Memory (0x19C0 - 0x19FF)
    Programming Program Memory (0x1A40 - 0x1A7F)
    Programming Program Memory (0x1AC0 - 0x1AFF)
    Programming Program Memory (0x1B40 - 0x1B7F)
    Programming Program Memory (0x1BC0 - 0x1BFF)
    Programming Program Memory (0x1C40 - 0x1C7F)
    Programming Program Memory (0x1CC0 - 0x1CFF)
    Programming Program Memory (0x1D40 - 0x1D7F)
    Programming Program Memory (0x1DC0 - 0x1DFF)
    Programming Program Memory (0x1E40 - 0x1E7F)
    Programming Program Memory (0x1EC0 - 0x1EFF)
    Programming Program Memory (0x1F40 - 0x1F7F)
    Programming Program Memory (0x1FC0 - 0x1FFF)
    Verifying Program Memory (0x0 - 0xA17)

    PK2Error0027: Failed verify (Address = 0x9FD - Expected Value 0x1 - Value Read 0x0)

    PICkit 2 Ready


    WHAT IS THIS ERROR I CANT FIX IT PLEASE HELP ME

    ReplyDelete
  13. Make: The target "C:\Users\speedy gonzales\Desktop\code.o" is out of date.
    Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "code.asm" /l"code.lst" /e"code.err" /d__DEBUG=1
    Error[105] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 1 : Cannot open file (Include File "pic.h" not found)
    Warning[205] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 3 : Found directive in column 1. (__CONFIG)
    Error[122] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 4 : Illegal opcode (array)
    Warning[205] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 5 : Found directive in column 1. (extern)
    Error[149] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 5 : Directive only allowed when generating an object file
    Error[122] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 6 : Illegal opcode (clock)
    Error[122] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 7 : Illegal opcode (reset)
    Error[122] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 8 : Illegal opcode (scroll)
    Error[108] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 9 : Illegal character ({)
    Warning[207] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 10 : Found label after column 1. (short)
    Error[122] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 10 : Illegal opcode (int)
    Error[139] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 112 : Maximum of 100 lines inside WHILE-ENDW
    Error[129] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 157 : Expected (ENDW)
    Error[129] C:\USERS\SPEEDY GONZALES\DESKTOP\CODE.ASM 158 : Expected (END)
    Halting build on first failure as requested.

    ReplyDelete
  14. this is an awesome project! :) just have some questions.. what if i wanted a matrix with more than 10 columns? how can i cascade the 4017 ics? thanks sir :)

    ReplyDelete
  15. please post circuit diagram and asm code for scrolling text on single colored one 8*8 dot matrix using at89s52,74hc595,uln2803.

    ReplyDelete
  16. do u have the proteus simulation of this system? if do then please mail me at rajesh_200@ymail.com

    ReplyDelete
  17. DOWNLOAD COMPLETE SOURCE CODE + CIRCUIT DIAGRAM + HEX CODE (all in a ZIP archive) FROM BELOW: ? Where ??

    ReplyDelete
  18. What are changes for 16f876A please any one help me

    ReplyDelete
  19. Sir how can I increase the column more then 10?, please kindly send the circuit diagram and program code to my my email id. Sir it's urgent. my email id pinkudeka03@gmail.com

    ReplyDelete
  20. nice your creation wish to more intelligence

    ReplyDelete
  21. how to download .zip file . ur file was corrupted pls help

    ReplyDelete
  22. Sir. its nice but Where should i Download all files?

    ReplyDelete
  23. how to increase the column ? how to connect next cd 4017 ?

    ReplyDelete
  24. sir how to scrolling 20 pin column in 8051 controller?

    ReplyDelete
  25. This comment has been removed by the author.

    ReplyDelete
  26. I’ve found LED billboards to be more versatile and effective than traditional signs. Do you know how to make it look like a 3d?

    ReplyDelete
  27. i need the program on atmega or kile email me at amgain04@gmail.com

    ReplyDelete
  28. provide me complete circuit diagram of its plez

    ReplyDelete
  29. it is real guide for making led matrix thanks, how i can add more column in this project

    ReplyDelete
  30. What a adorable article, I really found this article helpful for me. I really like and appreciated your work. You have done good job. Keep sharing useful article like this.
    Doogee Phone

    ReplyDelete
  31. can u explain the following code? i cant understand

    PORTD=~(array[i]&(p));__delay_ms(.1);p<<=1;

    ReplyDelete
  32. how can increase the column

    ReplyDelete
  33. Not working in proteus.Pls help :-(

    ReplyDelete
  34. Photonplay is one of the leading manufacturers of Electronic Display Board and signs and supplies various electronic display boards and related equipments in the domestic as well as international market.

    ReplyDelete
  35. I am rajiv I understand your program but I can't understand p<<=1 line plase explain
    my email. :tnctvl@gmail.com

    ReplyDelete
  36. Cd4017 only use 10x8 how to use 20x8 or 40x8 or 80x8
    Your have any idea

    ReplyDelete
  37. How this font look up table works... somebody please explain..... how it points to the correct alphabet

    ReplyDelete
  38. There is a problem with __CONFIG(0x3F3A);please help me to solve this.

    ReplyDelete
  39. Hello Sir,
    I am a hobbyist of electronics. Would you explain the 26th number line. I have spent huge amount of time to understand but ended in smoke. Please help me. I have mentioned the portion of the code bellow.



    for(j=0;j<9;j++)
    {
    PORTD=~(array[i]&(p));__delay_ms(.1);p<<=1;
    }

    ReplyDelete
  40. Hi Vinod,

    your download link is dead,can you please update this?

    ReplyDelete
  41. Hi. Please I am new to programming and microcontrollers, but I do love the concept.

    ReplyDelete
  42. hi, how to program this circuit.
    I am a beginner

    ReplyDelete
  43. Thanks for all the hard work. Appreciate the brushes, which are very well done. Keep up the good work.

    Moving Display Board

    ReplyDelete
  44. Why the error show undefined delay?
    Can u help me to solve it?
    Email: fang-0104@hotmail.com

    ReplyDelete
  45. i m not able to download the COMPLETE SOURCE CODE + CIRCUIT DIAGRAM + HEX CODE (all in a ZIP archive) plz help

    ReplyDelete
  46. i tried to compile the code using mikroc but it displays error
    the first error was ; cannot load pic.h . please help

    ReplyDelete