Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

DIY Moving Message Display

Status
Not open for further replies.
I built this little scrolling sign long ago. Design specs: at89c2051, programmed in assembly, 4017 + transistors dmux, 5x21 dots.

Schematic and full source at:
**broken link removed**

Hope that it is useful for someone
 

hugo00 said:
pcup said:
Hi all Dear Experts.
I am constant browser of this thread for updates.
Have look at attached files. !! award winning design.!!
but i think it is limited to fixed modules of matrix. is it possible to expand this desing to say 20 to 30 modules of dotmatrix.

Thanx

Hi pcup,

May be you are the EXPERT but lot of people coming here just for fun or to get some knowledge.

If you check the diagram (posted long time a go) then you can see (if you understood little be electronics) my design is not limited by columns (?? modules 8x8??) and you can adopt if you like little be of work (programming)
Best regards all EXPERTS - ={lol} = - :D


Thank You.. I missed this One
:D - EXPERT - :D
 

Re: 16x16 led moving message projects

michaelkaka said:
rojo said:
Code:
#include <90s8535.h>
#include <delay.h>                  
                              

// led display
#define LED_RESET		PORTB.0
#define LED_CLOCK		PORTB.1
#define LED_DATA		PORTB.4	
#define SCROLL_DELAY	140  // multiple of 7 (use smaller numbers for faster scroll)

// keyboard 
#define KBD_CLOCK		PORTD.2  // to be used for host -> keyboard communication
#define KBD_DATA        	PIND.4                                 
#define BUFF_SIZE		64
            
// lcd 
#define LCD_RS			PORTD.5
#define LCD_RW 		PORTD.6
#define LCD_E  		PORTD.7 	 
#define COMMAND_MODE 	0
#define DATA_MODE    	1	     
#define WRITE_MODE   	0
#define READ_MODE    	1 		                                                              
#define LCD_DATA_PORT	PORTC     
                  
// functions                  
void lcd_init(void);
void lcd_clear(void);
void lcd_putc(unsigned char);
void lcd_putsf(unsigned char flash *); 
void lcd_puts(unsigned char *str);
interrupt [EXT_INT0] keyboard_isr(void); 
void put_char_kbbuff(unsigned char);   
void put_scancode_kbbuff(unsigned char);
int getchar(void);                  
int kbhit(void);
void decode(unsigned char);

// global variables ***************************    
unsigned char kb_buffer[BUFF_SIZE];
unsigned char bitcount;	    
unsigned char *inpt, *outpt;
unsigned char buffcnt = 0;                                                                                                                    

// led character definitions 
// 5 data columns + 1 space
// for each character
flash unsigned char led_chars[94][6] = {  
0x00,0x00,0x00,0x00,0x00,0x00,	// space
0x00,0x00,0xfa,0x00,0x00,0x00,	// !	
0x00,0xe0,0x00,0xe0,0x00,0x00,	// "
0x28,0xfe,0x28,0xfe,0x28,0x00,	// #
0x24,0x54,0xfe,0x54,0x48,0x00,  // $
0xc4,0xc8,0x10,0x26,0x46,0x00,  // %
0x6c,0x92,0xaa,0x44,0x0a,0x00,  // &
0x00,0xa0,0xc0,0x00,0x00,0x00,  // '
0x00,0x38,0x44,0x82,0x00,0x00,	// (
0x00,0x82,0x44,0x38,0x00,0x00,  // )
0x28,0x10,0x7c,0x10,0x28,0x00,  // *
0x10,0x10,0x7c,0x10,0x10,0x00,  // +
0x00,0x0a,0x0c,0x00,0x00,0x00,  // ,
0x10,0x10,0x10,0x10,0x10,0x00,  // -
0x00,0x06,0x06,0x00,0x00,0x00,  // .
0x04,0x08,0x10,0x20,0x40,0x00,  // /  
0x7c,0x8a,0x92,0xa2,0x7c,0x00,  // 0
0x00,0x42,0xfe,0x02,0x00,0x00,  // 1
0x42,0x86,0x8a,0x92,0x62,0x00,  // 2
0x84,0x82,0xa2,0xd2,0x8c,0x00,	// 3
0x18,0x28,0x48,0xfe,0x08,0x00,	// 4
0xe5,0xa2,0xa2,0xa2,0x9c,0x00,	// 5
0x3c,0x52,0x92,0x92,0x0c,0x00,	// 6
0x80,0x8e,0x90,0xa0,0xc0,0x00,	// 7
0x6c,0x92,0x92,0x92,0x6c,0x00,	// 8
0x60,0x92,0x92,0x94,0x78,0x00,	// 9  
0x00,0x6c,0x6c,0x00,0x00,0x00,	// :
0x00,0x6a,0x6c,0x00,0x00,0x00,	// ;
0x10,0x28,0x44,0x82,0x00,0x00,	// <
0x28,0x28,0x28,0x28,0x28,0x00,	// =
0x00,0x82,0x44,0x28,0x10,0x00,	// >
0x40,0x80,0x8a,0x90,0x60,0x00,	// ?
0x4c,0x92,0x9e,0x82,0x7c,0x00,	// @
0x7e,0x88,0x88,0x88,0x7e,0x00,	// A
0xfe,0x92,0x92,0x92,0x6c,0x00,	// B
0x7c,0x82,0x82,0x82,0x44,0x00,	// C
0xfe,0x82,0x82,0x44,0x38,0x00,	// D
0xfe,0x92,0x92,0x92,0x82,0x00,	// E
0xfe,0x90,0x90,0x90,0x80,0x00,	// F
0x7c,0x82,0x92,0x92,0x5e,0x00,	// G
0xfe,0x10,0x10,0x10,0xfe,0x00,	// H
0x00,0x82,0xfe,0x82,0x00,0x00,	// I
0x04,0x02,0x82,0xfc,0x80,0x00,	// J
0xfe,0x10,0x28,0x44,0x82,0x00,	// K
0xfe,0x02,0x02,0x02,0x02,0x00,	// L
0xfe,0x40,0x30,0x40,0xfe,0x00,	// M
0xfe,0x20,0x10,0x08,0xfe,0x00,	// N
0x7c,0x82,0x82,0x82,0x7c,0x00,	// O
0xfe,0x90,0x90,0x90,0x60,0x00,	// P
0x7c,0x82,0x8a,0x84,0x7a,0x00,	// Q
0xfe,0x90,0x98,0x94,0x62,0x00,	// R
0x62,0x92,0x92,0x92,0x8c,0x00,	// S
0x80,0x80,0xfe,0x80,0x80,0x00,	// T
0xfc,0x02,0x02,0x02,0xfc,0x00,	// U
0xf8,0x04,0x02,0x04,0xf8,0x00,	// V
0xfc,0x02,0x1c,0x02,0xfc,0x00,	// W
0xc6,0x28,0x10,0x28,0xc6,0x00,	// X
0xe0,0x10,0x0e,0x10,0xe0,0x00,	// Y
0x86,0x8b,0x92,0xa2,0xc2,0x00,	// Z
0x00,0xfe,0x82,0x82,0x00,0x00,	// [
0x00,0x00,0x00,0x00,0x00,0x00,     // *** do not remove this empty char ***
0x00,0x82,0x82,0xfe,0x00,0x00,	// ]
0x20,0x40,0x80,0x40,0x20,0x00,	// ^
0x02,0x02,0x02,0x02,0x02,0x00,	// _
0x00,0x80,0x40,0x20,0x00,0x00,	// `
0x04,0x2a,0x2a,0x2a,0x1e,0x00,	// a
0xfe,0x12,0x22,0x22,0x1c,0x00,	// b
0x1c,0x22,0x22,0x22,0x04,0x00,	// c
0x1c,0x22,0x22,0x12,0xfe,0x00,	// d
0x1c,0x2a,0x2a,0x2a,0x18,0x00,	// e
0x10,0x7e,0x90,0x80,0x40,0x00,	// f
0x30,0x4a,0x4a,0x4a,0x7c,0x00,	// g
0xfe,0x10,0x20,0x20,0x1e,0x00,	// h
0x00,0x22,0xbe,0x02,0x00,0x00,	// i
0x04,0x02,0x22,0xbc,0x00,0x00,	// j
0xfe,0x08,0x14,0x22,0x00,0x00,	// k
0x00,0x82,0xfe,0x02,0x00,0x00,	// l
0x3e,0x20,0x18,0x20,0x1e,0x00,	// m
0x3e,0x10,0x20,0x20,0x1e,0x00,	// n
0x1c,0x22,0x22,0x22,0x1c,0x00,	// o
0x3e,0x28,0x28,0x28,0x10,0x00,	// p
0x10,0x28,0x28,0x18,0x3e,0x00,	// q
0x3e,0x10,0x20,0x20,0x10,0x00,	// r
0x12,0x2a,0x2a,0x2a,0x04,0x00,	// s
0x20,0xfc,0x22,0x02,0x04,0x00,	// t
0x3c,0x02,0x02,0x04,0x3e,0x00,	// u
0x38,0x04,0x02,0x04,0x38,0x00,	// v
0x3c,0x02,0x0c,0x02,0x3c,0x00,	// w
0x22,0x14,0x08,0x14,0x22,0x00,	// x
0x30,0x0a,0x0a,0x0a,0x3c,0x00,	// y
0x22,0x26,0x2a,0x32,0x22,0x00, 	// z
0x00,0x10,0x6c,0x82,0x00,0x00,	// { 
0x00,0x00,0xfe,0x00,0x00,0x00,	// |
0x00,0x82,0x6c,0x10,0x00,0x00 };	// }


