Image97 (4)

Image97 (4)



■ Programowanie

Lisiłng 103 - plik main.c

jtfinclude <avr/io.h> tfinclude <stdio.h>

#inc1ude <util/celdy.h>

ftnclude „harddef.h"

#inc1ude ,.makra.h” linclude „lcd.h”

#inclLde „langsys h'1

static inline uimK t sw_wait(void)

{

for(;;)

{

// Oczekiwanie na naciśnięcie przycisku if(!CPIN(SW_PORT) & l«SWO)

{

delay_ms(30);

tf(l(PIN(SW_PORT) & 1«SW1)) return 1;

}

if(!(PIN(SW PORT) & 1«SW2))

1

delay_ms(30);

lf(l(P:N(SW_PORT) & 1«SW2)) return 2;

>

1

)


■int main(V0id)

{

// inicjacja wyprowadzeń

L)DR(LCD CTRLPORT) - (1«LCD E | 1«LCD_RW I 1«LCD RS | 1«LCD LED);

PORT (LCD_CTRLPORT) = ~0«LCD E | 1«LCD_LED);

PORT(SW_ PORT) = U<SWI | 1«SW2;

// inicjacja wyświetlacza lcd_Init();

IcdSctStatus (LCDSTATUSD1SP) \

// wyświetlenie zapytania o język tputs_P(PSTR(„Sl - „), IcdGctFileO); fputs P(langs>s_GetLangNamc(0), lcd_GetFileO); lcd_GoTo(0, 1);

fputs_P(PSTR(„S2 -    IcdGctFileO) I

fputs P(langsys_GetLangNamc (1) , Icd GetFilc () ) ;

IcćUpdate O »

// oczekiwanie na przycisk i wybranie języka langsysSelect (sw_wait () -1);

// Wyświetlenie przywitania cd_ClsO;

fputs_PClangsys_GetTextClOS_Start)ł IcdGctFileO) ; icd_Update() ;

return 0;

>

R E < l A M A


w następnych numerach EdW


Sterownik zegarowy i nie tylko... - Urządzenie, oprócz wbudowanego zegara, posiada wiele cekawych i pożyleczrych funkcji. Oto niektóre z nici:

* kanały ste'o\vane czasowo (godzna włączenia, godzina wyłączenia^.

3 kanały sterowane ręcznie przez użytkownika, 1 kanał sterowany termicznie (temperatura górna maksymalna, dolna minimelna z zakresu od -55 do +150°C), cyfrowy czujnik temperatury i In.

Kompukser - W popularnych kartach cźwiękcwych mamy do dyspozycji jecno gniazdo wejściowe Linę In typu miniJack.

Czasem jecnak zachoczi potrzeba, aby podłączyć do komputera więcej sygnałów audio. Opisany w artykule układ rozwiązuje ten problem.

Ponadto umożliwia łatwą rozoudowę o kolejne kanały.


Listing 105 - Wykorzystam? wyiic~enia do obliczania rozmiaru tablicy

const próg char* langsys $trTable[2] flDS_END] PROGMF.M = (...)


umieszczona bezpośrednio tutaj - plik ten jest plikiem „chwilowym”, służącym nam tylko do testowania, W przyszłości przyciski będą obsługiwanie inaczej.

Zauważ sposób dostępu do napisów, gdy język został już wybrany. Niezależnie od dokonanego wyboru przywitanie wyświetlane jest w taki sam sposób. W tym prostym programie nie widać jeszcze siły tkwiącej w rozwiązaniu - napisów jest za mało, mamy jednak pewność, że nowy moduł działa.

Ułatwienie tworzenia tablicy wskaźników

Przy okazji listingu 97 obiecałem, że zajmiemy się problemem ustawiania rozmiaru tablicy wskaźników na napisy. O ile przy dwóch różnych tekstach nie ma problemu z ręcznym podaniem ich ilości, to przy rozwoju programu może to stać się dość uciążliwe. Kompilator nie obliczy dla nas rozmiaru innego niż najwyższy wymiar tablicy. Możemy jednak wykorzystać fakt. że wyliczamy indeksy kolejnych wpisanych wartości. Niezbędny rozmiar tablicy to ostatni indeks + 1. Wpro

