📄 lcd.asm
字号:
;-----------------------------------
; 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 + -