sprawozdanie


0x08 graphic
POLITECHNIKA LUBELSKA

Laboratorium układów mikroprocesorowych

Krzysztof Lewandowski ED 9.8

„Atmega 32: Klawiatura 4x4, diody LED, wyświetlacz LCD”

Program:

Program miał za zadanie odczytywać naciśniety klawisz, zapalać odpowiadającą mu diode (do każdej przypisane są dwa klawisze) oraz wyświetlać jaki to klawisz na wyświetlaczu. Naciśnięcie dwóch klawiszy (w wierszu lub kolumnie) powoduje wyświetlenie kodu blędu i zapalenie układu diod. Wprowadzono system sprawdzania czy klawisz jest nadal wciskany, w przypadku ciągłego trzymania klawisza program czeka na jego zwolnienie.

#include <avr\io.h>

#define gw 0x2A;

#define p1 0x31;

#define p2 0x32;

#define p3 0x33;

#define p4 0x34;

#define p5 0x35;

#define p6 0x36;

#define p7 0x37;

#define p8 0x38;

#define p9 0x39;

#define pA 0x41;

#define pB 0x42;

#define pC 0x43;

#define pD 0x44;

#define p0 0x30;

#define hasz 0x23;

#define nic 0x01;

#define blad 0x21;

void czekaj(int czas)

{ int i;

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

asm ("nop");

}

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)

czekaj(1000);

}

}

int klawisz()

{

int k1,k2=0;

int od;

od=PINA;

czekaj(1000);

switch (PORTA)

{

case 0b11101111: //Wiersz pierwszy

switch (od)

{ case 0b11101111: k1=nic; break;

case 0b11100111: k1=pA; break;

case 0b11101011: k1=p3; break;

case 0b11101101: k1=p2; break;

case 0b11101110: k1=p1; break;

default: k1=blad;break;

};

if ((k2==0)&&(k1!=0))

k2=k1;

else

k2=blad;

break;

case 0b11011111: //Wiersz drugi

switch (od)

{ case 0b11011111: k1=nic; break;

case 0b11010111: k1=pB; break;

case 0b11011011: k1=p6; break;

case 0b11011101: k1=p5; break;

case 0b11011110: k1=p4; break;

default: k1=blad;break;

};

if ((k2==0)&&(k1!=0))

k2=k1;

else

k2=blad;

break;

case 0b10111111: //Wiersz trzeci

switch (od)

{ case 0b10111111: k1=nic; break;

case 0b10110111: k1=pC; break;

case 0b10111011: k1=p9; break;

case 0b10111101: k1=p8; break;

case 0b10111110: k1=p7; break;

default: k1=blad;break;

};

if ((k2==0)&&(k1!=0))

k2=k1;

else

k2=blad;

break;

case 0b01111111: //Wiersz czwarty

switch (od)

{ case 0b01111111: k1=nic; break;

case 0b01110111: k1=pD; break;

case 0b01111011: k1=hasz;break;

case 0b01111101: k1=p0; break;

case 0b01111110: k1=gw; break;

default: k1=blad;break;

};

if ((k2==0)&&(k1!=0))

k2=k1;

else

k2=blad;

break;

default: k2=blad; break;

};

return k2;

}

void diody(int key)

{ int k=0;

DDRB=0xFF;

k = key;

switch (k)

{

case (0x44) : PORTB=0b10000000; break;

case (0x31) : PORTB=0b00000001; break;

case (0x32) : PORTB=0b00000001; break;

case (0x33) : PORTB=0b00000010; break;

case (0x41) : PORTB=0b00000010; break;

case (0x34) : PORTB=0b00000100; break;

case (0x35) : PORTB=0b00000100; break;

case (0x36) : PORTB=0b00001000; break;

case (0x42) : PORTB=0b00001000; break;

case (0x37) : PORTB=0b00010000; break;

case (0x38) : PORTB=0b00010000; break;

case (0x39) : PORTB=0b00100000; break;

case (0x43) : PORTB=0b00100000; break;

case (0x2A) : PORTB=0b01000000; break;

case (0x45) : PORTB=0b01000000; break;

case (0x46) : PORTB=0b10000000; break;

case (0x21) : PORTB=0b10111101; break;

case (0x01) : PORTB=0b00000000; break;

};

}

