lcdroutines.asm

来自「The circuit is drawn for measurement of 」· 汇编 代码 · 共 120 行

ASM
120
字号
;------------------------------------------------------------------------------------------------------
;Name		:LCDRoutines
;------------------------------------------------------------------------------------------------------
.cseg
.org		SegmentLCDRoutines
;------------------------------------------------------------------------------------------------------
LCDInitialization:											;LCD Initialization
	ldi		TempRegister,_15_MSEC
	rcall	Delaymsec
	ldi		TempRegister,3
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	ldi		TempRegister,_4_1_MSEC
	rcall	Delaymsec
	ldi		TempRegister,3
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	rcall	Delay100usec
	ldi		TempRegister,3
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	ldi		TempRegister,2
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	ldi		TempRegister,0b11110000
	out		PortLCDDirection,TempRegister					;as a 4 wire interface, 2 lines,
	ldi		TempRegister,_WIRE4_LINES2_FONTS5x7				;and 5x7 fonts
	rcall	LCDCommand
	ldi		TempRegister,_DISPLAYON_CURSOROFF_BLINKOFF
	rcall	LCDCommand
	ldi		TempRegister,_ADDRESSINCREMENT_SCROLLINGNO
	rcall	LCDCommand
	ret
;------------------------------------------------------------------------------------------------------
LCDCommand:													;LCD Command subroutine
	mov		TempRegisterB,TempRegister
	rcall	WaitLCD
	ldi		TempRegister,0xFF
	out		PortLCDDirection,TempRegister
	mov		TempRegister,TempRegisterB
	mov		TempREgisterB,TempRegister
	swap	TempRegister
	andi	TempRegister,0X0F
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	mov		TempRegister,TempRegisterB
	andi	TempRegister,0x0F
	out		PortLCD,TempRegister
	sbi		PortE,PinE
	cbi		PortE,PinE
	ldi		TempRegister,0xF0
	out		PortLCDDirection,TempRegister
	ret
;------------------------------------------------------------------------------------------------------
LCDData:													;LCD Data subroutine
	mov		TempRegisterB,TempRegister
	rcall	WaitLCD
	ldi		TempRegister,0xFF
	out		PortLCDDirection,TempRegister
	mov		TempRegister,TempRegisterB
	mov		TempRegisterB,TempRegister
	swap	TempRegister
	andi	TempRegister,0x0F
	out		PortLCD,TempRegister
	sbi		PortRS,PinRs
	sbi		PortE,PinE
	cbi		PortE,PinE
	mov		TempRegister,TempRegisterB
	andi	TempRegister,0x0F
	out		PortLCD,TempRegister
	sbi		PortRS,PinRS
	sbi		PortE,PinE
	cbi		PortE,PinE
	ldi		TempRegister,0xF0
	out		PortLCDDirection,TempRegister
	ret
;------------------------------------------------------------------------------------------------------
WaitLCD:													;Wait LCD to be unbusy subroutine
	ldi		TempRegister,0xF0
	out		PortLCDDirection,TempRegister
	sbi		PortRW,PinRW
	cbi		PortRS,PinRS
WaitLCDInLoop:
	sbi		PortE,PinE
	cbi		PortE,PinE
	in		TempRegister,PINB
	sbi		PortE,PinE
	cbi		PortE,PinE
	sbrc	TempRegister,3
	rjmp	WaitLCDInLoop
	ret
;------------------------------------------------------------------------------------------------------
ClearLCD:													;Clear LCD subroutine
	ldi		TempRegister,0b00000001
	rcall	LCDCommand
	ldi		TempRegister,_15_MSEC
	rcall	Delaymsec
	ret
;------------------------------------------------------------------------------------------------------
Line1:														;LCD's line 1 subroutine
	ldi		TempRegister,_LINE1
	rcall	LCDCommand
	ret
;------------------------------------------------------------------------------------------------------
Line2:														;LCD's line 2 subroutine
	ldi		TempRegister,_LINE2
	rcall	LCDCommand
	ret
;------------------------------------------------------------------------------------------------------





⌨️ 快捷键说明

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