📄 lcd驱动.dt
字号:
ORG 0X00 ;MCU HARDWARE START
NOP
JMP start
;Interrupt Vector Interrupt Status
ORG 0003H ;TCC overflow interrupt.
; BC p7,0
PAGE 0
JMP TCCinterrupt
ORG 0006H ;External interrupt P5.4/INT0 pin (RCC)
PAGE 0
JMP EXTERNALINTERRUPT
NOP
;ORG 0009H ;External interrupt P5.5/INT1 pin
; NOP
; NOP
; jmp $
ORG 000CH ;Counter 1 underflow interrupt
PAGE 0
JMP Counter1interrupt ;BELL
ORG 000FH ;Counter 2 underflow interrupt
PAGE 0
JMP Counter2interrupt ;CLOCK
;ORG 0012H ;High-pulse width timer underflow interrupt
; RETI
;ORG 0015H ;Low-pulse width timer underflow interrupt
; RETI
;ORG 0018H ;Port 6, Port 8 input status change wake-up
; RETI
;ORG 001BH ;Low voltage detector
; RETI
ORG 0X11;20 ;INT ADDESS (ALL INT WILL WORK HERE)
INCLUDE "INIT.dt"
start:
BS p8,0 ;E
BC p8,1 ;r/w
BC p8,2 ;rs
;============================================================
; MEMBORY FREQANCE PRESET
;============================================================
RAMPRESET:
RADIOFREQPRESET:
FCALL HARDWARESETTING
;----------------------------------------------
; CALL ALL THE COMMON RAM TO ZERO
;----------------------------------------------
FCALL RAMCLR
;################################################################
; LIGHT ALL LcD (USE AT START)
;################################################################
CALL LCDmodelINIT
CALL LcdDispSP ;let lcd disp "'"
MOV a,@00110000b
IOW p6
disi
bc rd,0 ;to lo speed
BEGIN:
countValGet:
BS p6,3 ;rdclk
BC p6,6 ;am,fm 0=FM 1=AM
JBC p6,5 ;c2m
JMP countValGetE
MOVM temploop,@14
CLR temp0
CLR temp1
countValGet1:
BC status,c
JBC p6,4 ;sdata
BS status,c
rrc temp1
rrc temp0
BC p6,3 ;rdclk
JMP $+1
BS p6,3 ;rdclk
DJZ temploop
JMP countValGet1
rrc temp1
rrc temp0
rrc temp1
rrc temp0
countValGetE:
MOVM LCD_ADDESS,@0
swapa temp1
CALL LCDdispNumber
INC LCD_ADDESS
MOV a,temp1
CALL LCDdispNumber
INC LCD_ADDESS
swapa temp0
CALL LCDdispNumber
INC LCD_ADDESS
MOV a,temp0
CALL LCDdispNumber
jmp begin
;------------------------------------
LcdDispSP: ;disp 64 "-"
BANK 0
MOVM LCD_ADDESS,@0x00
LcdDispSP1:
MOV A,@0x60
CALL LCDdisp
INC LCD_ADDESS
CMPM LCD_ADDESS,@64
JMP LcdDispSP1
MOVM LCD_ADDESS,@0x00
RET
;------------------------------------
LCDdisp:
BANK 0
MOV TEMPLOOP,A
BC P8,1
BC P8,2
CALL LcdDispAddessCel
MOV P7,A
BS P7,7
CALL LcdCEsend
BS P8,2
MOVM P7,TEMPLOOP
CALL LcdCEsend
RET
;------------------------------------
LCDdispNumber:
BANK 0
AND a,@00001111b ;only low nibble can disp
MOV TEMPLOOP,A
BC P8,1
BC P8,2
CALL LcdDispAddessCel
MOV P7,A
BS P7,7
CALL LcdCEsend
BS P8,2
MOV a,@0x30
ADD temploop,a
SBG temploop,@0x39
JMP LCDDISPa
MOV a,@7
ADD temploop,a
LCDDISPa:
MOVM P7,TEMPLOOP
CALL LcdCEsend
RET
line_val EQU @20
LcdDispAddessCel:
BANK 0
;to set the addess be the line (line number is between 0-79
SBGE LCD_ADDESS,@line_val ;if line number is below 20 no need to change
JMP LCDDISP1
SBGE LCD_ADDESS,@40 ;if line number is between 20-40 add 0x2c
JMP LCDDISP2
SBGE LCD_ADDESS,@60 ;if line number is between 40-60 sub ox14 (20)
JMP LCDDISP3
SBGE LCD_ADDESS,@80 ;if line number is between 60-80 add 0x18
JMP LCDDISP4
LCDDISP4: ;if line number is between 60-80 add 0x18
MOV A,@0X18
ADD A,LCD_ADDESS
JMP LCDDISP0
LCDDISP3: ;if line number is between 40-60 sub ox14 (20)
MOV A,@0XEC
ADD A,LCD_ADDESS
JMP LCDDISP0
LCDDISP2: ;if line number is between 20-40 add 0x2c
MOV A,@0X2C
ADD A,LCD_ADDESS
JMP LCDDISP0
LCDDISP1: ;if line number is below 20 no need to change
MOV A,LCD_ADDESS
LCDDISP0:
RET
;------------------------------
LcdCEsend:
CALL delayLL
BC p8,0 ;lcd CE
CALL delayLL
BS p8,0 ;lcd CE
RET
;------------------------------
delayLL:
BANK 0
MOVM delay_temp,@0x10
delayLL1:
JMP $+1
DJZ delay_temp
JMP delayLL1
RET
;------------------------------
LCDmodelINIT:
BS p8,0 ;E
BC p8,1 ;r/w
BC p8,2 ;rs
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
BC p8,0
CALL delayLL
BS p8,0
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
CALL delayLL
MOVM p7,@00111000b
CALL LcdCEsend
MOVM p7,@00001110b
CALL LcdCEsend
MOVM p7,@00000110b
CALL LcdCEsend
MOVM p7,@00000001b
CALL LcdCEsend
CALL delayLL1
CALL delayLL1
CALL delayLL1
CALL delayLL1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -