#define SCK PB5
#define MISO PB4
#define MOSI PB3
#define CS PB2
#define DDR_SPI DDRB
#define DD_MISO DDB4
#define DD_MOSI DDB3
#define DD_SCK DDB2
//volatile uint8_t j=1;
//volatile uint8_t i;
unsigned char znaki[96][5]{
{0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}, // space
{0b00000000,0b00000000,0b01001111,0b00000000,0b00000000}, // !
{0b00000000,0b00000111,0b00000000,0b00000111,0b00000000}, // "
{0b00010100,0b01111111,0b00010100,0b01111111,0b00010100}, // #
{0b00100100,0b00101010,0b01111111,0b00101010,0b00010010}, // $
{0b00100011,0b00010011,0b00001000,0b01100100,0b01100010}, // %
{0b00110110,0b01001001,0b01010101,0b00100010,0b01010000}, // &
{0b00000000,0b00000101,0b00000011,0b00000000,0b00000000}, // '
{0b00000000,0b00011100,0b00100010,0b01000001,0b00000000}, // (
{0b00000000,0b01000001,0b00100010,0b00011100,0b00000000}, // )
{0b00010100,0b00001000,0b00111110,0b00001000,0b00010100}, // *
{0b00001000,0b00001000,0b00111110,0b00001000,0b00001000}, // +
{0b00000000,0b01010000,0b00110000,0b00000000,0b00000000}, // ,
{0b00001000,0b00001000,0b00001000,0b00001000,0b00001000}, // -
{0b00000000,0b01100000,0b01100000,0b00000000,0b00000000}, // .
{0b00100000,0b00010000,0b00001000,0b00000100,0b00000010}, // /
{0b00111110,0b01010001,0b01001001,0b01000101,0b00111110}, // 0
{0b00000000,0b01000010,0b01111111,0b01000000,0b00000000}, // 1
{0b01000010,0b01100001,0b01010001,0b01001001,0b01000110}, // 2
{0b00100001,0b01000001,0b01000101,0b01001011,0b00110001}, // 3
{0b00011000,0b00010100,0b00010010,0b01111111,0b00010000}, // 4
{0b00100111,0b01000101,0b01000101,0b01000101,0b00111001}, // 5
{0b00111100,0b01001010,0b01001001,0b01001001,0b00110000}, // 6
{0b00000011,0b01110001,0b00001001,0b00000101,0b00000011}, // 7
{0b00110110,0b01001001,0b01001001,0b01001001,0b00110110}, // 8
{0b00000110,0b01001001,0b01001001,0b00101001,0b00011110}, // 9
{0b00000000,0b01101100,0b01101100,0b00000000,0b00000000}, // :
{0b00000000,0b01010110,0b00110110,0b00000000,0b00000000}, // ;
{0b00001000,0b00010100,0b00100010,0b01000001,0b00000000}, // <
{0b00010100,0b00010100,0b00010100,0b00010100,0b00010100}, // =
{0b00000000,0b01000001,0b00100010,0b00010100,0b00001000}, // >
{0b00000010,0b00000001,0b01010001,0b00001001,0b00000110}, // ?
{0b00110010,0b01001001,0b01111001,0b01000001,0b00111110}, // @
{0b01111110,0b00010001,0b00010001,0b00010001,0b01111110}, // A
{0b01111111,0b01001001,0b01001001,0b01001001,0b00111110}, // B
{0b00111110,0b01000001,0b01000001,0b01000001,0b00100010}, // C
{0b01111111,0b01000001,0b01000001,0b01000001,0b00111110}, // D
{0b01111111,0b01001001,0b01001001,0b01001001,0b01001001}, // E
{0b01111111,0b00001001,0b00001001,0b00001001,0b00000001}, // F
{0b00111110,0b01000001,0b01001001,0b01001001,0b00111010}, // G
{0b01111111,0b00001000,0b00001000,0b00001000,0b01111111}, // H
{0b01000001,0b01000001,0b01111111,0b01000001,0b01000001}, // I
{0b00110000,0b01000001,0b01000001,0b00111111,0b00000001}, // J
{0b01111111,0b00001000,0b00010100,0b00100010,0b01000001}, // K
{0b01111111,0b01000000,0b01000000,0b01000000,0b01000000}, // L
{0b01111111,0b00000010,0b00001100,0b00000010,0b01111111}, // M
{0b01111111,0b00000100,0b00001000,0b00010000,0b01111111}, // N
{0b00111110,0b01000001,0b01000001,0b01000001,0b00111110}, // O
{0b01111111,0b00001001,0b00001001,0b00001001,0b00000110}, // P
{0b00111110,0b01000001,0b01010001,0b00100001,0b01011110}, // Q
{0b01111111,0b00001001,0b00001001,0b00011001,0b01100110}, // R
{0b01000110,0b01001001,0b01001001,0b01001001,0b00110001}, // S
{0b00000001,0b00000001,0b01111111,0b00000001,0b00000001}, // T
{0b00111111,0b01000000,0b01000000,0b01000000,0b00111111}, // U
{0b00001111,0b00110000,0b01000000,0b00110000,0b00001111}, // V
{0b00111111,0b01000000,0b00111000,0b01000000,0b00111111}, // W
{0b01100011,0b00010100,0b00001000,0b00010100,0b01100011}, // X
{0b00000011,0b00000100,0b01111000,0b00000100,0b00000011}, // Y
{0b01100001,0b01010001,0b01001001,0b01000101,0b01000011}, // Z
{0b01111111,0b01000001,0b01000001,0b00000000,0b00000000}, // [
{0b00000010,0b00000100,0b00001000,0b00010000,0b00100000}, // '\'
{0b00000000,0b00000000,0b01000001,0b01000001,0b01111111}, // ]
{0b00000100,0b00000010,0b00000001,0b00000010,0b00000100}, // ^
{0b01000000,0b01000000,0b01000000,0b01000000,0b01000000}, // _
{0b00000000,0b00000001,0b00000010,0b00000100,0b00000000}, // `
{0b00100000,0b01010100,0b01010100,0b01010100,0b01111000}, // a
{0b01111111,0b01001000,0b01000100,0b01000100,0b00111000}, // 0b
{0b00111000,0b01000100,0b01000100,0b01000100,0b00100000}, // c
{0b00111000,0b01000100,0b01000100,0b01001000,0b01111111}, // d
{0b00111000,0b01010100,0b01010100,0b01010100,0b00011000}, // e
{0b00001000,0b01111110,0b00001001,0b00000001,0b00000010}, // f
{0b00001100,0b01010010,0b01010010,0b01010010,0b00111110}, // g
{0b01111111,0b00001000,0b00000100,0b00000100,0b01111000}, // h
{0b00000000,0b01000100,0b01111101,0b01000000,0b00000000}, // i
{0b00100000,0b01000000,0b01000100,0b00111101,0b00000000}, // j
{0b01111111,0b00010000,0b00101000,0b01000100,0b00000000}, // k
{0b00000000,0b01000001,0b01111111,0b01000000,0b00000000}, // l
{0b01111000,0b00000100,0b00001000,0b00000100,0b01111000}, // m
{0b01111100,0b00001000,0b00000100,0b00000100,0b01111000}, // n
{0b00111000,0b01000100,0b01000100,0b01000100,0b00111000}, // o
{0b01111100,0b00010100,0b00010100,0b00010100,0b00001000}, // p
{0b00001000,0b00010100,0b00010100,0b01111100,0b00000000}, // q
{0b01111100,0b00001000,0b00000100,0b00000100,0b00001000}, // r
{0b01001000,0b01010100,0b01010100,0b01010100,0b00100000}, // s
{0b00000100,0b00111111,0b01000100,0b01000000,0b00100000}, // t
{0b00111100,0b01000000,0b01000000,0b00100000,0b01111100}, // u
{0b00011100,0b00100000,0b01000000,0b00100000,0b00011100}, // v
{0b00111100,0b01000000,0b00110000,0b01000000,0b00111100}, // w
{0b01000100,0b00101000,0b00010000,0b00101000,0b01000100}, // x
{0b00001100,0b01010000,0b01010000,0b01010000,0b00111100}, // y
{0b01000100,0b01100100,0b01010100,0b01001100,0b01000100}, // z
{0b00000000,0b00001000,0b00110110,0b01000001,0b00000000}, // {
{0b00000000,0b00000000,0b01111111,0b00000000,0b00000000}, // |
{0b00000000,0b01000001,0b00110110,0b00001000,0b00000000}, // }
{0b00001000,0b00000100,0b00000100,0b00001000,0b00000100} // ~
};
//unsigned int angryface_B[] = {0x00, 0x00, 0x66, 0x66, 0x00, 0x18, 0x24, 0x42, 0x00};
//unsigned char angryface_B[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
//volatile
void zat()
{
for (int k = 1; k < 6; k++)
{
Send_7219(k, 0b00000000);
}
}
void angryface_func()
{
int c = 1;
for (int i = 0; i < 97; i++)
{
for (int j = 0; j < 5; j++)
{
Send_7219(7-c, znaki[i][j]);
_delay_ms(300);
c += 1;
}
zat();
c = 1;
}
}
void printer()
{
int c = 1;
if (Serial.available() > 0)
{
char a = Serial.read();
Serial.println("prin:");
Serial.println(a, DEC);
for (int i = 0; i < 5; i++)
{
Send_7219(c, znaki[a-32][i]);
c += 1;
}
Serial.read();
_delay_ms(500);
}
}
int main(void)//туловище программы
{
Serial.begin(115200); //инициализация монитора последовательного интерфейса
SPI_MasterInit();;
//DDRB |=(1 << SCK)|(1 << MOSI)|(1 << CS); // MISO не назначаем на выход
PORTD|=(1 << MISO);
//MISO - включаем внутреннюю подтяжку
sei();//разрещаем глобальные прерывания
//angryface_func();
while(1)//основной код программы
{
printer();
/*
Send_7219(1, 1);
_delay_ms(500);
Send_7219(2, 2);
_delay_ms(500);
Send_7219(3, 4);
_delay_ms(500);
Send_7219(4, 8);
_delay_ms(500);
Send_7219(5, 16);
_delay_ms(500);
Send_7219(6, 32);
_delay_ms(500);
Send_7219(7, 64);
_delay_ms(500);
Send_7219(8, 128);
_delay_ms(500);
*/
}
}
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
/*
(1<<SPR0); - частоту делим на 16
MSTR - мастер
SPE - SPI EN SPI Interrupt Enable
SPIE -
When the DORD bit is written to one, the LSB of the data word is transmitted first.
When the DORD bit is written to zero, the MSB of the data word is transmitted first.
*/
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
void Send_7219(char rg, char dt)
{
PORTB &= ~(1<<CS); // разрешаем работу SPI внешнего выбранного устройства
SPI_MasterTransmit(7-rg);//передаем адрес регистра
_delay_ms(10);
SPI_MasterTransmit(dt);//передаем данные
PORTB |= (1<<CS);// запрезаем работу SPI внешнего выбранного устройства
}