// keyboard scan codes (without & with shift key pressed)
flash unsigned char unshifted[67][2] = {
//0x0d,9,
0x0e,'`',0x15,'q',0x16,'1',0x1a,'z',0x1b,'s',0x1c,'a',0x1d,'w',0x1e,'2',0x21,'c',0x22,'x',0x23,'d',0x24,'e',
0x25,'4',0x26,'3',0x29,' ',0x2a,'v',0x2b,'f',0x2c,'t',0x2d,'r',0x2e,'5',0x31,'n',0x32,'b',0x33,'h',0x34,'g',
0x35,'y',0x36,'6',0x39,',',0x3a,'m',0x3b,'j',0x3c,'u',0x3d,'7',0x3e,'8',0x41,',',0x42,'k',0x43,'i',0x44,'o',
0x45,'0',0x46,'9',0x49,'.',0x4a,'/',0x4b,'l',0x4c,';',0x4d,'p',0x4e,'-',0x52,'`',0x54,'[',0x55,'=',0x5a,13,
0x5b,']',0x5d,'/',0x61,'<',0x66,8,  0x69,'1',0x6b,'4',0x6c,'7',0x70,'0',0x71,',',0x72,'2',0x73,'5',0x74,'6',
0x75,'8',0x79,'+',0x7a,'3',0x7b,'-',0x7c,'*',0x7d,'9',0,0 };


flash unsigned char shifted[67][2] = {
//0x0d,9,
0x0e,'`',0x15,'Q',0x16,'!',0x1a,'Z',0x1b,'S',0x1c,'A',0x1d,'W',0x1e,'@',0x21,'C',0x22,'X',0x23,'D',0x24,'E',
0x25,'$',0x26,'#',0x29,' ',0x2a,'V',0x2b,'F',0x2c,'T',0x2d,'R',0x2e,'%',0x31,'N',0x32,'B',0x33,'H',0x34,'G',
0x35,'Y',0x36,'^',0x39,'L',0x3a,'M',0x3b,'J',0x3c,'U',0x3d,'&',0x3e,'*',0x41,'<',0x42,'K',0x43,'I',0x44,'O',
0x45,')',0x46,'(',0x49,'>',0x4a,'?',0x4b,'L',0x4c,':',0x4d,'P',0x4e,'_',0x52,'"',0x54,'{',0x55,'+',0x5a,13,
0x5b,'}',0x5d,'|',0x61,'>',0x66,8,  0x69,'1',0x6b,'4',0x6c,'7',0x70,'0',0x71,',',0x72,'2',0x73,'5',0x74,'6',
0x75,'8',0x79,'+',0x7a,'3',0x7b,'-',0x7c,'*',0x7d,'9',0,0 };
                       



//***********************************************
void main() {                                               	
	int i,j;
    	unsigned char ch,row;
	flash unsigned char *dataPtr, *tmpDataPtr;
	unsigned char messageLength, currentChar, charOffset, tmpCurrentChar, tmpCharOffset, ledArray[23];	
	unsigned char message[308];  // 300 chars + 4 spaces at start and end of message                   
	
	#asm("cli");    // disable all interrupts 
	// initialise ports 
	DDRA = 0xff;	// port A output 	
	DDRB = 0xff;	// port B output	
	DDRC = 0xff;	// port C output	
	DDRD = 0xeb;	// pins 2 & 4 inputs    
	
	// initialise keyboard variables
	inpt = kb_buffer; 
	outpt = kb_buffer;
	buffcnt = 0;
	bitcount = 11;
	
	// initialise lcd 
	lcd_init();       	    	            
	                                                 
	// initialise LED display (shift registers)	
	LED_RESET = 0;
   	LED_CLOCK = 0;
 	LED_RESET = 1;                  
	                  
	// initialise interrupt registers
	GIMSK = 0x40;	// enable INT0 interrupt
	MCUCR = 0x02;	// INT0 interrupt on falling edge    
	
	
   	#asm("sei");    // enable all interrupts
   	    
   	      
   	while(1) {
   		ch = 0x00;
    		i = 0;
    		// fill the array with 4 empty spaces at the start and the end of the message
		// as the screen has 4 chars
		// (it looks better if we start scrolling with empty screen and end
		// with empty screen , rather than displaying four chars immediatelly and
		// then start scrolling)
		message[i++] = ' ';   
   		message[i++] = ' ';   
   		message[i++] = ' ';   
   		message[i++] = ' ';    

		// enter message until 300 characters entered or <enter> key pressed  	        
    		while((ch != 13) || (i < 308)) {      
			ch = getchar();
			if ((ch != 13) && (ch != 'q')) {
				lcd_putc(ch);
				message[i++] = ch;
			}
			// if q is pressed clear the LCD 
			// (code only writes to the first LCD line so
			// if the line is longer than 16 chars i cant see the rest of the chars
			// , there will be a menu system in the future software version
			// and the line on the LCD will be scrolled 
			// to the left automatically as the cursor gets to the end of the line
			//, for now use this dirty solution:))
			if (ch == 'q') 
				lcd_clear();	            			
		}              
    		message[i++] = ' ';   
   		message[i++] = ' ';   
   		message[i++] = ' ';   
   		message[i++] = ' ';    	   	   	    
    
    		messageLength = i - 4;
    		charOffset = 0;
    		currentChar = 0;
    		dataPtr = &led_chars[message[0] - 0x20][0];    
    		
		// this loop is the heart of the scroll
		// message is scrolled until a key is hit on the keyboard		

    		while (!kbhit()) {     
    			// load led array   	
    			tmpDataPtr = dataPtr;
    			tmpCharOffset = charOffset;
    			tmpCurrentChar = currentChar;
    			for (i = 0; i <= 22; i++) {  
    				ledArray[i] = *tmpDataPtr++;  		    	   		    		
    	 			if (++tmpCharOffset==0x06) {  
    	  				tmpCharOffset = 0;    	  		    	  		
    					if (++tmpCurrentChar == messageLength)
    	 					tmpCurrentChar = 0; 
    	  				tmpDataPtr = &led_chars[message[tmpCurrentChar] - 0x20][0];
    				}      		
    			}
    			if (++charOffset == 0x06) {     
    				charOffset = 0;         		
    				if (++currentChar == messageLength)
    					currentChar = 0;	
    			}      
    			dataPtr = &led_chars[message[currentChar] - 0x20][charOffset];
    	    	
    			// display led array
    			row = 0x02;        
    			for (j = 0;j <= SCROLL_DELAY; j++) {  
	   			for (i = 0; i <= 22; i++) {
    					LED_DATA = (ledArray[i] & row) ? 1 : 0;
    					LED_CLOCK = 1;
    					LED_CLOCK = 0;    	
    				}                 
    				PORTA = row;  
 				row <<= 1;      // next line to be switched on         
 				if (!row) 	// if last line go back to the first line	
 					row = 0x02; 	  	 	  
 	  			delay_us(800);
 	    			PORTA = 0x00; 	    
 	   		}
    		}
		lcd_clear();	    
    }
    
        	       
} 

