Код: Выделить всё
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int picture_1[64][3] =
{
{0, 0, 0},//black
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{161, 141, 103},//koga
{0, 0, 0},//line 1
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{255, 0, 0},//red
{0, 0, 0},
{0, 0, 0},//line 2
{0, 0, 0},
{0, 0, 0},
{51, 23, 3},//haire
{51, 23, 3},
{0, 0, 0},
{255, 0, 0},
{0, 0, 255},
{51, 23, 3},//line 3
{255, 0, 0},
{255, 0, 0},
{161, 141, 103},
{161, 141, 103},
{51, 23, 3},
{251, 255, 0},//yellow
{0, 0, 255},//blue
{0, 0, 0,},//line 4
{255, 0, 0},
{255, 0, 0},
{51, 23, 3},
{161, 141, 103},
{161, 141, 103},
{0, 0, 255},
{0, 0, 255},
{0, 0, 0},//line 5
{255, 0, 0},
{255, 0, 0},
{0, 0, 0},
{51, 23, 3},
{161, 141, 103},
{0, 0, 255},
{0, 0, 255},
{0, 0, 0},//line 6
{255, 255, 255},//white
{255, 0, 0},
{161, 141, 103},
{51, 23, 3},
{161, 141, 103},
{251, 255, 0},
{0, 0, 255},
{51, 23, 3},//line 7
{0, 0, 0,},
{255, 0, 0},
{0, 0, 0},
{161, 141, 103},
{0, 0, 0},
{0, 0, 0},
{0, 0, 255},
{0, 0, 0}//line 8
};
void USART_init()
{
UBRRL = 31;
UCSRB = (1<<TXEN) | (1<<RXEN);
UCSRC = (1 << URSEL) | (3<<UCSZ0);
}
void SPI_init()
{
DDRD |= (1<<5);
PORTD |= (1<<5);
DDRB |= (1<<3) | (1<<5) | (1<<4) | (1<<1) | (1<<2);
PORTB |= (1<<0) | (1<<1) | (1<<2);
SPCR |= (1<<SPE) | (1<<MSTR) | (1<<CPHA);
SPSR |= (1<<SPI2X);
SPDR = 0;
}
void Write()
{
unsigned int element;
for (int i = 0; i < 64; i++)
{
for (int o = 0; o < 3; o++)
{
element = picture_1[i][o];
SPDR = element;
while(!(SPSR & (1<<SPIF)));
}
}
}
int main(void)
{
USART_init();
SPI_init();
while(1)
{
Write();
}
}- Вложения
-
- Курсовая работа. Светодиодное табло на управляемых матрицах WS2812.zip
- (65.56 КБ) 97 скачиваний


