AVR - LED panel - #3 Program Tisk
Koutek AVR -
Napsal uživatel Michal, OK1WMR   
ÄŒtvrtek, 07 Duben 2011 07:33

Kompatibilní zapojení: LED panel s ATmega8

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


Untitled
/*
V minulém programu se nám poda?ilo rozblikat ?adu LED diod pomocí cyklu,
?ekání a dvou konstant (STAV1 a STAV2) které nám ur?ovaly, jaké ledky mají 
svítit. Problém je v tom, že po napsání první konstanty musíme vytvo?it tu 
druhou p?esn? opa?n? (kde byly jedni?ky, budou nuly, a naopak), protože jinak 
by nám n?které ledky bu?to v?bec nesvítily, nebo by svítily stále. Nyní se 
proto pokusíme vytvo?it podobný program jako minule, který ale bude pot?ebovat 
nadefinovat pouze jeden stav a druhý si vypo?te sám.
K tomuto ú?elu se p?esn? hodí takzvaný bitový komplement. bitový komplement je 
operace, p?i níž se z jedni?ek stanou nuly, a naopak.
*/
/*
Te? ješt? v?d?t, jak takovou operaci zapsat.
Na tomto míst? se hodí uvést tabulku operátor? jazyka C, mezi které pat?í 
i náš bitový komplement.
*/
/*
Operátory v C:
							
  +		s?ítání				
  -		od?ítání
  *		násobení
  /		d?lení   
  %		modulus 			(zbytek po celo?íselném d?lení)
  ++    inkrementace        (zv?tšení o 1)
  --	dekrementace        (zmenšení o 1)
  =     p?i?azení
  ==    porovnání         	( if(A==B)...
  ~     bitový komplement 	( 0b11110000 -> 0b00001111)
  !		not
  !=    není rovno
  <     menší než
  >		v?tší než
  <=    menší nebo rovno
  >=	v?tší nebo rovno
  &     bitové AND  		(také adresa prom?nné)
  &&    logické AND
  |     bitové OR
  ||	logické OR
  ^     bitové exclusive OR
  ?     podmínkový operátor
  <<    bitový posun doleva  (A = B << 2  posun bit? o dv? místa doleva,
                                          zprava dopl?uje nuly)
  >>    bitový posun doprava
  +=	A += B totéž co  A = A + B
  -=    A -= B totéž co  A = A - B
  /=    podobn?...
  %=
  &=
  *=
  ^=
  |=
  >>=
  <<=
*/
/*
Nyní se tedy pokusíme napsat program:
*/

#define F_CPU 1000000UL  // 1 MHz (základní frekvence)

#include <avr/io.h>		//Knihovna vstup? a výstup? (PORT, DDR)
#include <util/delay.h>	//Knihovna ?ekacích funkcí

#define CEKANI 500		//kolik milisekund budou ledky svítit	
#define STAV1 0b01010101//které ledky se budou st?ídat

int main (void)
{
DDRB = 0b11111111;
PORTB= STAV1;
for(;;)
	{
	PORTB=~PORTB;		//Zapíšeme na portB bitový komplement p?vodní hodnoty
						//Vym?níme ledky - ty které svítily zhasnou, a naopak
	_delay_ms (CEKANI);	//?ekání 
	}
}


/* 
Pozorní si jist? všimli, že se konstrukce programu zjednodušila.
Po nahrání programu do p?ípravku "ATmega8 - LED panel" budou st?ídav? blikat 
LED diody tak, jak je to definováno v konstant? STAV1, rychlostí ur?enou 
v konstant? CEKANI. Tyto konstanty lze libovoln? m?nit...
*/

//Pro radioklub OK1KVK naspal Vašek Král