/*
* disp1.c
* <" 1 test mit einem Modul ">
* Created: 15.01.2014 10:25:18
* Author: bentiaci
*/
#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#define PIN_SCK PORTB7
#define PIN_MOSI PORTB5
#define PIN_SS PORTB4
#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;
const uint8_t disp1[][8] ={
{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
{0B00001000, 0B00011000, 0B00101000, 0B01001000, 0B01111100, 0B00001000, 0B00001000, 0B00000000}, //4
{0B01111100, 0B01000000, 0B01111000, 0B00000100, 0B00000100, 0B01000100, 0B00111000, 0B00000000}, //5
{0B00011000, 0B00100000, 0B01000000, 0B01111000, 0B01000100, 0B01000100, 0B00111000, 0B00000000}, //6
{0B01111100, 0B01000100, 0B00000100, 0B00001000, 0B00010000, 0B00010000, 0B00010000, 0B00000000}, //7
{0B00111000, 0B01000100, 0B01000100, 0B00111000, 0B01000100, 0B01000100, 0B00111000, 0B00000000}, //8
{0B00111000, 0B01000100, 0B01000100, 0B00111100, 0B00000100, 0B00001000, 0B00110000, 0B00000000}, //9
{0B00010000, 0B00101000, 0B01000100, 0B01000100, 0B01111100, 0B01000100, 0B01000100, 0B00000000}, //A
{0B01111000, 0B01000100, 0B01000100, 0B01111000, 0B01000100, 0B01000100, 0B01111000, 0B00000000}, //B
{0B00111000, 0B01000100, 0B01000000, 0B01000000, 0B01000000, 0B01000100, 0B00111000, 0B00000000}, //C
{0B01110000, 0B01001000, 0B01000100, 0B01000100, 0B01000100, 0B01001000, 0B01110000, 0B00000000}, //D
{0B01111100, 0B01000000, 0B01000000, 0B01111000, 0B01000000, 0B01000000, 0B01000000, 0B00000000}, //F
{0B00111000, 0B01000100, 0B01000000, 0B01011100, 0B01000100, 0B01000100, 0B00111100, 0B00000000}, //G
{0B01000100, 0B01000100, 0B01000100, 0B01111100, 0B01000100, 0B01000100, 0B01000100, 0B00000000}, //H
{0B00111000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00111000, 0B00000000}, //I
{0B00011100, 0B00001000, 0B00001000, 0B00001000, 0B00001000, 0B01001000, 0B00110000, 0B00000000}, //J
{0B01000100, 0B01001000, 0B01010000, 0B01100000, 0B01010000, 0B01001000, 0B01000100, 0B00000000}, //K
{0B01000000, 0B01000000, 0B01000000, 0B01000000, 0B01000000, 0B01000000, 0B01111100, 0B00000000}, //L
{0B01000100, 0B01101100, 0B01010100, 0B01010100, 0B01000100, 0B01000100, 0B01000100, 0B00000000}, //M
{0B01000100, 0B01000100, 0B01100100, 0B01010100, 0B01001100, 0B01000100, 0B01000100, 0B00000000}, //N
{0B00111000, 0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B00111000, 0B00000000}, //O
{0B01111000, 0B01000100, 0B01000100, 0B01111000, 0B01000000, 0B01000000, 0B01000000, 0B00000000}, //P
{0B00111000, 0B01000100, 0B01000100, 0B01000100, 0B01010100, 0B01001000, 0B00110100, 0B00000000}, //Q
{0B00111000, 0B01000100, 0B01000100, 0B01111000, 0B01010000, 0B01001000, 0B01000100, 0B00000000}, //R
{0B00111000, 0B01000100, 0B01000000, 0B00111000, 0B00000100, 0B01000100, 0B00111000, 0B00000000}, //S
{0B01111100, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00010000, 0B00000000}, //T
{0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B00111000, 0B00000000}, //U
{0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B01000100, 0B00101000, 0B00010000, 0B00000000}, //V
{0B01000100, 0B01000100, 0B01000100, 0B01010100, 0B01010100, 0B01010100, 0B00101000, 0B00000000}, //W
{0B01000100, 0B01000100, 0B00101000, 0B00010000, 0B00101000, 0B01000100, 0B01000100, 0B00000000}, //X
{0B01000100, 0B01000100, 0B01000100, 0B00101000, 0B00010000, 0B00010000, 0B00010000, 0B00000000}, //Y
{0B01111100, 0B00000100, 0B00001000, 0B00010000, 0B00100000, 0B01000000, 0B01111100, 0B00000000}, //Z
};
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_writeData(uint8_t data_register, uint8_t data)
{
MAX7219_LOAD0;
// Senden an das Register, in dem die Daten gespeichert werden
spiSendByte(data_register);
// Senden die zu speichernden Daten
spiSendByte(data);
MAX7219_LOAD1;
}
//initialisieren 1 chip
void max7219_init1()
{
MAX7219_LOAD0;
MAX7219_writeData(MAX7219_MODE_DECODE, 0x00);
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, 0x07);
MAX7219_writeData(MAX7219_MODE_INTENSITY, 0x0f);
MAX7219_writeData(MAX7219_MODE_POWER, ON);
MAX7219_writeData(MAX7219_MODE_TEST, 0x00);
MAX7219_LOAD1;
}
int main(void)
{
// SCK MOSI CS/LOAD/SS
DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS);
// SPI aktivieren, Master-Modus
SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1);
// Alle 3 Module initialisieren
max7219_init1();
while(1){
for(j=0;j<35;j++)
{
for(i=1;i<9;i++)
MAX7219_writeData(i,disp1[j][i-1]);
_delay_ms(500);
}
}
}