AVR - LED panel - Příklad - Tlačítko Tisk
Koutek AVR - KIT #1 - LED panel s ATmega8 (zapojení a programy)
Napsal uživatel radioklub.cz   
Středa, 22 Červen 2011 20:43

Kompatibilní zapojení: LED panel s ATmega8

Ke stažení: LED_Tlacitko.c == LED_Tlacitko.pdf == LED_Tlacitko.htm
.
.

Untitled
/*
Popis:
Při stisku tlačítka se rozsvítí vybrané ledky. Po uvolnění tohoto tlačítka ledky 
opět zhasnou. 

Ledky které se mají rozsvěcet jsou vybrány konstantou "LED".

Tlačítka jsou připojena k portu "D" K tlačítkům jsou připojeny "pull up" rezistory 
na 5 V, takže pokud není stisknuté tlačítko, je na daném pinu 5 V (log. 1). 
Při stisku tlačítka se daný pin uzemní a je na něm tedy 0 V (log 0).
Tlačítka jsou připojena k pinům PD2 a PD3.

Stavy na portu "D" jsou tedy následující:
0b00001100 - žádné tlačítko není stisknuté
0b00000100 - stisknuté tlačítko "1"
0b00001000 - stisknuté tlačítko "2"
0b00000000 - stisknutá obě tlačítka
*/


#include <avr/io.h>		//Vlož knihovnu vstupů a výstupů (PORT, DDR, PIN)


#define LED 0b10101010; //Ledky, které  se mají rozsvítit při stisku tlačítka
						//(každá druhá)


/**********************HLAVNÍ FUNKCE*************************/

int main (void) //hlavní funkce
{
unsigned char prom; //nadefinujeme si proměnnou typu unsigned char se jménem "prom"
					//to znamená, že v paměti RAM vznikne místo (8 bitů) kam můžeme 
					//ukládat data
DDRB = 0xff; 	//(0xff = 0b11111111) -> Piny 0 - 7 portu "B" budou výstupní
DDRD = 0;		//Port "D" bude vstupní (tlačítko je připojeno k portu "D")

while (1)		// Nekonečná smyčka (dokud 1 = pořád)
	{
	prom=PIND; 	//do proměnné "prom" uložíme stav na portu "D" 
				//(tam kde je 5 V bude "1" a kde je 0 V bude "0")
	prom=prom&0b00000100;	//vymaskujeme pouze tlačítko "1" 
							//(pokud bylo na PD2 5 V bude výsledek 0b00000100
							//jinak bude výsledek "0"
	
	if(prom==0)	//pokud se proměnná "prom" rovná nule - tlačítko je stisknuté
		{
		PORTB = LED; //Rozsviť vybrané ledky
		}
	else //jinak (pokud se proměnná "prom" nerovná nule - tlačítko není stisknuté
		{
		PORTB = 0;	//zhasni všechny ledky
		}

	}	//Konec cyklu "while (1)" - program skočí zpět na jeho začátek

}//konec funkce main() - sem se program nikdy nedostane 
 //(závorka tu však musí být jinak by překladač nahlásil chybu)