Skip to content
Snippets Groups Projects
Commit 7306400a authored by Michal Rybka's avatar Michal Rybka
Browse files

Přidán článek AVR - LED panel - #3 Program

(Autoexportován z Joomly)
parent be0f19f2
No related branches found
No related tags found
No related merge requests found
+++
title = "AVR - LED panel - #3 Program"
perex_e = "
Kompatibilní zapojení: LED panel s ATmega8
Ke stažení: LED_003.c == LED_003.pdf == LED_003.htm
.
.
"
tags = ["Článek"]
+++
Kompatibilní zapojení: LED panel s ATmega8
Ke stažení: LED_003.c == LED_003.pdf == LED_003.htm
.
.
* * *
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;amp;amp;amp;amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;amp;amp;amp;amp;amp;gt;</style>
```
/*
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
```
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment