atmega spr


POLITECHNIKA LUBELSKA

LABORATORIUM UKŁADÓW MIKROPROCESOROWYCH

SPRAWOZDANIE

TEMAT: Odczyt klawiatury i obsługa wyświetlacza LCD - ATmega32

Wykonał: Konrad Kępa ED 9.8 I3

Data: 15 stycznia 2008r

Celem ćwiczenia było zapoznanie się z działaniem mikrokontrolera ATmega32 oraz napisanie programu w języku C obsługującego wyświetlacz LCD oraz klawiaturę.

Kod programu.

#include <avr/io.h>

// deniniowanie kodów klawiszy oraz wierszów do obsługi klawiatury

#define ROW1 0b01111111;

#define ROW2 0b10111111;

#define ROW3 0b11011111;

#define ROW4 0b11101111;

#define key0 0x30;

#define key1 0x31;

#define key2 0x32;

#define key3 0x33;

#define key4 0x34;

#define key5 0x35;

#define key6 0x36;

#define key7 0x37;

#define key8 0x38;

#define key9 0x39;

#define keyA 0x41;

#define keyB 0x42;

#define keyC 0x43;

#define keyD 0x44;

#define keyE 0x45;

#define keyF 0x46;

#define none 0x00;

#define error 0x21;

// funkcja służąca do opóźniania działa wykonywanego programu

void czekaj(int czas)

{int i;

for (i=0;i<czas;i++)

asm ("nop");

};

// funkcja służąca do obsługi wyświetlacza LCD podpiętego do portu D mikrokontrolera

void wyswietlacz(int kod)

{if (kod!=0)

{czekaj(1000);

PORTD=0b00000011+(kod & 0b11110000); //transmisja starszych bitow - E=1

czekaj(1000);

PORTD=(PORTD & 0b11111101); //transmisja starszych bitow - E=0 (zapis)

czekaj(1000);

PORTD=0b00000011+kod*16; //transmisja mlodszych bitow - E=1

czekaj(1000);

PORTD=(PORTD & 0b11111101); //transmisja mlodszych bitow - E=0 (zapis)

}

};

// funkcja służąca do wykrywania naciśniętego klawisza oraz sygnalizowania błędów (dwa naciśniete klawisze)

// sprawdzanie jest wykonywane poprzez zastosowanie pętli switch();

int klawiatura()

{int kod=0,kod2=0,key;

PORTA=ROW1; //wiersz pierwszy

key=PINA;

czekaj(1000);

switch (key)

{case 0b01111111:kod=none;break;

case 0b01111110:kod=key1;break;

case 0b01111101:kod=key2;break;

case 0b01111011:kod=key3;break;

case 0b01110111:kod=key4;break;

default:kod=error;

};

if(kod!=0x21)

{PORTA=ROW2; //wiersz drugi;

key=PINA;

czekaj(1000);

switch (key)

{case 0b10111111:kod2=none;break;

case 0b10111110:kod2=key5;break;

case 0b10111101:kod2=key6;break;

case 0b10111011:kod2=key7;break;

case 0b10110111:kod2=key8;break;

default:kod2=error;

};

if (kod*kod2==0)

{if (kod==0) kod=kod2;

}

else kod=error;

};

if(kod!=0x21)

{PORTA=ROW3; //wiersz trzeci;

key=PINA;

czekaj(1000);

switch (key)

{case 0b11011111:kod2=none;break;

case 0b11011110:kod2=key9;break;

case 0b11011101:kod2=key0;break;

case 0b11011011:kod2=keyA;break;

case 0b11010111:kod2=keyB;break;

default:kod=error;

}

if (kod*kod2==0)

{if (kod==0) kod=kod2;

}

else kod=error;

};

if(kod!=0x21)

{PORTA=ROW4; //wiersz czwarty;

key=PINA;

czekaj(1000);

switch (key)

{case 0b11101111:kod2=none;break;

case 0b11101110:kod2=keyC;break;

case 0b11101101:kod2=keyD;break;

case 0b11101011:kod2=keyE;break;

case 0b11100111:kod2=keyF;break;

default:kod=error;

}

if (kod*kod2==0)

{if (kod==0) kod=kod2;

}

else kod=error;

};

return kod;

};

// główna pętla programu

void main()

{DDRB=0b11111111;

DDRD=0b11111111;

DDRA=0b11111111;

PORTA=0b11111111;

DDRA=0b11110000;

//ustawienie interfejsu 4-bitowego

PORTD=0b00100010; //transmisja starszych bitow - E=1

czekaj(1000);

PORTD=0b00100000; //transmisja starszych bitow - E=0 (zapis)

//włączenie wyświetlacza,kursora, wyłączenie migania

czekaj(1000);

PORTD=0b00000010; //transmisja starszych bitow - E=1

czekaj(1000);

PORTD=0b00000000; //transmisja starszych bitow - E=0 (zapis)

czekaj(1000);

PORTD=0b11100010; //transmisja mlodszych bitow - E=1

czekaj(1000);

PORTD=0b11100000; //transmisja mlodszych bitow - E=0 (zapis)

//czyszczenie wyswietlacza

czekaj(1000);

PORTD=0b00000010; //transmisja starszych bitow - E=1

czekaj(1000);

PORTD=0b00000000; //transmisja starszych bitow - E=0 (zapis)

czekaj(1000);

PORTD=0b00010010; //transmisja mlodszych bitow

czekaj(1000);

PORTD=0b00010000; //transmisja mlodszych bitow - E=0 (zapis)

//konfiguracja wyswietlacza (kierunek+1, przesow-brak)

czekaj(1000);

PORTD=0b00000010; //transmisja starszych bitow - E=1

czekaj(1000);

PORTD=0b00000000; //transmisja starszych bitow - E=0 (zapis)

czekaj(1000);

PORTD=0b01100010; //transmisja mlodszych bitow - E=1

czekaj(1000);

PORTD=0b01100000; //transmisja mlodszych bitow - E=0 (zapis)

while (1)

{int kod;

kod=klawiatura();

PORTB=kod;

wyswietlacz(kod);

};

};

4



Wyszukiwarka

Podobne podstrony:
Spr[1] adm i uznanie adm
08 03 KPGO Spr z realizacji
17 Rozp Min Zdr w spr szk czyn Nieznany
przetworka spr ostatnie
as spr 5 id 69978 Nieznany (2)
metr spr 5
belka spr podl
078c rozp zm rozp min gosp w spr szkolenia w dziedzinie bhp
99 SPOSOBÓW OKAZYWANIA DZIECIOM MIŁOŚCI, Różne Spr(1)(4)
Spr. 4-Techniki wytw, ZiIP, sem 1
klucz do age, Różne Spr(1)(4)
Wnioski do spr z elektry 3, PW SiMR, Inżynierskie, Semestr V, syf, laborki, Lab. Ukł. Napędowych
spr kl 5 dodaw ulamkow rozne mian2, Matematyka, kl 5
spr - koag pow, Sprawozdania, oczyszczanie wody
spr 2 - wizualizacja, ☆☆♠ Nauka dla Wszystkich Prawdziwych ∑ ξ ζ ω ∏ √¼½¾haslo nauka, mechanika płyn
Quiz o Warszawie, Różne Spr(1)(4)
ZAKRES SPR- BIOL, Studia
ściskanie(lab), Studia, pomoc studialna, Sprawozdania Laborki, Wytrzymałość spr.nr2

więcej podobnych podstron