//***********************************************
// return 1 if a key is pressed (non blocking)
// else return 0 
int kbhit(void) {
	if (buffcnt) {
		// reset buffer variables (flush the buffer)
		inpt = kb_buffer; 
		outpt = kb_buffer;
		buffcnt = 0;
		bitcount = 11;
		return 1;		
	}
    return 0;
}

// puts scan code (in hex format) into keyboard buffer
// (used for debugging purposes)  
//***********************************************
void put_scancode_kbbuff(unsigned char sc) {
	unsigned char h,l;

	// convert hi and low nibbles of the scancode
	// into ascii and store them into keyboard buffer	
	h =  ((sc & 0xf0 ) >> 0x04) & 0x0f;
	if ( h > 9)
		h = h + 7;
	h = h + 0x30;
	put_char_kbbuff(h);             
	
	l = sc & 0x0f;
	if ( l > 9)
		l = l + 7;
	l = l + 0x30;
	put_char_kbbuff(l);
}       
//***********************************************
// keyboard ISR  
interrupt [EXT_INT0] keyboard_isr(void) { 
	static unsigned char data;	// holds the received scan code

	// function entered at falling edge of the kbd clock signal 
	// if data bit is the next bit to be read 
	// (bit 3 to 10 is data, start, stop & parity bis are ignored
	if((bitcount < 11) && (bitcount > 2)) {		
		data = (data >> 1);      
		if (KBD_DATA)			// if next bit is 1	 
			data = data | 0x80;	// store a '1'
		else 
			data = data & 0x7f; // else store a '0'
	}		
	if(--bitcount == 0) {		// all bits received ?		
		   	decode(data);       // decode received byte
			bitcount = 11;		// reset bit counter						
	}  
}               
//***********************************************
// decode scan code
void decode(unsigned char sc) {
 	static unsigned char is_up=0, shift = 0, mode = 0;
	unsigned char i;
 
	if (!is_up) {
		switch (sc) {
			case 0xF0 :// The up-key identifier
				is_up = 1;
				break;
			case 0x12 :// Left SHIFT
				shift = 1;
				break;
			case 0x59 :// Right SHIFT
				shift = 1;
				break;
			case 0x05 :// F1
				if(mode == 0)
					mode = 1;// Enter scan code mode
				if(mode == 2)
					mode = 3;// Leave scan code mode
				break;
			default:
				if(mode == 0 || mode == 3) {// If ASCII mode				
					if(!shift) {// If shift not pressed, do a table look-up
						for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);
							if (unshifted[i][0] == sc) {
								put_char_kbbuff(unshifted[i][1]);							
							}													
					} 
					else {// If shift pressed
						for(i = 0; shifted[i][0]!=sc && shifted[i][0]; i++);
							if (shifted[i][0] == sc) {
								put_char_kbbuff(shifted[i][1]);
							}
					}
				} 
				else put_scancode_kbbuff(sc);	// scan code mode (debugging mode)								
				break;
		}
	} 
	else {
		is_up = 0;// Two 0xF0 in a row not allowed
		switch (sc) {
			case 0x12 :// Left SHIFT
				shift = 0;
				break;
			case 0x59 :// Right SHIFT
				shift = 0;
				break;
			case 0x05 :// F1 --  F1 puts you in debugging mode
				   // pressing F1 again gets you out of debugging mode
				   // in debugging mode hex code of the scan codes
				   // are stored in the buffer instead of their ascii codes		
				if(mode == 1)
				mode = 2;
				if(mode == 3)
					mode = 0;
				break;		
		}
	}
}                                                
//***********************************************
// store character in the keyboard ring buffer 
void put_char_kbbuff(unsigned char c) {
	if (buffcnt < BUFF_SIZE) { // if buffer is not full
		*(inpt++) = c;
		buffcnt++;
		if (inpt >= kb_buffer + BUFF_SIZE) // pointer wrapping
			inpt = kb_buffer;
	}		
} 
   
//***********************************************
// get next available character from the keyboard ring buffer
// (waits until a character is available in the buffer)
int getchar(void) {
	int byte;
	
	while (buffcnt == 0); // wait for data
	byte = *outpt; // get byte
	outpt++;
	if (outpt >= kb_buffer + BUFF_SIZE) // pointer wrapping
		outpt = kb_buffer;
	buffcnt--; // decrement buffer count
	return byte;
}
//***********************************************
void lcd_init(void) {
	delay_ms(50);
	LCD_E = 0;
	LCD_RS = COMMAND_MODE;	
	LCD_RW = WRITE_MODE;		
	delay_ms(1);
	LCD_DATA_PORT = 0x38;	// 8 bit, 2 lines, 5x8 font
	LCD_E = 1;	delay_ms(1);
	LCD_E = 0;	delay_ms(1);
	LCD_DATA_PORT = 0x0f;	// display & cursor ON, blink & underlined 
	LCD_E = 1;	delay_ms(1);
	LCD_E = 0;	delay_ms(2);
	lcd_clear();				 	
}                                         
//***********************************************
void lcd_clear(void) {  
	LCD_RS = COMMAND_MODE;
    LCD_DATA_PORT = 0x01;	// clear display
	LCD_E = 1;	delay_ms(1);
	LCD_E = 0;	delay_ms(2);
}                               
//***********************************************
// display char on lcd
void lcd_putc(unsigned char ch) {
	LCD_RS = DATA_MODE;             
	LCD_DATA_PORT = ch;
	LCD_E = 1;	delay_us(40);	        
	LCD_E = 0;	delay_us(40);
}                                                
//***********************************************
// display string on lcd 
// input: pointer to string stored in flash ROM
void lcd_putsf(unsigned char flash *str) {             
	while (*str!= '\0') {
    	lcd_putc(*(str++));
    }   
}     
//************************************************
//  same as above except the string is in RAM
void lcd_puts(unsigned char *str) {             
	while (*str!= '\0') {
    	lcd_putc(*(str++));
    }   
}

void lcd_puts(unsigned char *str) & void lcd_putsf(unsigned char flash *str)
these two functions are not included in the main function, are there some error in the code???
I same problem If i compiler to Atmega8535 void lcd_puts(unsigned char *str) & void lcd_putsf(unsigned char flash *str)
these two functions are not included in the main function, are there some error in the code any solution for if i make Atmega8535
 
Hi;

those are for my clients..,

look this 16x24

the display is not yet completed .., i will complete it and post the code.,

look this 16x24 with keyboard interface
 
Nice work done. Good effort. Hope to see more projects shared. Cheers
 


hareeshmohankavassery said:
i need that ic max6953 for doin my project....frm where we can buy it in india...anyone plese help me

Dear hareeshmohankavassery,
Have U got MAX6953?. Have U done the project? If done please help me too. I got the sample from maxim with in two weeks from the ordered date. I am experimenting with this IC, do U know how to send data through I2C?. This IC has got I2C interface.

