frame by frame in a text scroller patch

#define LED_WIDTH 8
#define LED_HEIGHT 8

#define LETTER_NUM 7


#define INTERVAL 30

byte column_scan = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

#define A 0x18, 0x24, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x00
#define R 0x7C, 0x42, 0x42, 0x7C, 0x48, 0x44, 0x44, 0x00
#define D 0x78, 0x24, 0x22, 0x22, 0x22, 0x24, 0x78, 0x00
#define U 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00
#define I 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00
#define N 0x42, 0x42, 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00
#define O 0x18, 0x24, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00

byte letter_content = {A, R, D, U, I, N, O};
byte picture_content[LETTER_NUM*8] = {}; //Content: LCD Font Maker

int latchPin = 1; //Pin connected to ST_CP of 74HC595
int clockPin = 2; //Pin connected to SH_CP of 74HC595
int dataPin = 0; ////Pin connected to DS of 74HC595

void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);


void loop() {
unsigned int x;
for(x=0;x<41;x++) // shift left

void show_picture(unsigned int x, unsigned int y, unsigned long time){
unsigned int j;
unsigned long time_tmp;
time_tmp = millis();
while((millis() - time_tmp) < time){
digitalWrite(latchPin, LOW);
//shiftOut(dataPin, clockPin, MSBFIRST, 0xFF);
digitalWrite(latchPin, HIGH);

void row_output (unsigned int x) // Picture offset, x = x + (j+y)PICTURE_WIDTH
unsigned int a,b;
unsigned int i;
byte temp;
a = x >> 3;
b = x & 7;
for(i=0;i<(LED_WIDTH >> 3);i++){
temp = (picture_content[a+i]<<b) | (picture_content[a+i+1]>>(8-b));
shiftOut(dataPin, clockPin, MSBFIRST, temp);
void column_output(unsigned int x) //input which column of LEDs is on
unsigned int a,b;
unsigned int i;
a = x >>3;
b = x & 7;
bitClear(column_scan[a],7 - b);
for(i=0;i<(LED_HEIGHT >> 3);i++)
shiftOut(dataPin, clockPin, LSBFIRST, column_scan
); *

  • bitSet(column_scan[a],7 - b);*
    void Text_toPicture(){
  • unsigned int i,j;*
  • for(i=0;i<LETTER_NUM;i++){*
  • for(j=0;j<8;j++)*
    picture_content[i+j*LETTER_NUM] = letter_content[i*8 + j];
  • }*

The schematic includes one attiny85 + several 595s, all signal cables are paralleled, like the shiftout tutorial.
I don’t really understand multiplexing and bitwise function, i tried so hard to add 2 functions in my code but went failed, one is a little bit creative odd and the other one is simple i guess.
1. animation: i want to make some animation instead of scroller, such as ping pong dots for each column, or random flash dots…
2. i want generate a “wave” (pwm or timer) to influence the parameter x for the scrolling shifting, so the shifting or offsetting looks move in groove. for example if i create a square pulse only outputs 0 and 1, and the texts moves forward a grid every time there comes a 1 or any other way around is fine.
i don’t know if i can leave my email here so let me know if you need that for help me, appreciate.