POLITECHNIKA LUBELSKA
LABORATORIUM PODSTAW TECHNIKI MIKROPROCESOROWEJ
Mechatronika
Ćwiczenie 6
Klawiatura matrycowa i sekwencyjna
Cel ćwiczenia
Celem ćwiczenia było zapoznanie się ze sposobem komunikowania się z systemem mikroprocesorowym za pomocą klawiatury, sposobem podłączania klawiatury do systemu DSM-51 i różnicami pomiędzy klawiaturą sekwencyjną i matrycową.
Wykonanie ćwiczenia
Zadanie 1
Kod programu:
LED EQU P1.7
KEY EQU P3.5 ;odczyt klawiatury
;Stale uzywane w programie
KEY_COD EQU 00001001B ;wybrane klawisze – 1 i 4
LJMP START
ORG 100H
START:
MOV R0,#CSDS ;adres wyboru klawisza
MOV A,#KEY_COD
MOVX @R0,A ;wpisz wybrane klawisze
LOOP:
MOV C,KEY ;czytaj stan klawiszy
CPL C ;neguj
MOV LED,C ;zapal diode TEST gdy
;klawisz jest nacisniety
SJMP LOOP
Adres bufora CSDS: #30H
Zmiana wartości KEY_COD pozwala na zmianę wybranych klawiszy np. 00100010B uaktywnia klawisz 2 i 6.
Zadanie 2
Kod programu:
LED EQU P1.7
KEY EQU P3.5 ;odczyt klawiatury
;Stale uzywane w programie
KEY_COD EQU 00001001B ;wybrane klawisze-1 i 4
LJMP START
ORG 100H
START:
MOV R0,#CSDS ;adres wyboru klawisza
MOV A,#KEY_COD
MOVX @R0,A ;wpisz wybrane klawisze
LOOP_NO:
JNB KEY,LOOP_NO ;czekaj na nacisniecie
;klawisza
MOV A,#10 ;eliminacja drgan styków
LCALL DELAY_MS
JNB KEY,LOOP_NO ;czy nadal nacisniety
CPL LED ;neguj stan diody TEST
;przy nacisnieciu klaw.
LOOP_YES:
JB KEY,LOOP_YES ;czekaj na zwolnienie
;klawisza
MOV A,#10 ;eliminacja drgan styków
LCALL DELAY_MS
JB KEY,LOOP_YES ;czy klawisz zwolniony
SJMP LOOP_NO ;powrót do petli czekania
;na klawisz
W porównaniu do programu z zadania 1 po naciśnięciu aktywnego klawiszy zmieniał się stan diody, jednak po puszczeniu przyciska dioda nie wracała do poprzedniego stanu dopiero ponowne naciśnięcie aktywnego klawisza zmieniało stan diody.
Zadanie 3
Zmieniając w linii MOV A,#10 wartość 10 możemy zmieniać czas sprawdzania stanu klawiszy.
Zadanie 4
Kod programu:
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV R0,#CSKB0 ;adres klawiszy 0..7
LOOP_NO:
MOVX A,@R0 ;odczyt stanu klawiszy
CPL A
JZ LOOP_NO ;czy klawisz nacisniety
MOV R2,#0FFH
LOOP_NR: ;przekoduj nr klawisza
;kod 1z 8 na cyfre 0..7
;petla bedzie wykonana 1-8 razy
INC R2 ;wiec R2 osiagnie wartosc 0..7
RRC A ;obrót akumulatora przez C
;az odczytana 1 wsunie sie do C
JNC LOOP_NR
MOV A,R2 ;przekoduj nr klawisza
ADD A,#30H ;na kody znaków wysw. LCD
LCALL WRITE_DATA ;wypisz kod klawisza
LOOP_YES:
MOVX A,@R0 ;odczyt stanu klawiszy
CPL A
JNZ LOOP_YES ;czy klawisz zwolniony
SJMP LOOP_NO ;powrót do oczekiwania na
;nacisniecie klawisza
Adresy buforów od 0 do 7
82D1H
8381H
831CH
832EH
8349H
843FH
83D9H
844AH
Do aktywacji klaiwszy 8,9, ENTER, ESC i strzałek należy zmienić wartość linii MOV R0,#CSKB0 na
MOV R0,#CSKB1
Wartości akumulatora podczas wykonywania instrukcji RRC A przy naciśnięciu odpowiedniego klawisza:
-klawisz 1 02->01
-klawisz 2 04->02
-klawisz 3 08->04
-klawisz 5 20->10
-klawisz 7 80->40
-klawisz 0 01->00
Zadanie 5 nie zostało zrealizowane