Expecting ur replay
 

hi every one . i had a question . i need a simple project using AT89C51 and two 5*7 LED matrix with asm file to show only 3 words : "electronic project with 8051 " . can any one help me ?
 

do you want to scroll or not if not here is the code
Code:
;Program for 5x7 COMMON CATHODE DOT MATRIX DISPLAY
		 

		    ;P1      COL
		 	;P2      ROW
		 	
		 	ORG 0000H   		
			AJMP MAIN			
			ORG 0030H  
		MAIN:  	
		 	         
			  MOV P1,#00H
			  MOV P2,#00H
			  MOV DPTR,#TABLE
		LOOP3:      MOV R4,#50		
		LOOP2:      MOV R3,#250
	
		LOOP1:     MOV R1,#0H
			 MOV A,#00H
			 MOV B,#80H
		LOOP:	
			MOVC A,@A+DPTR
			CJNE A,#2FH,DO
			AJMP MAIN
	DO:	INC R1
			CPL A
			MOV P2,A
			MOV P1,B	
			CALL STAY
			MOV P2,#0FFH  ;row  
		   	MOV P1,#0FFH  ;col 
			CALL STAY
			MOV A,B
			RR A    
			MOV B,A 
			MOV A,R1
			CJNE  R1,#5H,LOOP    ;CHECK FOR FIFTH COLOUMN 
      		                  DJNZ R3,LOOP1
     		                  DJNZ R4,LOOP2
    		                  INC DPTR 
    		                  INC DPTR
         			INC DPTR
         			INC DPTR
         			INC DPTR
         			CALL DELAY
         			CALL DELAY
         			AJMP LOOP3
         
  			
						
	
	                  STAY:
	   		MOV R7,#20
	   	ST:	NOP
	      		DJNZ R7,ST
	     		RET
			
		DELAY:            	;100ms DELAY
			SETB PSW.4
			MOV R7,#200
		HDH:								
			MOV R6,#100
		HD:	NOP
			NOP
			NOP
			DJNZ R6,HD
			DJNZ R7,HDH	
			CLR PSW.4	
			RET
END
				
						
			

TABLE:        ;HEX ARRAY TO DISPLAY CHARACTERS 
	

DB		07fH,049H,049H,049H,041H	; 45 E
DB		07fH,040H,040H,040H,040H	; 4c L
DB		07fH,049H,049H,049H,041H	; 45 E
DB		03eH,041H,041H,041H,022H	; 43 C
DB		001H,001H,07fH,001H,001H	; 54 T
DB		03eH,041H,041H,041H,03eH	; 4f O
DB		07fH,004H,008H,010H,07fH	; 4e N
DB		000H,041H,07fH,041H,000H	; 49 I
DB		03eH,041H,041H,041H,022H	; 43 C
DB		07fH,009H,009H,009H,006H	; 50 P
DB		07fH,009H,019H,029H,046H	; 52 R	
DB		03eH,041H,041H,041H,03eH	; 4f O
DB		020H,040H,041H,03fH,001H	; 4a J
DB		07fH,049H,049H,049H,041H	; 45 E
DB		03eH,041H,041H,041H,022H	; 43 C
DB		001H,001H,07fH,001H,001H	; 54 T


END




