|
AVR - LED panel - #6 Program |
|
|
|
|
Koutek AVR -
KIT #1 - LED panel s ATmega8 (zapojení a programy)
|
|
Napsal uživatel Vašek Král
|
|
Neděle, 10 Duben 2011 07:33 |
|
.
.
Untitled
#define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define RYCHLOST_MIN 2 #define RYCHLOST_MAX 100 #define POCET_REZIMU 15 #define BLIKANI 0b00010111 #define STROBO_CAS 10 #define MAJAK 50 unsigned char rychlost; unsigned char rezim; unsigned char zmena; ISR(TIMER0_OVF_vect)
{
static unsigned char tlacitko; TCNT0=157; if (tlacitko) {
tlacitko=0; return; }
if (!(PIND&0b00000100)) {
rezim++; zmena=1; tlacitko=1; }
if (!(PIND&0b00001000)) {
rychlost*=2; tlacitko=1; }
if (rezim>POCET_REZIMU) {
rezim=1; }
if (rychlost>RYCHLOST_MAX) {
rychlost=RYCHLOST_MIN; }
}void blik (void)
{
if (zmena) {
PORTB= BLIKANI; zmena=0; }
else {
PORTB=~PORTB; }
} void strobo (void)
{
PORTB=0xff; _delay_ms(STROBO_CAS); PORTB=0; }
void majak (void)
{
for(char n=0;n<2;n++) {
PORTB=0xff; _delay_ms(STROBO_CAS); PORTB=0; _delay_ms(MAJAK); }
}
void semtam (void)
{
static unsigned char pozice; if (zmena) {
PORTB=1; pozice=1; zmena=0; return; }
if (pozice<8) {
PORTB<<=1; }
else {
PORTB>>=1; }
pozice++; if(pozice>=15) {
pozice=1; }
}
void had (unsigned char delka) {
static unsigned char pozice; if (zmena) {
PORTB=0; pozice=0; zmena=0; }
if (pozice<delka) {
PORTB <<=1;
PORTB ++; }
else {
PORTB <<=1; }
pozice++;
if(pozice>(delka+8)) {
pozice=0; }
}
int main (void)
{
DDRB = 0xff; TIMSK|=1; TCCR0 = 5; SREG |= (1<<7); rezim=1; zmena=1; rychlost=RYCHLOST_MIN; for(;;) {
switch (rezim) {
case 1: blik(); break;
case 2: strobo(); break;
case 3: majak(); break;
case 4: semtam(); break;
default:
had(rezim-4); }
_delay_ms (1000/rychlost);
} }
|