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

📄 lcd.asm

📁 通过AT89C51,可以对LCD 进行读和写.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-----------------------------------
; OUTPUT 
; LCD DISPLAY CONTROL PIN,
; DATA SEND TO COMPUTER.
; CPU--89C51,RS485
;-----------------------------------
e          reg    p0.5
r/w        reg    p0.6          
rs         reg    p0.7          
d0         reg    p2.0         
d1         reg    p2.1
d2         reg    p2.2
d3         reg    p2.3
d4         reg    p2.4
d5         reg    p2.5
d6         reg    p2.6
d7         reg    p2.7
;----------------------------------                                   
; INPUT
;----------------------------------
dava       reg    p1.7
da         reg    p3.3
db         reg    p3.4
dc         reg    p3.5
dd         reg    p3.6
de         reg    p3.7
;----------------------------------
;RXD       REG    P3.0
;TXD       REG    P3.1
;-----------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;BIT 0 TO 4   FOR KEY 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;INPUT FOR KEYS
;________________________________
;Y4  |7     |8     |9      |CLR      |37BF|
;    |------------------------------
;Y3  |4     |5     |6      |UP       |26AE|
;    |------------------------------
;Y2  |1     |2     |3      |DOWN     |159D|
;    |------------------------------
;Y1  |0     |.     |#      |ENT      |048C|
;    |------------------------------
;    X1     X2     X3      X4
;----- WAIT INTO FOR DATA--------
;--------------------------------
dataph        equ    22h
datapl        equ    23h
keybuff       equ    24h
keybuffer     equ    25h
displcd       equ    26h
display       equ    27h
hexbuff       equ    28h       
bcdbuff       equ    29h
key_buff      equ    2ah
time          equ    2fh
setr          equ    35h
check         equ    3bh
flag          reg    40.0h

                 .CODE
               org    00h
               jmp    initial
               org    03h
               org    0bh     
               org    13h     
               org    1bh     
               org    23h
;------------------------------------
;------ start    progame ------------
;------------------------------------
;------------------------------------
;------ clear    internal   ram -----
;------------------------------------
               org    100h
initial:
               mov    r0,#7fh
clrramloop:    mov    @r0,#00h
               dec    r0
               cjne   r0,#1fh,clrramloop
;--------------------------------
;------ change stack point ------
;--------------------------------       
               mov    sp,#50h
;----------------------------------
;-- set timer counter mode counroll
;----------------------------------
               mov    tmod,#11h
;----------------------------------
               mov    scon,#50h
               anl    pcon,#70h
               mov    p0,#00h
               clr    r/w
;----------------------------------
;lcd   initial     
;----------------------------------
retry_init_lcd:
               lcall  INT_LCD
               ljmp   main_prog
;-----------------------------------
;--- lcd  display ------------------
;-----------------------------------
;| line1 | 80  to  8f 90  to  93 |
;| line2 | c0  to  cf d0  to  d3 | 
;---------------------;------------------;-----
ch_ram        db     'CHECK......WAIT','$'
ch_ram0       db     'OK...','$'
ch_ram1       db     'PASS TEST','$'
key_set1      db     '0123456789ABCDEF','$'


main_prog:
main:
                MOV     A,#01H
                LCALL   WRITECONTROL
                MOV     DPTR,#ch_ram
                LCALL   PRINTOUT
                MOV     A,#C0H                 ;lcd line2
                LCALL   WRITECONTROL
                MOV     DPTR,#ch_ram0
                LCALL   PRINTOUT


key0:          
                call    key_data
                MOV     A,#01H
                LCALL   WRITECONTROL
                CALL    lcd_on_cursor
                call    lcd_flash_cursor
                mov     r7,#14h               ;total  20
key0_sub:       mov     a,#80h
                LCALL   WRITECONTROL
key0_sub1:      call    key_data
                mov     a,displcd
                CALL    WRITEDATA
                djnz    r7,key0_sub1
                mov     r7,#14h
                mov     a,#c0h
                lcall   WRITECONTROL
key0_sub2:      call    key_data
                mov     a,displcd
                CALL    WRITEDATA
                djnz    r7,key0_sub2
                call    key_data
                MOV     A,#01H
                LCALL   WRITECONTROL
                MOV     DPTR,#ch_ram1
                LCALL   PRINTOUT
                jmp     key0
;------------------------------------
;-----   key   input
;-----------------------------------
key_data:
               call    key_flag
               mov     a,keybuff            
               call    convx
               mov     dptr,#key_set1
               movc    a,@a+dptr
               mov     displcd,a
               ret
;------------------------------------
;----    check  flag
;------------------------------------
key_flag:      jnb     dava,key_flag
               lcall   td_200ms
key_unhold:    jb      dava,key_unhold
               mov     a,p3
               anl     a,#f8h
               rr      a                        ;;;swap     a
               rr      a
               rr      a 
               mov     keybuff,a
               mov     r1,a
               ret
;--------------------------------------
convx:         cjne    a,#00h,con1
               mov     a,#00h
               ljmp    cone 
con1:          cjne    a,#01h,con2
               mov     a,#01h
               ljmp    cone 
con2:          cjne    a,#02h,con3
               mov     a,#02h
               ljmp    cone 
con3:          cjne    a,#03h,con4
               mov     a,#03h
               ljmp    cone 
con4:          cjne    a,#04h,con5
               mov     a,#04h
               ljmp    cone 
con5:          cjne    a,#05h,con6
               mov     a,#05h
               ljmp    cone 
con6:          cjne    a,#06h,con7
               mov     a,#06h
               ljmp    cone 
con7:          cjne    a,#07h,con8
               mov     a,#07h
               ljmp    cone 
con8:          cjne    a,#08h,con9
               mov     a,#08h
               ljmp    cone 
con9:          cjne    a,#09h,con10
               mov     a,#09h
               ljmp    cone 
con10:         cjne    a,#0ah,con11
               mov     a,#0ah
               ljmp    cone 
con11:         cjne    a,#0bh,con12
               mov     a,#0bh
               ljmp    cone 
con12:         cjne    a,#0ch,con13
               mov     a,#0ch
               ljmp    cone 
con13:         cjne    a,#0dh,con14
               mov     a,#0dh
               ljmp    cone 
con14:         cjne    a,#0eh,con15
               mov     a,#0eh
               ljmp    cone 
con15:         cjne    a,#0fh,con16
               mov     a,#0fh
               ljmp    cone
con16:         cjne    a,#10h,con17
               mov     a,#0eh
               ljmp    cone 
con17:         cjne    a,#11h,con17
               mov     a,#0fh
cone:          ret 

;*****************************************************************
;Function : initialize the lcd setting
;*****************************************************************
INT_LCD:
                CLR     e                 ;set the LCD to read mode, so we don't corrupt it
                lCALL   TDL20ms

                MOV     A,#38H
                lCALL   WRITECONTROL

                MOV     A,#38H
                lCALL   WRITECONTROL

                MOV     A,#38H
                lCALL   WRITECONTROL
                                          ;from 0FF00 to 0FF0F will address the HC573s LE
                MOV     A,#38H
                lCALL   WRITECONTROL

                MOV     A,#01h                 ;clear the display of the LCD
                lCALL   WRITECONTROL

                MOV     A,#06H                  ;entry mode setting
                lCALL   WRITECONTROL

                MOV     A,#0CH                  ;set all display on,cursor off and blink of cursor off
                lCALL   WRITECONTROL
                RET

lcd_home:      
                CLR     e                 ;set the LCD to read mode, so we don't corrupt it
                lCALL   TDL20ms
                mov     a,#80h
                lcall   WRITECONTROL
                ret
lcd_on_cursor:
                CLR     e                 ;set the LCD to read mode, so we don't corrupt it
                lCALL   TDL20ms
                mov     a,#0eh
                lcall   WRITECONTROL
                ret
lcd_flash_cursor:
                CLR     e                 ;set the LCD to read mode, so we don't corrupt it
                lCALL   TDL20ms
                mov     a,#0fh
                lcall   WRITECONTROL
                ret
lcd_line2:
                CLR     e                 ;set the LCD to read mode, so we don't corrupt it

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -