INTERFACE KEYBOARD DENGAN MIKROKONTROLER
;Listing program berikut merupakan interface keyboard dengan mikrokontroler
;dengan output pada layar LCD character, mikrokontroler akan mendeteksi data
;serial dari keyboard dan mengeluarkan pada layar LCD character pada address 80h
;
dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
KbdData bit P3.3
KbdClock bit INT0;P3.2
DataKeyboard equ 30h
;
org 0h
nop
Acall init_LCD
;
Forever:
JB KbdClock,$
acall ambilKeyboard
jnc Forever
acall LCD_Out
clr C
sjmp Forever
;
;=========================================================
;Subrutine AmbilKeyboard
;Subrutine berikut berfungsi untuk mendeteksi apakah keyboard sedang ditekan atau
; dilepas. Bila tombol tidak dilepas maka akan menuju pada subrutine Kybd_tidakLepas
; dan memberi tanda pada bit C = 0 sehingga bila C = 0 maka data tidak akan dicetak
;Bila tombol keyboard dilepas maka data scan code diambil dan dikonversi ke dengan
; dengan menggunakan look up table serta menandai bit C = 1
;=========================================================
AmbilKeyboard:
acall ambil_scancode
cjne a,#0F0h,kybd_tidakLepas
JB KbdClock,$
acall ambil_Scancode
Setb C
Acall Konversi_Scancode
ret
;
Kybd_tidakLepas:
Clr C
ret
;
;===========================================================
;Subrutine Konversi_ScanCode
;Pada subrutine ini digunakan untuk menerjemahkan scan code ke bentuk karakter
; dengan menggunakan look up table.
;===========================================================
Konversi_ScanCode:
Mov DPTR,#TableKeyboard
movc A,@A+DPTR
mov DataKeyboard,A
ret
;
LCD_Out:
mov R7, #80h
acall write_inst
mov R7,DataKeyboard
acall write_data
ret
;
init_lcd:
mov R7,#dispclr
acall write_inst
mov R7,#funcset
acall write_inst
mov R7,#dispon
acall write_inst
mov R7,#entrmod
acall write_inst
ret
;
Ambil_scanCode:
clr A
Jnb KbdClock,$
mov R0,#08h
Ambil_ScanCode2:
Jb KbdClock,$
Mov C,KbdData
Rr A
mov acc.7,C
Jnb KbdClock,$
Djnz R0,Ambil_ScanCode2
Jb KbdClock,$
Jnb KbdClock,$
Jb KbdClock,$
Jnb KbdClock,$
ret
;
Write_inst:
Clr P3.6 ; RS = P1.0 = 0, mode tulis instruksi ke LCD
Mov P0,R7 ; D7 s/d D0 = P0 = R1
Setb P3.7 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr P3.7 ; EN = 0 = P1.1
ret
;
Write_data:
Setb P3.6 ; RS = P1.0 = 1, mode tulis data ke LCD
Mov P0,R7 ; D7 s/d D0 = P0 = R1
Setb P3.7 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr p3.7 ; EN = 0 = P1.1
ret
;
delay: mov R5,#0
delay1:mov R4,#02fh
djnz R4,$
djnz R5,delay1
ret
;
TableKeyboard:
DB 00
DB 0F9H
DB 00
DB 0F5H,0F3H,0F1H,0F2H,0FCH
DB 00H
DB 0FAH,0F8H,0F6H,0F4H
DB 0C0H
DB '~'
DB 00H
DB 00H
DB 0C1H
DB 0C2H
DB 00H
DB 0C3H
DB 'Q1'
DB 00H,00H,00H
DB 'ZSAW2'
DB 00H,00H
DB 'CXDE43'
DB 00H,00H
DB ' VFTR5'
DB 00H,00H
DB 'NBHGY6'
DB 00H,00H,00H
DB 'MJU78'
DB 00H,00H
DB ',KIO09'
DB 00H,00H
DB './L;P-'
DB 00H,00H,00H
DB 27H
DB 00H
DB '[='
DB 00H,00H
DB 0C5H
DB 0C6H
DB 0AH
DB ']'
DB 00H
DB '\'
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 08H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0DH
DB 00H
DB 0FBH
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0F7H
end
No comments:
Post a Comment