lab6 atmega Kuć


POLITECHNIKA LUBELSKA

0x01 graphic

Laboratorium układów mikroprocesorowych

Temat: Atmega32.

Wykonał: Data wykonania:

Krzysztof Kuć ED9.8 08.01.2008

W powyższym ćwiczeniu należało napisać program obsługujący wyświetlacz LCD i klawiature

#include <avr/io.h> -zdefiniowanie biblioteki

#define PORT_KEY PORTB; -zdefiniowanie zmiennych

#define DDR_KEY DDRB;

#define PIN_KEY PINB;

#define R1 0b01111111;

#define R2 0b10111111;

#define R3 0b11011111;

#define R4 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 brak 0x00;

#define blad 0x21;

void zwloka(int x) -funkcja powodująca zwłokę czasową

{

int i;

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

asm ("nop");

};

void wysw(int znak) -funkcja wyświetlająca dane na wyswietlaczu LCD

{

if (znak!=0)

{

zwloka(1000); -opóźnienie

PORTD=0b00000011+(znak & 0b11110000); -transmisja starszych bitów

zwloka(1000); -opóźnienie

PORTD=(PORTD & 0b11111101); -zapis starszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00000011+znak*16; -transmisja młodszych bitów

zwloka(1000); -opóźnienie

PORTD=(PORTD & 0b11111101); -zapis młodszych bitów

}

};

int klaw() -funkcja obsługująca klawiaturę

{int znak=0,znak2=0,key;

PORTA=R1; -zdefiniowanie klawiszy dla rzędu 1

key=PINA;

zwloka(1000);

switch (key)

{

case 0b01111111:znak=brak;break;

case 0b01111110:znak=key1;break;

case 0b01111101:znak=key2;break;

case 0b01111011:znak=key3;break;

case 0b01110111:znak=key4;break;

default:znak=blad;

};

if(znak!=0x21)

{PORTA=R2; -zdefiniowanie klawiszy dla rzędu 2

key=PINA;

zwloka(1000);

switch (key)

{

case 0b10111111:znak2=brak;break;

case 0b10111110:znak2=key5;break;

case 0b10111101:znak2=key6;break;

case 0b10111011:znak2=key7;break;

case 0b10110111:znak2=key8;break;

default:znak2=blad;

};

if (znak*znak2==0)

{if (znak==0) znak=znak2;

}

else znak=blad;

};

if(znak!=0x21)

{PORTA=R3; -zdefiniowanie klawiszy dla rzędu 3

key=PINA;

zwloka(1000);

switch (key)

{

case 0b11011111:znak2=brak;break;

case 0b11011110:znak2=key9;break;

case 0b11011101:znak2=key0;break;

case 0b11011011:znak2=keyA;break;

case 0b11010111:znak2=keyB;break;

default:znak=blad;

}

if (znak*znak2==0)

{if (znak==0) znak=znak2;

}

else znak=blad;

};

if(znak!=0x21)

{PORTA=R4; -zdefiniowanie klawiszy dla rzędu 4

key=PINA;

zwloka(1000);

switch (key)

{

case 0b11101111:znak2=brak;break;

case 0b11101110:znak2=keyC;break;

case 0b11101101:znak2=keyD;break;

case 0b11101011:znak2=keyE;break;

case 0b11100111:znak2=keyF;break;

default:znak=blad;

}

if (znak*znak2==0)

{if (znak==0) znak=znak2;

}

else znak=blad;

};

return znak;

};

int main() -program główny

{DDRB=0b11111111; -ustawienie portów

DDRD=0b11111111;

DDRA=0b11111111;

PORTA=0b11111111;

DDRA=0b11110000;

-ustawienie interfejsu 4-bitowego

PORTD=0b00100010; -przesyłanie starszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00100000; -przesyłanie starszych bitów -zapis

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

zwloka(1000); -opóźnienie

PORTD=0b00000010; -przesyłanie starszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00000000; -przesyłanie starszych bitów -zapis

zwloka(1000); -opóźnienie

PORTD=0b11100010; -przesyłanie młodszych bitów

zwloka(1000); -opóźnienie

PORTD=0b11100000; -przesyłanie młodszych bitów -zapis

-czyszczenie wyświetlacza

zwloka(1000); -opóźnienie

PORTD=0b00000010; -przesyłanie starszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00000000; -przesyłanie starszych bitów -zapis

zwloka(1000); -opóźnienie

PORTD=0b00010010; -przesyłanie młodszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00010000; -przesyłanie młodszych bitów -zapis

-konfiguracja wyświetlacza

zwloka(1000); -opóźnienie

PORTD=0b00000010; -przesyłanie starszych bitów

zwloka(1000); -opóźnienie

PORTD=0b00000000; -przesyłanie starszych bitów -zapis

zwloka(1000); -opóźnienie

PORTD=0b01100010; -przesyłanie młodszych bitów

zwloka(1000); -opóźnienie

PORTD=0b01100000; -przesyłanie młodszych bitów -zapis

while (1) -pętla nieskończona

{int znak; -zdefiniowanie zmiennych

znak=klaw(); -przypisanie zmiennej znak wartości funkcji klaw()

PORTB=znak; -przypisanie dla PORTB wartości zmiennej znak

wysw(znak); -przypisanie funkcji wysw() wartości zmiennej znak

};

};



Wyszukiwarka

Podobne podstrony:
lab6, SWBlab6
lab6
lab6
Atmega fusebit doctor (HVPP+HVSP) – napraw fusebity
lab6 NHIP pyt
lab6 doc
ATmega16
ATMega8535 id 71672 Nieznany (2)
Lab6 PSN cd 2015
AKiSO lab6
rownania nieliniowe, Automatyka i robotyka air pwr, VI SEMESTR, Notatki.. z ASE, metody numeryczne,
Faworki, ▄Kuchnia, Wszystko, Kuchnia Polska
Lab6 5 id 260087 Nieznany
AK lab6 (2)
atmega16mmr
LCD ATMEGAlmc ssc2a16 03 1263
Atmega 8 opis
Zablokowana Atmega1, elektronika, mikroprocesory, Różne

więcej podobnych podstron