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

📄 lcdproc.h

📁 EM78P153源代码,含24C02,I2C,以及1418FM发射模块控制部分!
💻 H
字号:
;===============================================
;	Function:LcdCmd(A)(B100-????,????-X)
;===============================================
LcdCmd:
		MOV		A_buff,A

		BC		SpiPort,STB
		CALL	LcdDelay

		;	BIT = 1
		BC		SpiPort,WR
		CALL	LcdDelay
		BS		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		;	BIT = 0
		BC		SpiPort,WR
		CALL	LcdDelay
		BC		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		;	BIT = 0
		BC		SpiPort,WR
		CALL	LcdDelay
		BC		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		;	Send (9 Bits)
		MOV		A,@9
		MOV		N1,A

LcdCmdLoop:
		BC		SpiPort,WR
		CALL	LcdDelay

		JBS		A_buff,7
		JMP		LcdCmdDat0

		BS		SpiPort,DAT
		JMP		LcdCmdClk
LcdCmdDat0:
		BC		SpiPort,DAT

LcdCmdClk:
		CALL	LcdDelay

		BS		SpiPort,WR
		CALL	LcdDelay

LcdCmdNext:
		RLC		A_buff
		DJZ		N1
		JMP		LcdCmdLoop

		; STB = 1
		BS		SpiPort,STB
		CALL	LcdDelay

		RET

;===============================================
;	Function:LcdWrite(A=Addr,SpiData)(101-AAAAAA,DDDD)
;===============================================
LcdWrite:
		; A_buff = Address
		MOV		A_buff,A
		BC		SpiPort,STB
		CALL	LcdDelay
		
		; DAT = 1
		BC		SpiPort,WR
		CALL	LcdDelay
		BS		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		; DAT = 0
		BC		SpiPort,WR
		CALL	LcdDelay
		BC		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		; DAT = 1
		BC		SpiPort,WR
		CALL	LcdDelay
		BS		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		;--------------------------------------
		;	Send Address(A & 0x3f)
		;--------------------------------------
		MOV		A,@6
		MOV		N1,A
LcdWrAddrLoop:
		BC		SpiPort,WR
		CALL	LcdDelay

		JBS		A_buff,5
		JMP		LcdWrAddrDat0

		BS		SpiPort,DAT
		JMP		LcdWrAddrClk

LcdWrAddrDat0:
		BC		SpiPort,DAT

LcdWrAddrClk:
		CALL	LcdDelay

		BS		SpiPort,WR
		CALL	LcdDelay

		RLC		A_buff
		DJZ		N1
		JMP		LcdWrAddrLoop

		;--------------------------------------
		;	Send Data (A & 0xf)
		;--------------------------------------
		MOV		A,SpiData
		MOV		A_buff,A

		MOV		A,@0x04
		MOV		N1,A

LcdWrtDatLoop:
		BC		SpiPort,WR
		CALL	LcdDelay

		JBS		A_buff,0
		JMP		LcdWrtDatDat0
		
		BS		SpiPort,DAT
		JMP		LcdWrtDatClk

LcdWrtDatDat0:
		BC		SpiPort,DAT

LcdWrtDatClk:
		CALL	LcdDelay

		BS		SpiPort,WR
		CALL	LcdDelay

		RRC		A_buff
		DJZ		N1
		JMP		LcdWrtDatLoop

		; STB = 1
		BS		SpiPort,STB
		CALL	LcdDelay

		RET

;===============================================
;	Function:LcdRead(A = Address)
;===============================================
LcdRead:
		; A_buff = Address
		MOV		A_buff,A

		BC		SpiPort,STB
		CALL	SpiDelay
		
		; DAT = 1
		BC		SpiPort,WR
		CALL	LcdDelay
		BS		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		; DAT = 1
		BC		SpiPort,WR
		CALL	LcdDelay
		BS		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		; DAT = 0
		BC		SpiPort,WR
		CALL	LcdDelay
		BC		SpiPort,DAT
		CALL	LcdDelay
		BS		SpiPort,WR
		CALL	LcdDelay

		;--------------------------------------
		;	Send Address(A & 0x3f)
		;--------------------------------------
		MOV		A,@6
		MOV		N1,A

LcdRdAddrLoop:
		BC		SpiPort,WR
		CALL	LcdDelay

		JBS		A_buff,5
		JMP		LcdRdAddrDat0

		BS		SpiPort,DAT
		JMP		LcdRdAddrClk

LcdRdAddrDat0:
		BC		SpiPort,DAT

LcdRdAddrClk:
		CALL	LcdDelay

		BS		SpiPort,WR
		CALL	LcdDelay

		RLC		A_buff
		DJZ		N1
		JMP		LcdRdAddrLoop

		;--------------------------------------
		;	Read Data 
		;--------------------------------------
		IOR		SpiPort
		OR		A,@OSPI_DAT
		IOW		SpiPort
		
		;	SpiData = 0
		CLR		A_buff

		MOV		A,@4
		MOV		N1,A

LcdRdDatLoop:
		BC		SpiPort,RD
		CALL	LcdDelay

		BS		SpiPort,RD
		CALL	LcdDelay

		RLC		A_buff
		BC		A_buff,0
		JBC		SpiPort,DAT
		BS		A_buff,0

		DJZ		N1
		JMP		LcdRdDatLoop
;
		IOR		SpiPort
		AND		A,@ASPI_DAT
		IOW		SpiPort

		; STB = 1
		BS		SpiPort,STB
		CALL	LcdDelay
		MOV		A,A_buff
		RET

;===============================================
;	Function:InitLcd()
;===============================================
LcdInit:
		BS		SpiPort,STB ;
		BS		SpiPort,RD  ; 1418共用
		BS		SpiPort,WR	;
		
		;	IRQ DIS
		MOV		A,@0x80
		CALL 	LcdCmd
		
		;	RC 256K
		MOV		A,@0x18
		CALL 	LcdCmd

		;	1/3 BIAS,4COMs
		MOV		A,@0x29
		CALL 	LcdCmd

		;	TONE OFF
		MOV		A,@0x08
		CALL 	LcdCmd

		;	WDT DIS
		MOV		A,@0x05
		CALL 	LcdCmd
		
		;	TIMER DIS
		MOV		A,@0x04
		CALL 	LcdCmd

		;	SYS EN
		MOV		A,@0x01
		CALL 	LcdCmd

		;	LCD ON
		MOV		A,@0x03
		CALL 	LcdCmd

		NOP
		
		RET

;===============================================
;	Function:LcdClearAll()
;===============================================
LcdClearAll:

		MOV		A,@8
		MOV		N2,A

		CLR		SpiAddr

LcdClearByte:
		;如果你要检查屏,可以修改下列数
		MOV		A,@0x00
		MOV		SpiData,A
		MOV		A,SpiAddr
		CALL	LcdWrite

		INC		SpiAddr
		DJZ		N2
		JMP		LcdClearByte

		RET

;===================================================
;	Function:LcdShowFm(L1,L2,L3,L4) Like:"0 8 7 5"
;===================================================
LcdShowFm:
		MOV		A,L1
		CALL	TblDigitChar
		OR		A,@0x08
		MOV		SpiData,A
		MOV		A,@0
		CALL	LcdWrite
		
		SWAP	SpiData
		MOV		A,@1
		CALL	LcdWrite

		MOV		A,L2
		CALL	TblDigitChar
		OR		A,@0x08
		MOV		SpiData,A
		MOV		A,@2
		CALL	LcdWrite
		
		SWAP	SpiData
		MOV		A,@3
		CALL	LcdWrite

		MOV		A,L3
		CALL	TblDigitChar
		JBC		L4,0
		OR		A,@0x08
		MOV		SpiData,A
		MOV		A,@4
		CALL	LcdWrite

		SWAP	SpiData
		MOV		A,@5
		CALL	LcdWrite
		RET

;===================================================
;	Function:LcdCleanFm()
;===================================================
LcdCleanFm:

		MOV		A,@0x08
		MOV		SpiData,A
		MOV		A,@0
		CALL	LcdWrite

		CLR		SpiData		
		MOV		A,@1
		CALL	LcdWrite
		
		MOV		A,@2
		CALL	LcdWrite
		
		MOV		A,@3
		CALL	LcdWrite

		MOV		A,@4
		CALL	LcdWrite

		MOV		A,@5
		CALL	LcdWrite

		RET
;===================================================
;	Function:LcdShowCh(A=(1-9))
;===================================================
LcdShowCh:
		CALL	TblDataIcon
		MOV		SpiData,A
		MOV		A,@6
		CALL	LcdWrite
		SWAP	SpiData
		MOV		A,@7
		CALL	LcdWrite
		RET

;===================================================
;	Function:LcdClearCh()
;===================================================
LcdClearCh:
		CLR		SpiData
		MOV		A,@6
		CALL	LcdWrite
		MOV		A,@7
		CALL	LcdWrite
		RET

;==========================================
;		END OF LCD
;==========================================

⌨️ 快捷键说明

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