📄 lcdroutines.asm
字号:
;------------------------------------------------------------------------------------------------------
;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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -