lcd4bit3.asm
来自「Library for the 8051 microcontroller. s」· 汇编 代码 · 共 177 行
ASM
177 行
;-----------------------LCD 4-bit--------------------------
;LCD Connections to microcontroller
E EQU P0.4 ; PIN 6 enable
RS EQU P0.5 ; /register select
DATANE EQU P0 ; data lines P0-P3
;----------------------------------------------------------
ORG 0000H
JMP on_reset
;----------------------------------------------------------
ORG 00FFH
on_reset:
MOV DPTR,#init_data
ACALL disp_init
MOV DPTR,#message1
ACALL disp_string
ACALL disp_line2
MOV DPTR,#message2
ACALL disp_string
ENDLESS:
JMP ENDLESS
;----------------------------------------------------------
; display char in A
; used reg R2
disp_char:
SETB RS ; desable register select
MOV R2,A
ANL A,#0F0H ; send high nybble first
RR A
RR A
RR A
RR A
ANL DATANE,#0F0H
ORL DATANE,A
SETB E ; give E pulse
ACALL delay_data
CLR E
ACALL delay_data
MOV A,R2
ANL A,#0FH ; send lower nybble
ANL DATANE,#0F0H
ORL DATANE,A
SETB E ; give E pulse
ACALL delay_data
CLR E
ACALL delay_data
RET
;----------------------------------------------------------
; used registers A,R1,R7
disp_string:
MOV A,#00H
MOV R1,#00h
next_char:
INC R1
MOVC A,@A+DPTR
MOV DATANE,A
ACALL disp_char
MOV A,R0
CJNE R1,#0Fh,next_char
RET
;----------------------------------------------------------
; used registers A,R1,R7,R2
disp_init:
CLR RS ; enable /register select
MOV A,#00H
MOV R1,#00h
next_chari:
INC R1
MOVC A,@A+DPTR
MOV R2,A ; take backup
ANL A,#0F0H ; send high nybble first
RR A
RR A
RR A
RR A
ANL DATANE,#0F0H
ORL DATANE,A
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
MOV A,R2
ANL A,#0FH ; send lower nybble
ANL DATANE,#0F0H
ORL DATANE,A
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
MOV A,R0
CJNE R1,#02h,next_chari
RET
;----------------------------------------------------------
disp_line1:
CLR RS ; register select
ANL DATANE,#0F0H
ORL DATANE,#08H ; first line address
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
ANL DATANE,#0F0H ; second nybble
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
RET
;----------------------------------------------------------
disp_line2:
CLR RS ; register select
ANL DATANE,#0F0H ; next line address
ORL DATANE,#0AH
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
ANL DATANE,#0F0H ; next line address
ORL DATANE,#08H
SETB E ; give E pulse
ACALL delay_init
CLR E
ACALL delay_init
RET
;----------------------------------------------------------
;2 msec delay
delay_data:
MOV R7,#0FFH
del: NOP
NOP
DJNZ R7, del
RET
;----------------------------------------------------------
;20 msec delay
delay_init:
MOV R7,#0FFH
del1: NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7, del1
RET
;----------------------------------------------------------
message1:
DB "Testing 123.... "
message2:
DB "It's working "
init_data:
DB 0FH ; Display On, Cursor On,Cursor Blink On(1)/Off(0)
DB 01H ; Clear Display
DB 38H ; Set Interface Length
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?