89756 Image151

89756 Image151



Programowanie


Listing 1S rozwinięty program obsługi wyświetlacza LED oraz klawiatury


Dziś, po wakacyjnej przerwie wracamy do poznawania naszego kompilatora C dla procesorów AVR. Do tej pory przeszliśmy przez zasady tworzenia prostych plików' makef.le oraz konfiguracji Programmers Notepada do wygodnej pracy. Do symulacji programów wykorzystaliśmy AVRStudio w wersji 4.11 (minimalnie 4.10). Przedstawiona została podstawowa składnia do wykorzystania dyrektywy /Altfinc, skrótowo omówiliśmy przeprowadzanie obliczeń, stosowanie zmiennych globalnych oraz pisanie do ponów, włącznie z dostępem do poszczególnych bitów Wreszcie w części ostatniej pojawił się opis najważniejszych plików nagłówkowych, przerwania, tworzenie funkcji, instrukcja If oraz sposób wykorzystania pamięci programu.

Po raz ostatni sięgniemy do prostego pro-giamu obsługi wyświetlacza multipleksowa-nego. Na tej podstawie chcę przedstawić Ci działanie dostępnych w C instrukcji pętli, wykorzystanie zmiennych lokalnych, propo-zycję obsługi przycisków oraz wykorzystanie przerwania wyświetlacza do dokładniejszego i jednocześnie mniej pamięciochłonnego generowania opóźnień niż wykorzystanie funkcji zawartych w pliku <avr\delay.h>.

Tym razem zmieniając nieco ideę, przedstawiani pełny kod źródłowy, a następnie wyjaśniam jego działanie. Na listingu 15 znajdziesz kod razem z dodatkowymi przypisami. Strategiczne miejsca oznaczyłem cyframi, do których będę się odwoływał w czasie opisu. Jak zwykle szare tło towarzyszy częściom programu, które nie zmieniły się od ostatniej wersji. Ze względu na oszczędność miejsca wy kropko walem jedynie dane inicjujące tablicę wzorów cyfr.

Ogólnie o programie

Zadaniem nowego programu jest zliczanie w górę lub w dól - w zależność od naciśniętego przycisku. Inaczej niż miało to miejsce do tej pory, wynik jest wyświetlany w postaci dziesiętnej. Odpowiada za to funkcja Wyświeil-DEC. Dodatkowo przytrzymanie danego przycisku rozpoczyna szybkie zliczanie. Zanim przystąpisz do czytania informacji na temat dokładnego działania poszczególnych części, proponuję zapoznanie się z ramkami ABC... C o pętlach, zmiennych lokalnych, słowach kluczowych static i volatile oraz o czytaniu z ponów. Dylem zmuszony umieścić


"    ■ ““V    - i 'v^rr

Mnclude <avr\sii łinęludc «ivr\lnt«rruft.h>

li ar lulu    >' Rgncpic 4 . h>

// wefimcle wyprowadzeń

•d<-H ne irn_A n Idcńne ifDJi 1 ♦.Jf ■ ii*: ifD.C 2

*de’ine tto o 3

idR-ine LEQ_E 4 *dr ■ i a< lC0_f 5 #de‘ine t FO..G 6 ICD.DP 7


Usurtif t» dołączenie nagłówka


Idefłn# comI 4

•*!**' tnc C(JM4 J

i n* rnMKMT MMtm

adefine conooii ooro

Wcrine SWROrtT KiUTD •detine SwDOk DORO adctlne SWPIN pind Mcfine Swl 0

Udefine sw2 1    Q


Usunięta zmienna B_AktWy»wlattacx


volit11a ui.ntS t ^ »D. 1 »•/; //

Ulnta c Q 0«n«Ny«wr«clacłaCOł

pcog uint5_t o D«n*Coml,4] ■

t-(Jt<-«OOHl)7 -(l«COW), ~(1<«CCH3), -Cucom))!

prog_ui,ntB_t g_HjorCyfc[Hł] • (...)

uintl«_t g_Lictnik ■ 0}

// Funkcja wyświetlająca daną liczbę Cziesiętrie vo1d wyał.let.u*c(uintiD_t v»r)

ulnt8 t n;

1f</ar > 93 39)

for(n»0; n<4; n+O i

j_t*n«Wył«w1<»r I »n*A [n] m -(.    ;

retirni


for(n»4; n>0; n-*)

JaneWysw;

?gtr r«ni . /- 10;


< , , © c_D4n«Mvjwi«tlaciafn-]l •

r«nd b>t«:Ag_WiorCyfr[YarXlC]):

»•« * "


// Start 1nt Mln(vo d)

nnumin/mmmin/fii

// -nicjacjł

