-
Notifications
You must be signed in to change notification settings - Fork 1
/
max7219_matrix.c
85 lines (76 loc) · 2.13 KB
/
max7219_matrix.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <max7219_matrix.h>
void _shiftRowLeft(unsigned int8 row){
unsigned int8 counter = 0;
for(counter = 0; counter < MATRIX_COLUMNS; counter++){
if(counter == (MATRIX_COLUMNS - 1)){
ledMatrix[row][counter] <<= 1;
}
else{
ledMatrix[row][counter] <<= 1;
ledMatrix[row][counter] |= (ledMatrix[row][counter+1] >> 7) & 0x01;
}
}
}
void shiftMatrixLeft(){
unsigned int8 counter = 0;
for(counter = 0; counter < MATRIX_ROWS; counter++){
_shiftRowLeft(counter);
}
}
void _shiftRowRight(unsigned int8 row){
signed int8 counter = 0;
for(counter = MATRIX_COLUMNS - 1; counter >= 0; counter--){
if(counter == 0){
ledMatrix[row][counter] >>= 1;
}
else{
ledMatrix[row][counter] >>= 1;
ledMatrix[row][counter] |= (ledMatrix[row][counter-1] & 0x01) << 7;
}
}
}
void shiftMatrixRight(){
unsigned int8 counter = 0;
for(counter = 0; counter < MATRIX_ROWS; counter++){
_shiftRowRight(counter);
}
}
void _shiftRowUp(unsigned int8 row){
signed int8 counter = 0;
for(counter = 0; counter < MATRIX_COLUMNS; counter++){
ledMatrix[row][counter] = ledMatrix[row+1][counter];
}
}
void shiftMatrixUp(){
unsigned int8 counter = 0;
for(counter = 0; counter < MATRIX_ROWS - 1; counter++){
_shiftRowUp(counter);
}
for(counter = 0; counter < MATRIX_COLUMNS; counter++){
ledMatrix[MATRIX_ROWS-1][counter] = 0x00;
}
}
void _shiftRowDown(unsigned int8 row){
signed int8 counter = 0;
for(counter = 0; counter < MATRIX_COLUMNS; counter++){
ledMatrix[row][counter] = ledMatrix[row-1][counter];
}
}
void shiftMatrixDown(){
unsigned int8 counter = 0;
for(counter = MATRIX_ROWS - 1; counter >= 1 ; counter--){
_shiftRowDown(counter);
}
for(counter = 0; counter < MATRIX_COLUMNS; counter++){
ledMatrix[0][counter] = 0x00;
}
}
void clearMatrix(){
unsigned int8 row = 0;
unsigned int8 column = 0;
for(row = 0; row < MATRIX_ROWS; row++){
for(column = 0; column < MATRIX_COLUMNS; column++){
ledMatrix[row][column] = 0x00;
}
}
}