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} = -
Thank You.. I missed this One
I same problem If i compiler to Atmega8535 void lcd_puts(unsigned char *str) & void lcd_putsf(unsigned char flash *str)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???
Yes..its nice..but information has no value untill it is shared...Will you?dhimullai said:Hi guys look at this
its 8x48.. my prototype . https://www.youtube.com/watch?v=g5V5Rg6efbY
Hi guys look at this
its 8x48.. my prototype . https://www.youtube.com/watch?v=g5V5Rg6efbY
PLEASE SHARE HERE detail poroject.dhimullai said:Hi;
those are for my clients..,
look this 16x24
YouTube - 16x24 Led Moving Display
Added after 1 minutes:
Hi.., the display is not yet completed .., i will complete it and post the code.,
look this 16x24 with keyboard interface
YouTube - 16x24 Moving Display with keyboard interface
hareeshmohankavassery said:i need that ic max6953 for doin my project....frm where we can buy it in india...anyone plese help me
;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
;----------------------------------------------------
/*
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);
}
Have u used EEPROM & RS232 interface in ur project?? Can u plz post schematic & component list also?
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
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?