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 + -
显示快捷键?