,/Z,

wadźmy dodatkowy identyfikator do wyliczenia zgodnie / listingiem 104. Umówmy się teraz, żc wszelkie nowe identyfikatory wprowadzimy przed IDS FND Identyfikator ten jest równy wartości ostatniego identyfikatora łańcucha + 1. Możemy teraz wykorzystać go do ustawienia rozmiaru naszej tablicy, tak jak zostało to pokazane na listingu 105.

Listing lO-i — ubliżenie ilości napisów

enum

{

IDS_LANGNAME,

IDSStart,

// KONIEC IDS_END

U

Inne modyfikacje

Aktualnym ograniczeniem ilości napisów jest wartość 256. Wynika to z przyjętego typu

parametru funkcji langsys_GetTekst. Jest mało prawdopodobne, aby pojawiła się potrzeba wykorzystania większej ilości tekstów. Jeśli jednak taka potrzeba zaistnieje, zawsze można zmienić typ parametru na wartość szesnastobitową zostanie to prawidłowo obsłużone. Większe wartości nie mają sensu - przy wykorzystaniu całego dostępnego zakresu możemy całkowicie zapełnić pamięć procesora Atmegal28 samą tylko tablicą wskaźników dla jednego języka

Podsumowanie

Dziś utworzyliśmy kolejny element kojarzony z zaawansowaną obsługą LUD. Ważne jest jednak to, że moduł ten jest bardzo uniwersalny -podaje nam ledyme łańcuch zawierający napis w- danym języku. Może on równie dobrze współdziałać z wyświetlaczem alfanumerycznym, graficznym czy nawet służyć do wyboru języka komunikacji poprzez port RS232.

Poznajemy jednocześnie coraz bardziej zaawansowane elementy' języka C. Tablice wielowymiarowe czy możliwość wykorzystania funkcji jak zmiennei jest czymś co nie pojawiało się w' BASCOM-ie. Jeśli teraz sprawia Ci to kłopot, pamiętaj, że C nie zmusza Cię do korzystania z tych opcji. Jeśli chcesz, możesz korzystać ze zmiennych pomocniczych, a w pewnym momencie sam odkryjesz, jak wygodnie jest zapisać algorytm bez nich.

W kolejnej części korzystając z dotychczasowego dzieła, stworzymy moduł umożliwiający proste tworzenie przcwijalncgo menu z zagnieżdżaniem opcji. Na systemie menu skończymy zaawansowaną obsługę LCD alfanumerycznego.

Radosław Koppcl

mdoslaw.koppel@elpartcil.pl

46


Czerwiec 2006


Elektronika dla Wszystkich



Wyszukiwarka

Podobne podstrony:
Image243 Programowanieczęść 7 Listing 53 - plik rs.c #incltde <avrio.h> finclude „rs.h1 1nt rs
Program w Pythonie jako plik tekstowy Konsola tekstowa Pythona umożliwia napisanie właściwie dowolne
Poznaj C++ w$ godziny0032 16 Godzina 2 W linii 1 do programu dołączany jest plik iostream.h. Kompila
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
79181 Image95 (3) ■ Programowanie Tabela 11 Znaczenie sekcji .initO-9 Sekcja Znaczenia .initO Jeś
42173 Image97 (3) ProgramowanieABC... GCC Pisanie funkcji w pełnym asemblerze WinAV R umożliwia
5 (1824) 10.    Lokalizujemy plik main, który wcześniej zmodyfikowaliśmy GSlide m (4
tracert letras pierwszy □li [5T C;WIND0WSsystem32cmd.exe__ program wykonywalny lub plik wsadowy. C:D

więcej podobnych podstron