TABLE:        ;HEX ARRAY TO DISPLAY CHARACTERS 
DB		000H,000H,000H,000H,000H	; 20 space		
DB		000H,000H,05fH,000H,000H	; 21 !			
DB		000H,007H,000H,007H,000H	; 22 "			
DB		014H,07fH,014H,07fH,014H	; 23 #			
DB		024H,02aH,07fH,02aH,012H	; 24 $			
DB		023H,013H,008H,064H,062H	; 25 %
DB		036H,049H,055H,022H,050H	; 26 &
DB		000H,005H,003H,000H,000H	; 27 '
DB		000H,01cH,022H,041H,000H	; 28 (
DB		000H,041H,022H,01cH,000H	; 29 )
DB		014H,008H,03eH,008H,014H	; 2a *
DB		008H,008H,03eH,008H,008H	; 2b +
DB		000H,050H,030H,000H,000H	; 2c ,
DB		008H,008H,008H,008H,008H	; 2d -
DB		000H,060H,060H,000H,000H	; 2e .
DB		020H,010H,008H,004H,002H	; 2f /
DB		03eH,051H,049H,045H,03eH	; 30 0
DB		000H,042H,07fH,040H,000H	; 31 1
DB		042H,061H,051H,049H,046H	; 32 2
DB		021H,041H,045H,04bH,031H	; 33 3
DB		018H,014H,012H,07fH,010H	; 34 4
DB		027H,045H,045H,045H,039H	; 35 5
DB		03cH,04aH,049H,049H,030H	; 36 6
DB		001H,071H,009H,005H,003H	; 37 7
DB		036H,049H,049H,049H,036H	; 38 8
DB		006H,049H,049H,029H,01eH	; 39 9
DB		000H,036H,036H,000H,000H	; 3a :
DB		000H,056H,036H,000H,000H	; 3b ;
DB		008H,014H,022H,041H,000H	; 3c <
DB		014H,014H,014H,014H,014H	; 3d =
DB		000H,041H,022H,014H,008H	; 3e >
DB		002H,001H,051H,009H,006H	; 3f ?
DB		032H,049H,079H,041H,03eH	; 40 @
DB		07eH,011H,011H,011H,07eH	; 41 A
DB		07fH,049H,049H,049H,036H	; 42 B
DB		03eH,041H,041H,041H,022H	; 43 C
DB		07fH,041H,041H,022H,01cH	; 44 D
DB		07fH,049H,049H,049H,041H	; 45 E
DB		07fH,009H,009H,009H,001H	; 46 F
DB		03eH,041H,049H,049H,07aH	; 47 G
DB		07fH,008H,008H,008H,07fH	; 48 H
DB		000H,041H,07fH,041H,000H	; 49 I
DB		020H,040H,041H,03fH,001H	; 4a J
DB		07fH,008H,014H,022H,041H	; 4b K
DB		07fH,040H,040H,040H,040H	; 4c L
DB		07fH,002H,00cH,002H,07fH	; 4d M
DB		07fH,004H,008H,010H,07fH	; 4e N
DB		03eH,041H,041H,041H,03eH	; 4f O
DB		07fH,009H,009H,009H,006H	; 50 P
DB		03eH,041H,051H,021H,05eH	; 51 Q
DB		07fH,009H,019H,029H,046H	; 52 R
DB		046H,049H,049H,049H,031H	; 53 S
DB		001H,001H,07fH,001H,001H	; 54 T
DB		03fH,040H,040H,040H,03fH	; 55 U
DB		01fH,020H,040H,020H,01fH	; 56 V
DB		03fH,040H,038H,040H,03fH	; 57 W
DB		063H,014H,008H,014H,063H	; 58 X
DB		007H,008H,070H,008H,007H	; 59 Y
DB		061H,051H,049H,045H,043H	; 5a Z
DB		000H,07fH,041H,041H,000H	; 5b [
DB		002H,004H,008H,010H,020H	; 5c Yen Currency Sign
DB		000H,041H,041H,07fH,000H	; 5d ]
DB		004H,002H,001H,002H,004H	; 5e ^
DB		040H,040H,040H,040H,040H	; 5f _
DB		000H,001H,002H,004H,000H	; 60 `
DB		020H,054H,054H,054H,078H	; 61 a
DB		07fH,048H,044H,044H,038H	; 62 b
DB		038H,044H,044H,044H,020H	; 63 c
DB		038H,044H,044H,048H,07fH	; 64 d
DB		038H,054H,054H,054H,018H	; 65 e
DB		008H,07eH,009H,001H,002H	; 66 f
DB		00cH,052H,052H,052H,03eH	; 67 g
DB		07fH,008H,004H,004H,078H	; 68 h
DB		000H,044H,07dH,040H,000H	; 69 i
DB		020H,040H,044H,03dH,000H	; 6a j 
DB		07fH,010H,028H,044H,000H	; 6b k
DB		000H,041H,07fH,040H,000H	; 6c l
DB		07cH,004H,018H,004H,078H	; 6d m
DB		07cH,008H,004H,004H,078H	; 6e n
DB		038H,044H,044H,044H,038H	; 6f o
DB		07cH,014H,014H,014H,008H	; 70 p
DB		008H,014H,014H,018H,07cH	; 71 q
DB		07cH,008H,004H,004H,008H	; 72 r
DB		048H,054H,054H,054H,020H	; 73 s
DB		004H,03fH,044H,040H,020H	; 74 t
DB		03cH,040H,040H,020H,07cH	; 75 u
DB		01cH,020H,040H,020H,01cH	; 76 v
DB		03cH,040H,030H,040H,03cH	; 77 w
DB		044H,028H,010H,028H,044H	; 78 x
DB		00cH,050H,050H,050H,03cH	; 79 y
DB		044H,064H,054H,04cH,044H	; 7a z
DB		000H,008H,036H,041H,000H	; 7b <
DB		000H,000H,07fH,000H,000H	; 7c |
DB		000H,041H,036H,008H,000H	; 7d >
DB		010H,008H,008H,010H,008H	; 7e Right ArP2 	->
DB		078H,046H,041H,046H,078H	; 7f Left ArP2	<-
DB 	2FH
 

Hi,
The way to do it is, get your circuit drawn first, then the code.

Cheers.
 

Please help me to resolve this ...
how to edit a program that can only display 41 character charcter shown that at least 100 character. This circuit using hardware AT89C52

this is code c:

Code:
;----------------------------------------------------
/*
                          MATRIX FORMAT
                          ROW & COL ACTIVE HI
                          COL SCAN BY 74LS164
                              
                -----------5
                -----------4
				-----------3
   				-----------2
   				-----------1
      			-------2 1 0
row 3-7 decoder
a=2.0
b=2.1
c=2.2
column ck,dt
ck=1.6
dt=1.7 
*/



#include <reg51.h>
#include <intrins.h>


#define TRUE 1			/* define logical true / false          */
#define FALSE 0			/* values for bit variables             */
#define SCROLL_DELAY 1         /* scroll delay */

#define TIMER0_COUNT    0xFADA // 1.1ms

void modu1();
void modu2();
void modu3();
void modu4();
void modu5();

void sendCommand(char* command);
void sendChar(unsigned char c);
void delay_us(unsigned int d);
void sort(unsigned char a,unsigned char *d,unsigned char *m);
extern  signed char write2464(unsigned int Address, unsigned char Data);
extern  unsigned char read2464(unsigned int Address);

typedef	unsigned char byte;	/* type define objects with             */
typedef unsigned int word;	/* more classical microprocessor        */
code unsigned char matrix[91][7]=
      { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,  // Space
	0xFB,0xFB,0xFB,0xFB,0xFB,0xFF,0xFB,	 // ;!
	0xF5,0xF5,0xF5,0xFF,0xFF,0xFF,0xFF,  // "
	0xF5,0xF5,0xE0,0xF5,0xE0,0xF5,0xF5,  // #
	0xFB,0xF0,0xEB,0xF1,0xFA,0xE1,0xFB,  // $
	0xE3,0xEA,0xE5,0xFB,0xF4,0xEA,0xF8,  // %
	0xF7,0xEB,0xEB,0xF7,0xEA,0xED,0xF2,  // &
	0xF9,0xF9,0xFD,0xFB,0xFF,0xFF,0xFF,  // '
	0xFD,0xFB,0xF7,0xF7,0xF7,0xFB,0xFD,  // (
	0xF7,0xFB,0xFD,0xFD,0xFD,0xFB,0xF7,  // )
	0xFB,0xEA,0xF1,0xFB,0xF1,0xEA,0xFB,  // *
	0xFF,0xFB,0xFB,0xE0,0xFB,0xFB,0xFF,  // +
	0xFF,0xFF,0xFF,0xF3,0xF3,0xFB,0xF7,  // ,
	0xFF,0xFF,0xFF,0xF1,0xFF,0xFF,0xFF,  // -
	0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xF3,  // .
	0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xFF,  // /
	0xF1,0xEE,0xEC,0xEA,0xE6,0xEE,0xF1,  // 0
	0xFB,0xF3,0xFB,0xFB,0xFB,0xFB,0xF1,  // 1
	0xF1,0xEE,0xFE,0xF1,0xEF,0xEF,0xE0,  // 2
	0xF1,0xEE,0xFE,0xF9,0xFE,0xEE,0xF1,  // 3
	0xFD,0xF9,0xF5,0xED,0xE0,0xFD,0xFD,  // 4
	0xE0,0xEF,0xE1,0xFE,0xFE,0xFE,0xE1,  // 5
	0xF9,0xF7,0xEF,0xE1,0xEE,0xEE,0xF1,  // 6
	0xE0,0xFE,0xFD,0xFB,0xF7,0xF7,0xF7,  // 7
	0xF1,0xEE,0xEE,0xF1,0xEE,0xEE,0xF1,  // 8
	0xF1,0xEE,0xEE,0xF0,0xFE,0xFD,0xF3,  // 9
    0xFF,0xF3,0xF3,0xFF,0xF3,0xF3,0xFF,  // :
	0xF3,0xFB,0xF3,0xF3,0xFF,0xF3,0xF3,  // ;
	0xFD,0xFB,0xF7,0xEF,0xF7,0xFB,0xFD,  // <
	0xFF,0xFF,0xF1,0xFF,0xF1,0xFF,0xFF,	 // ;=
	0xF7,0xFB,0xFD,0xFE,0xFD,0xFB,0xF7,  // >
	0xF1,0xEE,0xFE,0xFD,0xFB,0xFF,0xFB,  // ?
    0xF1,0xEE,0xFE,0xF2,0xEA,0xEA,0xF1,  // @
	0xFB,0xF5,0xEE,0xEE,0xE0,0xEE,0xEE,  // A
	0xE1,0xF6,0xF6,0xF1,0xF6,0xF6,0xE1,  // B
	0xF1,0xEE,0xEF,0xEF,0xEF,0xEE,0xF1,  // C
	0xE1,0xF6,0xF6,0xF6,0xF6,0xF6,0xE1,  // D
	0xE0,0xEF,0xEF,0xE3,0xEF,0xEF,0xE0,  // E
	0xE0,0xEF,0xEF,0xE3,0xEF,0xEF,0xEF,  // F
	0xF1,0xEE,0xEF,0xE8,0xEE,0xEE,0xF1,  // G
	0xEE,0xEE,0xEE,0xE0,0xEE,0xEE,0xEE,  // H
	0xF1,0xFB,0xFB,0xFB,0xFB,0xFB,0xF1,	 // ;I
	0xF8,0xFD,0xFD,0xFD,0xFD,0xFD,0xF3,  // J
	0xEE,0xED,0xEB,0xE7,0xEB,0xED,0xEE,  // K
	0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,  // L
	0xEE,0xE4,0xEA,0xEA,0xEE,0xEE,0xEE,  // M
	0xEE,0xE6,0xEA,0xEC,0xEE,0xEE,0xEE,  // N
	0xF1,0xEE,0xEE,0xEE,0xEE,0xEE,0xF1,  // O
	0xE1,0xEE,0xEE,0xE1,0xEF,0xEF,0xEF,  // P
	0xF1,0xEE,0xEE,0xEE,0xEA,0xED,0xF2,  // Q
	0xE1,0xEE,0xEE,0xE1,0xEB,0xED,0xEE,  // R
	0xF1,0xEE,0xEF,0xF1,0xFE,0xEE,0xF1,  // S
	0xE0,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,  // T
    0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xF1,  // U
	0xEE,0xEE,0xEE,0xF5,0xF5,0xFB,0xFB,  // V
	0xEE,0xEE,0xEE,0xEA,0xEA,0xE4,0xEE,  // W
	0xEE,0xEE,0xF5,0xFB,0xF5,0xEE,0xEE,  // X
	0xEE,0xEE,0xF5,0xFB,0xFB,0xFB,0xFB,  // Y
	0xE0,0xFE,0xFD,0xFB,0xF7,0xEF,0xE0,  // Z
	0xF1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF1,  /* [ */
	0xFF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,  /* \ */
	0xF1,0xFD,0xFD,0xFD,0xFD,0xFD,0xF1,  /* [ */
	0xFB,0xF5,0xEE,0xFF,0xFF,0xFF,0xFF,  // ^
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,  // _
    0xF3,0xF3,0xF7,0xFB,0xFF,0xFF,0xFF,  // '
	0xFF,0xFF,0xF1,0xFE,0xF0,0xEE,0xF1,  // a
	0xEF,0xEF,0xE9,0xE6,0xEE,0xE6,0xE9,  // b
	0xFF,0xFF,0xF8,0xF7,0xF7,0xF7,0xF8,  // c
	0xFE,0xFE,0xF2,0xEC,0xEE,0xEC,0xF2,  // d
	0xFF,0xFF,0xF1,0xEE,0xE0,0xEF,0xF1,  // e
	0xF9,0xF6,0xF7,0xE1,0xF7,0xF7,0xF7,  // f
	0xFF,0xFF,0xF0,0xEE,0xF0,0xFE,0xF1,  // g
	0xEF,0xEF,0xE9,0xE6,0xEE,0xEE,0xEE,  // h
	0xFB,0xFF,0xF3,0xFB,0xFB,0xFB,0xF1,  // i
	0xFD,0xFF,0xF9,0xFD,0xFD,0xFD,0xF3,  // j
	0xF7,0xF7,0xF6,0xF5,0xF3,0xF5,0xF6,  // k
	0xF3,0xFB,0xFB,0xFB,0xFB,0xFB,0xF1,  // l
	0xFF,0xFF,0xE5,0xEA,0xEA,0xEA,0xEA,  // m
	0xFF,0xFF,0xE9,0xE6,0xEE,0xEE,0xEE,  // n
	0xFF,0xFF,0xF1,0xEE,0xEE,0xEE,0xF1,  // o
	0xFF,0xFF,0xE1,0xEE,0xE1,0xEF,0xEF,  // p
	0xFF,0xFF,0xF0,0xEE,0xF0,0xFE,0xFE,  // q
	0xFF,0xFF,0xE9,0xE6,0xEF,0xEF,0xEF,  // r
	0xFF,0xFF,0xF0,0xEF,0xF1,0xFE,0xE1,  // s
	0xFB,0xFB,0xF0,0xFB,0xFB,0xFB,0xFC,  // t
	0xFF,0xFF,0xEE,0xEE,0xEE,0xEC,0xF2,  // u
	0xFF,0xFF,0xEE,0xEE,0xEE,0xF5,0xFB,  // v
	0xFF,0xFF,0xEE,0xEE,0xEA,0xEA,0xF4,  // w
    0xFF,0xFF,0xEE,0xF5,0xFB,0xF5,0xEE,  // x
	0xFF,0xFF,0xEE,0xF5,0xFB,0xFB,0xF3,  // y
    0xFF,0xFF,0xE0,0xFD,0xFB,0xF7,0xE0};  // z				


[b]code char MSG1[]="WELLCOME TO MOVING MESSAGE THE BANDUNG JAVA";   
[/b]   // add to long character
sbit	LED_CLOCK	= P1^7;
sbit	LED_DATA	= P1^6;


char msg[41];
unsigned char dig[20];
bit CH_LIM,OFF_CH;
byte tmp,t;

void main(void)
{
   byte modu,divi,blank1_limit,blank2_limit,ch_limit;
   byte i,j,k,offset_ch,old_divi,diff; 
   int offset_col,t1;
   int row; 
   
	P1=0xFF;
	P3=0xFF;
	P2=0xFF;
    EA      =0;
	TL1=0XFD;	//9600 @ 11.0592
	TH1=0XFD;
    TMOD =0x21;
    SCON =0X50;
    ET0=1;
    TR1=1;
    //EA = 1;       
    RI=0;       
/*
	main execution loop, executes forever.
*/
  
  
  LED_CLOCK = 1; 
  P2=7;
  offset_col=0;
  blank1_limit=17;
  ch_limit=0;
  blank2_limit=0;
  offset_ch=40;
  CH_LIM=0;
  OFF_CH=0;
  k=0;
  for(i=0;i<=40;i++) msg[i]=read2464(i);
  for(t1=40;t1>=0;t1--)msg[t1]=MSG1[40-t1]; //store msg
  while(1){
     if(RI){
	    P2=7;
	    sendCommand("TYPE MSG:\r");
		i=41;
		while(1){
		    while(!RI);    
			RI=0;
			if(i!=0 || SBUF==13){
			   if(SBUF==13){
				 sendCommand("\rOK\r");
				 sendCommand("Storing....wait\r");
				 for(k=i;k>0;k--)msg[k]=0x20; //space char
				 msg[0]=0x20;
				 for(i=0;i<=40;i++) tmp=write2464(i,msg[i]);
				 sendCommand("OK\r");
				 break;
			   }
   			   if(SBUF==0x08){
				  if(i!=40){sendChar(SBUF);++i;}
			   }
			   else{
   			     msg[i]=SBUF;
			     sendChar(msg[i]);
 			     --i;
			   }

			}
			if(SBUF==0x08 && i==0){
				  if(i!=40){sendChar(SBUF);++i;}
			}
		}

	 }
     for(k=0;k<SCROLL_DELAY;k++){
	  //delay_us(60000);    
      for(row=6;row>-1;row--){
		 i=16;
	     for(j=0;j<blank1_limit;j++){
		    dig[i]=0xff;--i;
		 }
		 t=0;
		 for(j=0;j<ch_limit;j++){
		    dig[i]=matrix[msg[(t+offset_ch)]-0x20][row];
			--t;
			--i;
		 }
	     for(j=0;j<blank2_limit;j++){
		    dig[i]=0xff;--i;
		 }
		 if(modu==1)modu1();
		 else if(modu==2) modu2();
		 else if(modu==3) modu3();
		 else if(modu==4) modu4();
		 else if(modu==5) modu5();
         for(i=1;i<17;i++){
		     t=dig[i];
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

			 t=t >>1;
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

			 t=t >>1;
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

			 t=t >>1;
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

			 t=t >>1;
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

			 t=t >>1;
			 if(t & 0x01) LED_DATA =0;
			 else LED_DATA=1;
	         LED_CLOCK = 1;LED_CLOCK = 0; LED_CLOCK = 1;

         }
		 P2=row;
		 delay_us(2000);
		 P2=7;
	  }
	}//delay
	if(++offset_col>348){	 // 96 + 150 + 96
	   offset_col=0;
       blank1_limit=17;
	   ch_limit=0;
	   blank2_limit=0;
       offset_ch=40;
	   CH_LIM=0;
       OFF_CH=0;
	}
	modu=offset_col%6;
	divi=offset_col/6;
	if(divi!=old_divi)diff=1;
	else diff=0;
	if(blank1_limit!=0)blank1_limit=blank1_limit-diff;
	if(CH_LIM){
	   if(OFF_CH){
	      blank2_limit=blank2_limit+diff;
		  ch_limit=ch_limit-diff;
		  if(ch_limit==255)ch_limit=0;
	   }
	   offset_ch=offset_ch-diff;
	   if(offset_ch>41)offset_ch=0;
	}else{
    	ch_limit=ch_limit+diff;
	}
	if(offset_ch==16)OFF_CH=1;
	if(ch_limit==17)CH_LIM=1;
	old_divi=divi;
    
  }//while
}//----------------end main
void sendCommand(char* command){
   char index, temp;
   
   index=0;
   while(1){ //for(index =  0; temp != 0; index++){
      temp = command[index];
      if(temp==0)break;
      sendChar(temp);
      ++index;
   }
}

void sendChar(unsigned char c){

   SBUF = c;
   while(!TI);TI = 0;
}
void delay_us(unsigned int d){
   unsigned int i,m;
   m=d/14;
   for(i=0;i<m;i++);
}

void modu1(){
  tmp=dig[0];
  dig[0]<<=1;

  t=dig[1];
  dig[1]<<=1;
  dig[1]=(dig[1])|((tmp>>5) & 0x01);
  tmp=dig[2];
  dig[2]<<=1;
  dig[2]=(dig[2])|((t>>5)& 0x01);
  t=dig[3];
  dig[3]<<=1;
  dig[3]=(dig[3])|((tmp>>5)& 0x01);
  tmp=dig[4];
  dig[4]<<=1;
  dig[4]=(dig[4])|((t>>5)& 0x01);
  t=dig[5];
  dig[5]<<=1;
  dig[5]=(dig[5])|((tmp>>5)& 0x01);
  tmp=dig[6];
  dig[6]<<=1;
  dig[6]=(dig[6])|((t>>5) & 0x01);
  t=dig[7];
  dig[7]<<=1;
  dig[7]=(dig[7])|((tmp>>5)& 0x01);
  tmp=dig[8];
  dig[8]<<=1;
  dig[8]=(dig[8])|((t>>5)& 0x01);
  t=dig[9];
  dig[9]<<=1;
  dig[9]=(dig[9])|((tmp>>5)& 0x01);
  tmp=dig[10];
  dig[10]<<=1;
  dig[10]=(dig[10])|((t>>5) & 0x01);
  t=dig[11];
  dig[11]<<=1;
  dig[11]=(dig[11])|((tmp>>5)& 0x01);
  tmp=dig[12];
  dig[12]<<=1;
  dig[12]=(dig[12])|((t>>5)& 0x01);
  t=dig[13];
  dig[13]<<=1;
  dig[13]=(dig[13])|((tmp>>5)& 0x01);
  tmp=dig[14];
  dig[14]<<=1;
  dig[14]=(dig[14])|((t>>5) & 0x01);
  t=dig[15];
  dig[15]<<=1;
  dig[15]=(dig[15])|((tmp>>5) & 0x01);
  tmp=dig[16];
  dig[16]<<=1;
  dig[16]=(dig[16])|((t>>5) & 0x01);
//  t=dig[17];
//  dig[17]<<=1;
//  dig[17]=(dig[17])|((tmp>>5) & 0x01);
//  tmp=dig[18];
//  dig[18]<<=1;
//  dig[18]=(dig[18])|((t>>5) & 0x01);

}
void modu2(){
  tmp=dig[0];
  dig[0]<<=2;

  t=dig[1];
  dig[1]<<=2;
  dig[1]=(dig[1])|((tmp>>4) & 0x03);
  tmp=dig[2];
  dig[2]<<=2;
  dig[2]=(dig[2])|((t>>4)& 0x03);
  t=dig[3];
  dig[3]<<=2;
  dig[3]=(dig[3])|((tmp>>4)& 0x03);
  tmp=dig[4];
  dig[4]<<=2;
  dig[4]=(dig[4])|((t>>4)& 0x03);
  t=dig[5];
  dig[5]<<=2;
  dig[5]=(dig[5])|((tmp>>4)& 0x03);
  tmp=dig[6];
  dig[6]<<=2;
  dig[6]=(dig[6])|((t>>4) & 0x03);
  t=dig[7];
  dig[7]<<=2;
  dig[7]=(dig[7])|((tmp>>4)& 0x03);
  tmp=dig[8];
  dig[8]<<=2;
  dig[8]=(dig[8])|((t>>4)& 0x03);
  t=dig[9];
  dig[9]<<=2;
  dig[9]=(dig[9])|((tmp>>4)& 0x03);
  tmp=dig[10];
  dig[10]<<=2;
  dig[10]=(dig[10])|((t>>4) & 0x03);
  t=dig[11];
  dig[11]<<=2;
  dig[11]=(dig[11])|((tmp>>4)& 0x03);
  tmp=dig[12];
  dig[12]<<=2;
  dig[12]=(dig[12])|((t>>4)& 0x03);
  t=dig[13];
  dig[13]<<=2;
  dig[13]=(dig[13])|((tmp>>4)& 0x03);
  tmp=dig[14];
  dig[14]<<=2;
  dig[14]=(dig[14])|((t>>4) & 0x03);
  t=dig[15];
  dig[15]<<=2;
  dig[15]=(dig[15])|((tmp>>4) & 0x03);
  tmp=dig[16];
  dig[16]<<=2;
  dig[16]=(dig[16])|((t>>4) & 0x03);
//  t=dig[17];
//  dig[17]<<=2;
//  dig[17]=(dig[17])|((tmp>>4) & 0x03);
//  tmp=dig[18];
//  dig[18]<<=2;
//  dig[18]=(dig[18])|((t>>4) & 0x03);
  
}
void modu3(){
  tmp=dig[0];
  dig[0]<<=3;

  t=dig[1];
  dig[1]<<=3;
  dig[1]=(dig[1])|((tmp>>3) & 0x07);
  tmp=dig[2];
  dig[2]<<=3;
  dig[2]=(dig[2])|((t>>3)& 0x07);
  t=dig[3];
  dig[3]<<=3;
  dig[3]=(dig[3])|((tmp>>3)& 0x07);
  tmp=dig[4];
  dig[4]<<=3;
  dig[4]=(dig[4])|((t>>3)& 0x07);
  t=dig[5];
  dig[5]<<=3;
  dig[5]=(dig[5])|((tmp>>3)& 0x07);
  tmp=dig[6];
  dig[6]<<=3;
  dig[6]=(dig[6])|((t>>3) & 0x07);
  t=dig[7];
  dig[7]<<=3;
  dig[7]=(dig[7])|((tmp>>3)& 0x07);
  tmp=dig[8];
  dig[8]<<=3;
  dig[8]=(dig[8])|((t>>3)& 0x07);
  t=dig[9];
  dig[9]<<=3;
  dig[9]=(dig[9])|((tmp>>3)& 0x07);
  tmp=dig[10];
  dig[10]<<=3;
  dig[10]=(dig[10])|((t>>3) & 0x07);
  t=dig[11];
  dig[11]<<=3;
  dig[11]=(dig[11])|((tmp>>3)& 0x07);
  tmp=dig[12];
  dig[12]<<=3;
  dig[12]=(dig[12])|((t>>3)& 0x07);
  t=dig[13];
  dig[13]<<=3;
  dig[13]=(dig[13])|((tmp>>3)& 0x07);
  tmp=dig[14];
  dig[14]<<=3;
  dig[14]=(dig[14])|((t>>3) & 0x07);
  t=dig[15];
  dig[15]<<=3;
  dig[15]=(dig[15])|((tmp>>3) & 0x07);
  tmp=dig[16];
  dig[16]<<=3;
  dig[16]=(dig[16])|((t>>3) & 0x07);
//  t=dig[17];
//  dig[17]<<=3;
//  dig[17]=(dig[17])|((tmp>>3) & 0x07);
//  tmp=dig[18];
//  dig[18]<<=3;
//  dig[18]=(dig[18])|((t>>3) & 0x07);
}
void modu4(){
  tmp=dig[0];
  dig[0]<<=4;

  t=dig[1];
  dig[1]<<=4;
  dig[1]=(dig[1])|((tmp>>2) & 0x0f);
  tmp=dig[2];
  dig[2]<<=4;
  dig[2]=(dig[2])|((t>>2)& 0x0f);
  t=dig[3];
  dig[3]<<=4;
  dig[3]=(dig[3])|((tmp>>2)& 0x0f);
  tmp=dig[4];
  dig[4]<<=4;
  dig[4]=(dig[4])|((t>>2)& 0x0f);
  t=dig[5];
  dig[5]<<=4;
  dig[5]=(dig[5])|((tmp>>2)& 0x0f);
  tmp=dig[6];
  dig[6]<<=4;
  dig[6]=(dig[6])|((t>>2) & 0x0f);
  t=dig[7];
  dig[7]<<=4;
  dig[7]=(dig[7])|((tmp>>2)& 0x0f);
  tmp=dig[8];
  dig[8]<<=4;
  dig[8]=(dig[8])|((t>>2)& 0x0f);
  t=dig[9];
  dig[9]<<=4;
  dig[9]=(dig[9])|((tmp>>2)& 0x0f);
  tmp=dig[10];
  dig[10]<<=4;
  dig[10]=(dig[10])|((t>>2) & 0x0f);
  t=dig[11];
  dig[11]<<=4;
  dig[11]=(dig[11])|((tmp>>2)& 0x0f);
  tmp=dig[12];
  dig[12]<<=4;
  dig[12]=(dig[12])|((t>>2)& 0x0f);
  t=dig[13];
  dig[13]<<=4;
  dig[13]=(dig[13])|((tmp>>2)& 0x0f);
  tmp=dig[14];
  dig[14]<<=4;
  dig[14]=(dig[14])|((t>>2) & 0x0f);
  t=dig[15];
  dig[15]<<=4;
  dig[15]=(dig[15])|((tmp>>2) & 0x0f);
  tmp=dig[16];
  dig[16]<<=4;
  dig[16]=(dig[16])|((t>>2) & 0x0f);
//  t=dig[17];
//  dig[17]<<=4;
//  dig[17]=(dig[17])|((tmp>>2) & 0x0f);
//  tmp=dig[18];
//  dig[18]<<=4;
//  dig[18]=(dig[18])|((t>>2) & 0x0f);
}
void modu5(){
  tmp=dig[0];
  dig[0]<<=5;

  t=dig[1];
  dig[1]<<=5;
  dig[1]=(dig[1])|((tmp>>1) & 0x1f);
  tmp=dig[2];
  dig[2]<<=5;
  dig[2]=(dig[2])|((t>>1)& 0x1f);
  t=dig[3];
  dig[3]<<=5;
  dig[3]=(dig[3])|((tmp>>1)& 0x1f);
  tmp=dig[4];
  dig[4]<<=5;
  dig[4]=(dig[4])|((t>>1)& 0x1f);
  t=dig[5];
  dig[5]<<=5;
  dig[5]=(dig[5])|((tmp>>1)& 0x1f);
  tmp=dig[6];
  dig[6]<<=5;
  dig[6]=(dig[6])|((t>>1) & 0x1f);
  t=dig[7];
  dig[7]<<=5;
  dig[7]=(dig[7])|((tmp>>1)& 0x1f);
  tmp=dig[8];
  dig[8]<<=5;
  dig[8]=(dig[8])|((t>>1)& 0x1f);
  t=dig[9];
  dig[9]<<=5;
  dig[9]=(dig[9])|((tmp>>1)& 0x1f);
  tmp=dig[10];
  dig[10]<<=5;
  dig[10]=(dig[10])|((t>>1) & 0x1f);
  t=dig[11];
  dig[11]<<=5;
  dig[11]=(dig[11])|((tmp>>1)& 0x1f);
  tmp=dig[12];
  dig[12]<<=5;
  dig[12]=(dig[12])|((t>>1)& 0x1f);
  t=dig[13];
  dig[13]<<=5;
  dig[13]=(dig[13])|((tmp>>1)& 0x1f);
  tmp=dig[14];
  dig[14]<<=5;
  dig[14]=(dig[14])|((t>>1) & 0x1f);
  t=dig[15];
  dig[15]<<=5;
  dig[15]=(dig[15])|((tmp>>1) & 0x1f);
  tmp=dig[16];
  dig[16]<<=5;
  dig[16]=(dig[16])|((t>>1) & 0x1f);
//  t=dig[17];
//  dig[17]<<=5;
//  dig[17]=(dig[17])|((tmp>>1) & 0x1f);
//  tmp=dig[18];
//  dig[18]<<=5;
//  dig[18]=(dig[18])|((t>>1) & 0x1f);
}


thx

regard


wandi,indonesian,bandung city
 
Re: led moving message display circuit

I want my circuit to work independent of pc, so i will have to use EPROM for that?

---------- Post added at 10:17 AM ---------- Previous post was at 10:12 AM ----------

I want to use 8051 for this project, so the same circuit what ME have posted can be employed??
 

Re: moving message display using 89c51

Hi Mausad,
Even i am looking for building this project using 8051. Can u send me the circuit diagram??

---------- Post added at 08:09 AM ---------- Previous post was at 07:25 AM ----------






I have made 2 of these kind of circuits, this verison can take on string from Computer using serial port using 8051.Previous one, I did was around a year ago. It also used 8051. I also have pictures of previous board and video demonstration.
Have u used EEPROM & RS232 interface in ur project?? Can u plz post schematic & component list also?
 

Re: My newest 16 char MMD with a small PIC

Hi;

1.
I found this on a Chinese site (a working Proteus MMD project):
It is worth studying, contains many interesting

- uC: AT89C52, asm source included (appr. 90 instr. only!)
- horizontal pixel scrolling (good !)
- It's using the UART mode 0 (shift reg) !!
- 16 x 8x8 LED matrix array (in 2 rows), hc595 shift regs
- Unfortunately chinese characters but also numbers

I do not work with AVRs, but others may be interested.
Attached: 'xiangmu.zip'
View attachment xiangmu.zip

2.
I made a tiny addition to my PIC MMD project at 16 char:

- Now the last stored char can change (up-down its asc value)
I's useful to found and store an extended character
- It's just a modifying the SW, the HW is the same.

If someone is interested search me in a normal way.
Attached: '16ch_last_u_d.jpg'
16ch_last_u_d.jpg

3.
Three months working on a commercial led matrix MMD project.
I'm using a 28 pin PIC18F2620 and 2x12 8x8 led matrices.
It's far from ready, even to a DS1307 clock drivers ...

But, to test and debug my main scrolling routines, I made
a simplified ISIS simulation and it's working fine yet.

It presents and describes almost all possible functions.

Some features:

horizontal - vertical scroll
left - right scroll
big (double) chars too
settable CLOCK
max 623 chars/message (limited by the PIC's RAM)
max 90 fix and one user modifiable message
insert a running clock into a fix message

Measured in ISIS the program is fast enough, at 16 MHz PIC clock
the whole refresh rate is better than 240 Hz. In ISIS I'm using
a slower (4 Mhz) clock, so the refresh rate is better than 60 Hz.


Sorry but I do not intend to make public the project, you must this understand.
But ...
- for those who are interested I uploaded a video which shows the
operation of the simulation, attached as 'Pic18_MMD_zuisti_avi.rar'
View attachment Pic18_MMD_zuisti_avi.rar
- or ... look at this screenshot, attached as 'Pic18_MMD_Clock_capt_sh1.jpg'
Pic18_MMD_Clock_capt_sh1.jpg
Greetings
zuisti
 
i built this little scrolling sign long ago. Design specs: At89c2051, programmed in assembly, 4017 + transistors dmux, 5x21 dots.

Schematic and full source at:
**broken link removed**

hope that it is useful for someone


it is intresting. But i can not fuond hex code & other softwaer
 

Dear deniah,
Please translate this serbian language.
Thanks.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top