⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boardkey.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 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 + -