📄 boardkey.asm
字号:
dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
KbdData bit P3.2
KbdClock bit INT1;P3.3
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
lcall Convcode
ret
;
Kybd_tidakLepas:
Clr C
ret
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
acall write_inst
;
write1:
clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
;======================================================
;Subrutine Konversi_ScanCode
;Pada subrutine ini digunakan untuk menerjemahkan scan code ke bentuk
;karakter
; dengan menggunakan look up table.
;======================================================
Convcode:
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
;
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
;
Init_lcd:
mov r1,#00000001b ;Display clear
acall write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
acall write_inst ;
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
acall write_inst
mov r1,#00000110b ;Entry mode, Set increment
acall write_inst
ret
;
Write_inst:
clr P3.6 ; RS = P2.0 = 0, write mode instruction
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
acall delay ; call delay time
clr P3.7 ; EN = 0 = P2.1
ret
;
Write_data:
setb P3.6 ; RS = P2.0 = 1, write mode data
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
acall delay ; call delay time
clr p3.7 ; EN = 0 = P2.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
word1: DB " Welcome Home "; here is the data to be look up
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -