⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd驱动.dt

📁 此程序为液晶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 + -