ŁSD3DR - OxFf{

COMDDR - . «C011 \ l«COK2 | 1«C0#3 l«COM4J

// włączenie podciągania na wyprowadzeniach przycisków swport - lC<SWl | 1«SW2:

Tccao • :«csoi l :<cscoj timsk - 3«roiRo;

// Globalne zezwolenie na przerwania «•!();

// koni*( Uiclifjl

iinnuimniinnnmun


rj;:!


Wv*wiet.DEC(c Licznik):

if(l(sw?:N A T«ski))


usuwanie droaiS styków DDelay • 6; //Stos


/i

q bDelay . ..

wFOe(g ŁDelay 1-0) {}

i f (I CSKPIK & 1«SK1J) +ł-g_Licmifc;

<j bDelay • 120: //ls wfiile(!(SKPlN A 1«.1W1))

W^8wle:lCEC(o_Llczn:k):


Cg_b>elay—T))

q_bDalay ■ 6: //SOms ś% ++g Llczn.k;    V/


if(l (SWPIN A 1«3M2))

// usuwanie drgań styków g bDalay ■ 6j //SOms wlil 1e(g_bD«l*y l« 0) {] ..... ’    ‘    «8M»


1f(l(SWPZ»< A 1«BW2]

-*g_Lic«nlk5 <j bDelay - 120 i //I# wFile(l(S4PIN i 1«SK2))

Wyautet1DCC(g Łtoanik); i f (q_bDel»y"wTi)

g_bDal*y - l»; //S0m‘, ^    --g_Llcanik;


\

// Obsługa przerwali

3IGNAŁ(SIQ_OVERPLCWO)

statlc Un-.8 t Akt4yflv»i*tJ.»cz - QjJ».

// wpisanie da licznika po /    - -w

TCMTO - 121;

// wyjaszenie wyświetlaczy

CGMPÓ&T |- L«C0M1 I l«C0*2 | <CON3 | l«COH»J // wycłania odpcwiednlet dane)

LBDPOZT - 9 Can«Wyswletlacie[AktWy>wletl«ci]5 // włąc zen e Mpoweckiitno wyświetlacza

Crew»T Iw p-y"_ i«*d_byt• (A|_ !ua«C 3«£*ti t.Wy««i«t. l«o»J ) ; // Zwiększenie stanu zmiennej wskazujące] na obsługiwany wyświetlacz 4-tiktWyawUelnet;

1f(AkiNyaw:otlac< > ))

// Zmienna zatwihieeająra n epsereeknenu kopiowań , zmiennej o-boeiar (typ yjlatile!)

ulj,te_t cjolay;

AlctWylulatUrt ■ 0;    fSf

// Obsługa opóźnień    w

dolny - g_6Dolny; if(dolny > 0)

--dcłnyi

^ 0_bDolay - dolny:


wspomniane ramki na kolejnych stronach, mam nadzieję, że nie utrudni to czytania.

WyświetIDEC

Omawianie programu rozpoczniemy od tytułowej funkcji. Ze wzgiędu na ilość obliczeń, a więc i zajętość pamięci, dobrym sposobem przetworzenia liczby zapisanej w kodzie dwójkowym na kolejne cyfry liczby dziesiętnej jest wydobywanie po kolei każdej ostatniej cyfry za pomocą reszty z dzielenia przez 10. Po wydobyciu każdej kolejnej cyfry liczba jest przesuwana o jedną pozycję w prawo. Uzyskujemy więc cyfry wf kolejności od


ostatniej do pierwszej. Poglądowo przedstawia to rysunek 24. Na listingu 15 właściwe przetwarzanie zostało umieszczóne w pętli oznaczonej numerkiem 0. Pętla została zbudowana w taki sposób, aby przerwanie następowało w chwili, gdy zmienna przyjmie wartość 0. Dlaczego została wybrana taka wartość, o tym dalej. Jednak sprawia to, że zmienna n przyjmuje wartości 4, 3, 2, 1. Natomiast dopuszczalne indeksy tablicy wyświetlacza mieszczą się w zakresie 0-3. Oczywiste jest, że możemy dokonać odpowiedniej zamiany przez odjęcie 1. Czy nie zwiększy to rozmiaru kodu? Co ciekawe:


38 Wrzesień2005 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
Image155 (2) Programowanie Fot. 5 Wyświetlacz I przewód gotowe do lutowania przedstawiają rysunki 57
cz4 Programowaniew y&jku © Dziś, po wakacyjnej przewie wracamy do poznawania naszego kompilator
15088 Image157 (2) ■ Programowanie Listing 167 Wczy tywanie obrazka z pamięci FLASH vo1d led Loari(p
Image187 program należy podzielić na dwie części, zorganizowane w sposób uniemożliwiający jednoczesn
Image1 Program wjęzyku Java
s179 Rozdział 13Poczta elektronicznaAutor: Bill Bali Programy obsługi poczty elektronicznej dla połą
skanuj0341 ROZDZIAŁ DZIESIĄTY: Projektowanie i nakładanie tekstur 341Inne rzutowania Różne programy

więcej podobnych podstron