Пытаюсь собрать электронное табло. И все никак не получается добавить регистровый сдвиг.
цифры просто заменяют друг друга. Подскажите как сделать движущуюся строку.
Спойлер
#include <avr/io.h>#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/pgmspace.h>
#define PIN_SCK PORTB5
#define PIN_MOSI PORTB3
#define PIN_SS PORTB2
#define ON 1
#define OFF 0
#define MAX7219_LOAD1 PORTB |= (1<<PIN_SS)
#define MAX7219_LOAD0 PORTB &= ~(1<<PIN_SS)
#define MAX7219_MODE_DECODE 0x09
#define MAX7219_MODE_INTENSITY 0x0A
#define MAX7219_MODE_SCAN_LIMIT 0x0B
#define MAX7219_MODE_POWER 0x0C
#define MAX7219_MODE_TEST 0x0F
#define MAX7219_MODE_NOOP 0x00
unsigned char i;
unsigned char j;
unsigned char k;
const uint8_t disp1[][8] PROGMEM ={
{0B00111000,0B01000100,0B01001100, 0B01010100, 0B01100100, 0B01000100, 0B00111000, 0B00000000}, //0
{0B00010000, 0B00110000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00111000, 0B00000000},//1
{0B00111000, 0B01000100, 0B00000100, 0B00001000, 0B00010000, 0B00100000, 0B01111100, 0B00000000}, //2
{0B01111100, 0B00001000, 0B00010000, 0B00001000, 0B00000100, 0B01000100, 0B00111000, 0B00000000}, //3
};
void spiSendByte (uint8_t databyte)
{
// Daten Kopieren in die SPI-Datenregister
SPDR = databyte;
// Warten bis die ?bertragung abgeschlossen ist
while (!(SPSR & (1 << SPIF)));
}
void MAX7219_writeData1(uint8_t data_register, uint8_t data)
{
spiSendByte(data_register);
spiSendByte(data);
}
void max7219_init()
{
MAX7219_LOAD0;
MAX7219_writeData1(MAX7219_MODE_DECODE, 0x00);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_SCAN_LIMIT, 0x07);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_INTENSITY, 0x0f);
MAX7219_LOAD1;
_delay_ms(5);
MAX7219_LOAD0;
for(k=0;k<2;k++)
MAX7219_writeData1(MAX7219_MODE_POWER, ON);
MAX7219_LOAD1;
}
void output()
{
for(j=0;j<3;j++)
{
for(i=1;i<9;i++)
{
MAX7219_LOAD0;
MAX7219_writeData1(i,pgm_read_byte(&disp1[j][i-1]));
MAX7219_LOAD1;
_delay_ms(5);
}
_delay_ms(100);
}
}
int main(void)
{
DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS) ;
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);
max7219_init();
while (1)
{
output();
}
}
Заранее спасибо.