Quellcode:
#include <avr/io.h>
#pragma GCC optimize 0
#define NumberOfLeds 32
unsigned char data[NumberOfLeds][3];
/***********************************************************************
***********
* Wait1s()
*
*Beschreibung:
*Wartet 1 Sekunde.
*
*Rückgabewert:
*keine
*
*Parameter:
*keine
************************************************************************
**********/
void Wait1s(void)
{
unsigned long int ulZaehler;
for (ulZaehler = 0 ; ulZaehler < 797 ; ulZaehler++)
{
asm("nop");
}
}
/***********************************************************************
***********/
void send_RGB(void)
{
//Clock- und Daten-Leitungen löschen
PORTA &= ~0xA0;
for(unsigned char lednum = 0; lednum < NumberOfLeds; lednum++)
{
for(unsigned char mask = 0x80; mask; mask >>= 1)
{
//Datenleitung setzen oder löschen je nach Tabellen-Inhalt. Pin C1
if(data[lednum][0] & mask) PORTA |= 0x20; else {PORTA &= 0x20;
asm("nop");};
//Clock-Leitung setzen und gleich wieder löschen. Pin C0
PORTA |= 0x80; PORTA &= ~0x80;
}
for(unsigned char mask = 0x80; mask; mask >>= 1)
{
if(data[lednum][2] & mask) PORTA |= 0x20; else {PORTA &= 0x20;
asm("nop");};
PORTA |= 0x80; PORTA &= ~0x80;
}
for(unsigned char mask = 0x80; mask; mask >>= 1)
{
if(data[lednum][1] & mask) PORTA |= 0x20; else {PORTA &= 0x20;
asm("nop");};
PORTA |= 0x80; PORTA &= ~0x80;
}
//Wait1s();
}
}
int main(void)
{
DDRA = 0xFF;
while(1)
{
for(unsigned char i = 0; i < NumberOfLeds; i++)
{
data[i][0] = 50; //Rot
data[i][1] = 0; //Grün
data[i][2] = 0; //Blau
}
// SEND DATA TO STRIP
-------------------------------------------------
send_RGB();
}
}