Hi AtomSoft
First of all you need to multiplex your display what ever the method you like.
The two methods I use is column scanning & row scanning. You can do that using shift registers or using direct I/O ports.
The above project I used a column scan because it has only 64 columns. If I have 100 columns & above then I might do a row scanning method.
In column scan I’m scanning one column at a time like multiplexing SSDs.
Load 1st column –show for a while—turn off previous column—load next column-- show for a while-- turn off previous column--…………………
If you have 5 columns then you need 5 column registers.
If you have 20 columns then you need 20 column registers.
The column registers contains data or pattern. When you multiplexing rapidly then the data will show on the matrix display.
I think the above things you know very well.
Regarding balance (centering) you don’t need special code to do that. For a 5 column display if you want to show only the middle column, you need to turn off (clear) the 1st, 2nd, 4th, 5th column registers & leave the 3rd column with data. So when multiplexing rapidly it will show only the middle column data.
When a letter moves from right to left I use a “Shift Count Register” so it’s easily to place the text on what ever the place you like.