#include <Arduino.h>
#include<avr/io.h>
#include<avr/interrupt.h>
#include "max.h"
#define DDR_SPI DDRB
#define DD_MOSI PORTB3
#define DD_SCK PORTB5
#define DD_SS PORTB2
#define SS (1<<PORTB2)
void displayData(unsigned char *data,int size);
void scrollLetter(unsigned char wrd[],int size);
void SPI_MasterInit(void);
void SPI_MasterTransmit(char command,char cData);
void matrix_setup();
uint8_t rows[8] = {ROW0,ROW1,ROW2,ROW3,ROW4,ROW5,ROW6,ROW7};
unsigned char letter[8];
void displayData(unsigned char *data,int size){
for(int i=0;i<size;i++){
SPI_MasterTransmit(rows[i],data[i]);
}
}
void scrollLetter(const char *wrd,int size){
for(int i=0;i<size;i++){
ledLetter(wrd[i],letter);
unsigned char x[8];
cpyArray(x,letter);
ledLetter(wrd[i+1],letter);
unsigned char y[8];
cpyArray(y,letter);
unsigned char temp[8];
for(int j=0;j<8;j++){
for(int i=0;i<8;i++){
temp[7-i] = (x[i]<<j)|(y[i]>>(8-j));
}
displayData(temp,8);
delay(250);
}
}
}
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, SS line */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);
//PORTB|=SS; // Making SS high to stop any TX
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char command,char cData)
{
/* Start command transmission */
PORTB&=(~SS); // MAKE CHIP SELECT LOW
SPDR = command;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
/* Start data transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
PORTB|=(SS);
}
void matrix_setup(){
//SPI_MasterTransmit(SHUTDOWN_MAX,0x00);
SPI_MasterTransmit(DECODER_MAX,0x00);
SPI_MasterTransmit(INTENSITYR_MAX,0x07);
SPI_MasterTransmit(SCAN_MAX,0x07);
}
void test(){
SPI_MasterTransmit(DISPLAY_TEST,0x01);
}
void setup() {
SPI_MasterInit();
matrix_setup();
}
void loop() {
// put your main code here, to run repeatedly:
// SPI_MasterTransmit(ROW0,0X0F);
// SPI_MasterTransmit(ROW3,0X0F);
// SPI_MasterTransmit(ROW7,0X0F);
scrollLetter("WELCOME",7);
}