mikro cw7


politechnika lubelska w lublinie

LABORATORIUM UKŁADÓW MIKROPROCESOROWYCH

Numer ćwiczenia: 7 Temat ćwiczenia: Obsługa klawiatury i wyświetlacza LCD.

Wykonał: BARTOSZEK Krzysztof

Grupa: 9.8

Obsługa klawiatury i wyświetlacza LCD.

#include <avr/io.h>

#include <util/delay.h>

int kbdread(void)

// przeglądanie klawiatury 4x4, funkcja zwraca kod wciśniętego klawisza 'k'

{

PORTD=0b01111111;

switch(PIND)

{

case 0b01110111: return 1;

case 0b01111011: return 2;

case 0b01111101: return 3;

case 0b01111110: return 4;

}

PORTD=0b10111111;

switch(PIND)

{

case 0b10110111: return 5;

case 0b10111011: return 6;

case 0b10111101: return 7;

case 0b10111110: return 8;

}

PORTD=0b11011111;

switch(PIND)

{

case 0b11010111: return 9;

case 0b11011011: return 10;

case 0b11011101: return 11;

case 0b11011110: return 12;

}

PORTD=0b11101111;

switch(PIND)

{

case 0b11100111: return 13;

case 0b11101011: return 14;

case 0b11101101: return 15;

case 0b11101110: return 16;

}

return 0;

}

void lcdinstr(int instr) //zapisz instrukcję sterującą do LCD

{

PORTB=PORTB&0b11111110;

PORTB=PORTB|0b00000010;

PORTB=(PORTB&0x0f)|(instr&0xf0); // przygotuj starszy półbajt do LCD

asm("nop"); // wydłużenie impulsu

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101;

_delay_us(500); // czekaj na gotowość LCD

PORTB=PORTB|0b00000010;

PORTB=(PORTB&0x0f)|((instr&0x0f)<<4); // przygotuj młodszy półbajt do LCD

asm("nop");

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101;

_delay_us(500); // czekaj na gotowość LCD

}

void lcdinit(void)

// funkcja trzykrotnie wysyła do wyświetlacza instrukcję 0x03, następnie

// instrukcję 0x02, po tej operacji wyświetlacz jest gotowy do przyjmowania

// poleceń w trybie 4 bitowym

{

int i;

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

{

PORTB=PORTB|0b00000010;

PORTB=0x30;

asm("nop");

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101;

_delay_ms(50);

}

PORTB=PORTB|0b00000010;

PORTB=(0x20);

asm("nop");

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101;

_delay_us(50);

lcdinstr(0x28); // ustawinie trybu wyświetlacza 16x2, 4 bity danych

lcdinstr(0x0f); // włącz wyświetlacz

}

void lcdwrite(char dana) // zapisz daną do LCD

{

PORTB=PORTB|0b00000001;

PORTB=PORTB|0b00000010;

PORTB=(PORTB&0x0f)|(dana&0xf0); // przygotuj starszy półbajt do LCD

asm("nop");

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101; // impuls strobujący

_delay_us(500); // czekaj na gotowość LCD

PORTB=PORTB|0b00000010;

PORTB=(PORTB&0x0f)|((dana&0x0f)<<4); //przygotuj młodszy półbajt do LCD

asm("nop");

asm("nop");

asm("nop");

PORTB=PORTB&0b11111101; // impuls strobujący

_delay_us(500); // czekaj na gotowość LCD

}

int change (int k)

//zamiana kodu klawisza klawiatury na kod wyświetlany na wyświetlaczu

{

switch(k)

{

case 0x00: return 0b00110000; //0

case 0x01: return 0b00110001; //1

case 0x02: return 0b00110010; //2

case 0x03: return 0b00110011; //3

case 0x04: return 0b00110100; //4

case 0x05: return 0b00110101; //5

case 0x06: return 0b00110110; //6

case 0x07: return 0b00110111; //7

case 0x08: return 0b00111000; //8

case 0x09: return 0b00111001; //9

case 0x0a: return 0b01000001; //a

case 0x0b: return 0b01000010; //b

case 0x0c: return 0b01000011; //c

case 0x0d: return 0b01000100; //d

case 0x0e: return 0b01000101; //e

case 0x0f: return 0b01000110; //f

default: return 0b00010110;

}

}

int main(void)

{

int key=0;

_delay_ms(45); // czekaj na ustalenie napięć w układach

DDRD=0xf0; // ustawienie portu klawiatury

PORTD=0xff;

DDRA=0xff; // ustawienie portu lini z diodami

PORTA=0xff;

DDRB=0xff; // ustawienie portu wyświetlacza

PORTB=0x00;

lcdinit(); // inicjalizacja wyświetlacza

while(1)

{ // niewcisniety zaden klawisz

key=0x00;

while(key==0) key=kbdread(); // czekaj na klawisz

_delay_ms(20); // przeczekaj drgania styków

PORTA=(key-1);

lcdinstr(0x01);

_delay_ms(5);

lcdwrite(change(key-1));

}

}



Wyszukiwarka

Podobne podstrony:
prezentacja mikro Kubska 2
Mikro w 1
7 Mikro i makro elementy naszej diety
Wykład 3 Mikro 1 Econ
wyk ad4 Mikro
mikro wykresy super
02a MIKRO
04 08 Lowiectwo cw7
POK cw7
cw7 (zginanie)
Zestaw 4 Mikro
SCCIAGI Z EKO!, studia UMK, Podstawy ekonomii (mikro i makro)
cw7 sprawozdanie
MIKRO ŚCIĄGI Z WYKŁADU, studia, studia II rok, mikrobiologia, mikro egz, Ściągi RAZY 2
mikro c 5 sc, Weterynaria Lublin, Weterynaria 1, Mikrobiologia
EGZAMIN Z MIKRO!!!, Medycyna Warszawski Uniwersytet Medyczny, Mikrobiologia

więcej podobnych podstron