/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ /* Port D */ #define ROW_DATA 3 #define ROW_CLOCK 5 /* Port B */ #define SER_DATA 0 #define SER_CLK 1 #define COL_LATCH 2 #define OUT_ENABLE 3 #define SET_PORT( port, pin ) ((port) |= (1 << (pin))) #define CLR_PORT( port, pin ) ((port) &= ~(1 << (pin))) int rownumber = 0; const char greets[1024] = { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xef,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfb,0xf8,0x9c,0x1c,0x1c,0x3c,0x1f,0xfc,0x3c,0x1f,0xff,0xff,0xff,0xff,0xff,0xff, 0xfb,0xfe,0x6b,0xeb,0xee,0xfb,0xef,0xfe,0xfb,0xef,0xff,0xff,0xff,0xff,0xff,0xff, 0xfb,0x8e,0xf8,0x08,0x0e,0xfc,0x7f,0xfe,0xfb,0xef,0xff,0xff,0xff,0xff,0xff,0xff, 0xfb,0xee,0xfb,0xfb,0xfe,0xff,0x9f,0xfe,0xfb,0xef,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xee,0xfb,0xeb,0xee,0xdb,0xef,0xfe,0xdb,0xef,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0x18,0x3c,0x1c,0x1f,0x3c,0x1f,0xff,0x3c,0x1f,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x5f,0xff,0x3f,0xbf,0x9f,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x5f,0xfe,0xff,0x3f,0xdf,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0x0f,0xfd,0xff,0x3f,0xdf,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0xb9,0x3d,0xfe,0xbc,0x1c,0x18,0x8f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0xbc,0xdc,0x3e,0xbb,0xdb,0xed,0xdf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0xbd,0xdd,0xdd,0xbb,0xd8,0x0d,0xdf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8,0x1d,0xdd,0xdc,0x1b,0xdb,0xfe,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0x7d,0xdd,0xdf,0xbb,0xdb,0xee,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0x78,0x8e,0x3f,0x1c,0x0c,0x1f,0x7f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf8,0x3f,0xff,0xff,0xff,0xff,0xf9,0xcf,0x7f,0xff,0x9f,0xff,0x9f, 0xff,0xff,0xff,0xfd,0xdf,0xff,0xff,0xff,0xff,0xfd,0xdf,0xff,0xff,0xdf,0xff,0xdf, 0xff,0xff,0xff,0xfd,0xef,0xff,0xff,0xff,0xff,0xfc,0x9f,0xff,0xff,0xdf,0xff,0xdf, 0xff,0xff,0xff,0xfd,0xe8,0x9c,0x3c,0x0c,0x19,0x3c,0x9c,0x79,0x3c,0x1c,0x1c,0x1f, 0xff,0xff,0xff,0xfd,0xee,0x6f,0xdb,0xdb,0xec,0xdd,0x5f,0x7c,0xdb,0xdb,0xeb,0xdf, 0xff,0xf8,0x0f,0xfd,0xee,0xfc,0x1b,0xdb,0xed,0xdd,0x5f,0x7d,0xdb,0xd8,0x0b,0xdf, 0xff,0xff,0xff,0xfd,0xee,0xfb,0xdb,0xdb,0xed,0xdd,0xdf,0x7d,0xdb,0xdb,0xfb,0xdf, 0xff,0xff,0xff,0xfd,0xde,0xfb,0xdc,0x1b,0xed,0xdd,0xdf,0x7d,0xdb,0xdb,0xeb,0xdf, 0xff,0xff,0xff,0xf8,0x38,0x3c,0x2f,0xdc,0x18,0x88,0x8c,0x18,0x8c,0x0c,0x1c,0x0f, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(ROW_DATA, OUTPUT); pinMode(ROW_CLOCK, OUTPUT); pinMode(SER_DATA + 8, OUTPUT); pinMode(SER_CLK + 8, OUTPUT); pinMode(COL_LATCH + 8, OUTPUT); pinMode(OUT_ENABLE + 8, OUTPUT); /* All set low */ CLR_PORT( PORTD, ROW_DATA ); CLR_PORT( PORTD, ROW_CLOCK ); CLR_PORT( PORTB, SER_DATA ); CLR_PORT( PORTB, SER_CLK ); CLR_PORT( PORTB, COL_LATCH ); SET_PORT( PORTB, OUT_ENABLE ); } #define GET_PIXEL( x, y ) ((greets[(((x) >> 3) + (((y) * 16)))] >> (7 - (x & 0x7))) & 0x1) void loop() { while( 1 ) { int i = 0; for( i = 0; i < 128; i++ ) { if( GET_PIXEL( i, rownumber ) == 0 ) { SET_PORT( PORTB, SER_DATA ); } else { CLR_PORT( PORTB, SER_DATA ); } // Clock SET_PORT( PORTB, SER_CLK ); CLR_PORT( PORTB, SER_CLK ); } /* Column latch */ SET_PORT( PORTB, COL_LATCH ); CLR_PORT( PORTB, COL_LATCH ); if( rownumber == 0 ) { SET_PORT( PORTD, ROW_DATA ); } /* Row clock */ SET_PORT( PORTD, ROW_CLOCK ); CLR_PORT( PORTD, ROW_CLOCK ); /* No longer need this */ CLR_PORT( PORTD, ROW_DATA ); /* Delay */ delayMicroseconds(25); /* Overflow */ rownumber = (rownumber + 1) % 64; } }