void main()

{ int kod,kod1;

DDRB=0b11111111;

DDRD=0b11111111;

DDRA=0b11111111;

PORTA=0b11111111;

DDRA=0b11110000;

//inicjalizacja wyświetlacza

//ustawienie interfejsu 4-bitowego

PORTD=0b00100010;

czekaj(1000);

PORTD=0b00100000;

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

czekaj(1000);

PORTD=0b00000010;

czekaj(1000);

PORTD=0b00000000;

czekaj(1000);

PORTD=0b11100010;

czekaj(1000);

PORTD=0b11100000;

//czyszczenie wyświetlacza

czekaj(1000);

PORTD=0b00000010;

czekaj(1000);

PORTD=0b00000000;

czekaj(1000);

PORTD=0b00010010;

czekaj(1000);

PORTD=0b00010000;

//konfiguracja wyświetlacza

czekaj(1000);

PORTD=0b00000010;

czekaj(1000);

PORTD=0b00000000;

czekaj(1000);

PORTD=0b01100010;

czekaj(1000);

PORTD=0b01100000;

while (1)

{

PORTA = 0b11101111; //sprawdzanie pierwszego wiersza

kod = klawisz(); //odczytanie klawisza

diody(kod); //zapalenie odpowiedniej diody

kod1=klawisz(); //ponowne odczytanie klawisza

if (kod!=0x01) //czy klawisz był naciśniety

{ wyswietlacz(kod); //wyświeltenie kodu klawisza

while (kod1==kod) //jeżeli przycisk wciśniety - czekaj

{ czekaj(1000);

kod1=klawisz();

}

}

PORTA = 0b11011111; //sprawdzanie drugiego wiersza

kod = klawisz();

diody(kod);

kod1=klawisz();

if (kod!=0x01)

{ wyswietlacz(kod);

while (kod1==kod)

{ czekaj(1000);

kod1=klawisz();

}

}

PORTA = 0b10111111; //sprawdzanie trzeciego wiersza

kod = klawisz();

diody(kod);

kod1=klawisz();

if (kod!=0x01)

{ wyswietlacz(kod);

while (kod1==kod)

{ czekaj(1000);

kod1=klawisz();

}

}

PORTA = 0b01111111; //sprawdzanie czwartego wiersza

kod = klawisz();

diody(kod);

kod1=klawisz();

if (kod!=0x01)

{ wyswietlacz(kod);

while (kod1==kod)

{ czekaj(1000);

kod1=klawisz();

}

}

}

}



Wyszukiwarka

Podobne podstrony:
2 definicje i sprawozdawczośćid 19489 ppt
PROCES PLANOWANIA BADANIA SPRAWOZDAN FINANSOWYC H
W 11 Sprawozdania
Wymogi, cechy i zadania sprawozdawczośći finansowej
Analiza sprawozdan finansowych w BGZ SA
W3 Sprawozdawczosc
1 Sprawozdanie techniczne
Karta sprawozdania cw 10
eksploracja lab03, Lista sprawozdaniowych bazy danych
2 sprawozdanie szczawianyid 208 Nieznany (2)
Fragmenty przykładowych sprawozdań
Lab 6 PMI Hartownosc Sprawozdan Nieznany
Mikrokontrolery Grodzki Sprawoz Nieznany
biochemia sprawozdanie O (1)
Chemia fizyczna sprawozdanie (6 1) id 112219
201 sprawozdanie finansoweid 26953
Czarne orly sprawozdanie2
lrm sprawozdanie kck lab2

więcej podobnych podstron