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

📄 lcdviewlib.asm

📁 一个用PIC做的无线点菜系统的系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;---------------LCD点阵驱动模块---------------------
;LCD点阵显示屏驱动,适用于LG128645(ST7920控制器)
;使用三条总线,采用非中断方式工作
;模块提供了如下底层驱动子程序
;0.	Void	LCDMODE()	:设置LCD工作模式
;1.	Void	SHOW_INIT()	;初始化LCD
;2.	Void	WRBYTE(Byte ByteNum,Byte ShowRam)	;向LCD写入一个字节
;3.	Void	WRINS(Byte Show_flag)				;向LCD写入指令
;使用的全局变量
meNo		EQU				;遥控器号
;LCD点阵底层驱动程序使用的常量及变量定义
;*************LCD 常量定义***********************
;*************端口设置*****************************
Show_PORT	EQU		PORTB
	Show_CS		EQU		00H
	Show_SID  	EQU 	01H
	Show_SCLK 	EQU 	02H


;***************模块级变量***********************
;模块内部使用,与任何其他模块无关
;用于读取和写入时的标志
Show_Flag		EQU
; 0:RS		
	Show_Flag_RS	EQU	0
; 1:RW
	Show_Flag_RW	EQU	1
; 2:BF	忙碌标志 1,忙碌;0,空闲
	Show_Flag_BF	EQU	2		


Show_WriteData		EQU 		;实际向LCD发送的数据
Line_Word_Num		EQU			;显示菜单时这一行的字个数*2
Line_Word_Address	EQU			;显示菜单时这一行的首字与第一个字的偏移量
;用于向显示屏写一个字节的变量
ByteNum			EQU				;发送位数,
ShowRam			EQU				;输入需要发送的数据


;**************各底层驱动子程序使用的局部变量***************
;0.	Void	LCDMODE()	:设置LCD工作模式
;1.	Void	SHOW_INIT()	;初始化LCD
;2.	Void	WRBYTE(Byte ByteNum,Byte ShowRam)	;向LCD写入一个字节
;3.	Void	WRINS(Byte Show_flag)				;向LCD写入指令


;包含对Com通讯的上层驱动,适用于RS232及无线通讯
;包含的上层驱动子程序
;1.	Byte	LCDConCoorS(Byte SHOW_WORD_X,Byte SHOW_WORD_Y)	;根据给出的坐标得到地址
;2.	Byte	SHOW_CURSOR(Byte SHOW_WORD_X,Byte SHOW_WORD_Y)	;在指定位置显示光标
;						正确返回0,错误返回1
;3.	Byte	SHOW_WORD(Byte SHOW_WORD_X,Byte SHOW_WORD_Y, Byte SHOW_WORD_ADDRESS)
;						在指定的行列位置显示SHOW_WORD_ADDRESS中的串,00H结尾
;4.	Void	WRT_SHOW_WORD(Byte Line_Word_Address,Byte Line_Word_Num)
;						将表中固定的文字,写入SHOW_WORD_ADDRESS
;5.	Void	SHOW_MENU(Byte Show_Menu_No);显示固定的窗体

;************定义常量**********************

;************上层驱动子程序与应用层接口变量********
Show_Menu_No		EQU		;指定当前显示窗体(1~7)
SHOW_WORD_X			EQU		;X坐标(0~7)
SHOW_WORD_Y			EQU		;Y坐标(0~3)
SHOW_WORD_ADDRESS	EQU		;显示缓存(00H标志结束,共17字节)

;************上层驱动子程序局部变量********
;无

;************其他子程序*************************
;1.	Void	ERR()	运行日志,错误纪录
;2.	Void	DelayLib.asm DELY8()	延时子程序,延时8指令周期
;3.	Void	DelayLib.asm Delay100()	延时子程序,延时100指令周期
;4.	Void	DelayLib.asm Delay10mS()延时子程序


;***************************************************************;
;显示表中一行的宏												;
;X:横坐标;Y:纵坐标											;
;TableLabel:字符串标号											;
;TableLen:	字符串长度											;
LCDShowLine	Macro	X,Y,TableLabel,TableLen						;
																;
	MovK	SHOW_WORD_X,X										;
	MovK	SHOW_WORD_Y,Y										;
																;
	MovK	Line_Word_Address,TableLabel - MENU1_LINE1			;
	MovK	Line_Word_Num,TableLen								;
	MovLW	SHOW_WORD_ADDRESS	;将地址放入W					;
	Call	WRT_SHOW_WORD										;
																;
	ClrF	INDF		;结束标志"0"							;
	Call	SHOW_WORD											;
Endm															;
;***************************************************************;



ORG		005H
;*************************case菜单情况表************************;		ok - 1
Show_Menu_Run:													;
	AddWF	PCL,F												;
	Goto	SHOW_MENU_NO1										;
	Goto	SHOW_MENU_NO2										;
	Goto	SHOW_MENU_NO3										;
	Goto	SHOW_MENU_NO4										;
	Goto	SHOW_MENU_NO5										;
	Goto	SHOW_MENU_NO6										;
	Goto	SHOW_MENU_NO7										;
	RetLW	1													;
;***************************************************************;

;***************************************************************;		ok - 1
;将菜单显示的表													;
Menu_Table:														;
	AddWF	PCL,F												;
MENU1_LINE1:													;
	RetLW	0BBH			;欢									;
	RetLW	0B6H												;
	RetLW	0D3H			;迎									;
	RetLW	0ADH												;
	RetLW	0CAH			;使									;
	RetLW	0B9H												;
	RetLW	0D3H			;用									;
	RetLW	0C3H												;
MENU1_LINE2:													;
	RetLW	0CDH			;威									;
	RetLW	0FEH												;
	RetLW	0C1H			;力									;
	RetLW	0A6H												;
	RetLW	0B5H			;点									;
	RetLW	0E3H												;
	RetLW	0B2H			;菜									;
	RetLW	0CBH												;
	RetLW	0CFH			;系									;
	RetLW	0B5H												;
	RetLW	0CDH			;统									;
	RetLW	0B3H												;
MENU2_LINE1:													;
MENU3_LINE1:													;
	RetLW	0C7H			;请									;
	RetLW	0EBH												;
	RetLW	0CAH			;输									;
	RetLW	0E4H												;
	RetLW	0C8H			;入									;
	RetLW	0EBH												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU2_LINE2:													;
MENU3_LINE2:													;
	RetLW	0D7H			;桌									;
	RetLW	0C0H												;
	RetLW	0BAH			;号									;
	RetLW	0C5H												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU2_LINE3:													;
	RetLW	0B9H			;工									;
	RetLW	0A4H												;
	RetLW	0BAH			;号									;
	RetLW	0C5H												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU2_LINE4:													;
	RetLW	0C8H			;人									;
	RetLW	0CBH												;
	RetLW	0CAH			;数									;
	RetLW	0FDH												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU3_LINE3:													;
	RetLW	0B2H			;菜									;
	RetLW	0CBH												;
	RetLW	0BAH			;号									;
	RetLW	0C5H												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU3_LINE4:													;
	RetLW	0CAH			;数									;
	RetLW	0FDH												;
	RetLW	0C1H			;量									;
	RetLW	0BFH												;
	RetLW	0A3H			;:									;
	RetLW	0BAH												;
MENU4_LINE1:													;
	RetLW	0BAH			;核									;
	RetLW	0CBH												;
	RetLW	0B6H			;对									;
	RetLW	0D4H												;
	RetLW	0B2H			;菜									;
	RetLW	0CBH												;
	RetLW	0B5H			;单									;
	RetLW	0A5H												;
MENU5_LINE1:													;
	RetLW	0B7H			;发									;
	RetLW	0A2H												;
	RetLW	0CBH			;送									;
	RetLW	0CDH												;
	RetLW	0B3H			;成									;
	RetLW	0C9H												;
	RetLW	0B9H			;功									;
	RetLW	0A6H												;
MENU5_LINE2:													;
	RetLW	0A3H			;O									;
	RetLW	0CFH												;
	RetLW	0A3H			;K									;
	RetLW	0CBH												;
MENU6_LINE1:													;
	RetLW	0B7H			;发									;
	RetLW	0A2H												;
	RetLW	0CBH			;送									;
	RetLW	0CDH												;
	RetLW	0CAH			;失									;
	RetLW	0A7H												;
	RetLW	0B0H			;败									;
	RetLW	0DCH												;
MENU6_LINE2:													;
	RetLW	0CAH			;是									;
	RetLW	0C7H												;
	RetLW	0B7H			;否									;
	RetLW	0F1H												;
	RetLW	0D6H			;重									;
	RetLW	0D8H												;
	RetLW	0D0H			;新									;
	RetLW	0C2H												;
	RetLW	0B7H			;发									;
	RetLW	0A2H												;
	RetLW	0CBH			;送									;
	RetLW	0CDH												;
MENU7_LINE1:													;
	RetLW	0D5H			;正									;
	RetLW	0FDH												;
	RetLW	0D4H			;在									;
	RetLW	0DAH												;
	RetLW	0CFH			;下									;
	RetLW	0C2H												;
	RetLW	0D4H			;载									;
	RetLW	0D8H												;
	RetLW	0B2H			;菜									;
	RetLW	0CBH												;
	RetLW	0B5H			;单									;
	RetLW	0A5H												;
MENU7_LINE2:													;
	RetLW	0C7H			;请									;
	RetLW	0EBH												;
	RetLW	0B5H			;等									;
	RetLW	0C8H												;
	RetLW	0B4H			;待									;
	RetLW	0FDH												;
	RetLW	0A1H			;...								;
	RetLW	0ADH												;
;***************************************************************;


;/**************************************************************;		ok - 1
;  Function:		// 	Void WRBYTE( )							;
;  Description:		// 	向LCD写入一个字节						;
;  Calls:			// 	无										;
;  Called By:		// 	WRINS									;
;  Table Accessed: 	// 	无										;
;  Table Updated:  	// 	无										;
;  Input:		  	// 	ByteNum 发送位数,						;
;					//	ShowRam 输入需要发送的数据(1Byte		;
;  Output:		 	// 	完成向显示器发送一个字节的命令			;
;  Return:		 	// 	无										;
;  Others:		 	// 	其它说明								;
;---------------------------------------------------------------;
WRBYTE:															;
	BCF		Show_PORT,Show_SID		;都先清零					;
	BCF		Show_PORT,Show_SCLK									;
WRBYTE_NEXTBIT:													;
	BCF		Show_PORT,Show_SID		;判断这一位是否为1			;
	RLF		ShowRam,F											;
	SKPNC							;无进位则跳					;
	BSF		Show_PORT,Show_SID									;
	BSF		Show_PORT,Show_SCLK									;
	BCF		Show_PORT,Show_SCLK									;
	DECFSZ	ByteNum,F											;
	Goto	WRBYTE_NEXTBIT										;
	Return														;
;***************************************************************;


;/**************************************************************;		ok - 2
;  Function:	   	// 	Void WRINS( )							;
;  Description:		// 	向LCD写入指令							;
;  Calls:		  	// 	无										;
;  Called By:	  	// 											;
;  Table Accessed: 	// 	无										;
;  Table Updated:  	// 	无										;
;  Input:		  	// 	Show_WriteData  Show_Flag				;
;  Output:			// 	完成显示器的指令和数据的写入			;
;  Return:			// 	无										;
;  Others:			// 	其它说明								;
;---------------------------------------------------------------;
WRINS:															;
	BSF		Show_PORT,Show_CS	;选通芯片						;
																;
	MovK	ByteNum,08H		;发送第一个字节的初值				;
	MovK	ShowRam,0F8H										;
	BTFSC	Show_Flag,Show_Flag_RW	;确定RW值					;
	BSF		ShowRam,2											;
	BTFSC	Show_Flag,Show_Flag_RS	;确定RS值					;
	BSF		ShowRam,1											;
	Call	WRBYTE												;
																;
	MovK	ByteNum,08H		;发送第二个字节的初值				;
	MovFW	Show_WriteData										;
	AndLW	0F0H												;
	MovWF	ShowRam												;
	Call	WRBYTE												;
																;
	MovK	ByteNum,08H		;发送第三个字节的初值				;
	MovFW	Show_WriteData										;
	AndLW	0FH													;
	MovWF	ShowRam												;
	SwapF	ShowRam												;
	Call	WRBYTE												;
																;
	BCF		Show_PORT,Show_CS									;
																;
	Call	DELY8			;延时								;
	Return														;
;***************************************************************;


;***************************************************************;		ok - 3
;  Function:		// 	Void SHOW_INIT( )						;
;  Description:		// 	显示器初始化							;
;  Calls:			// 											;
;  Called By:		// 											;
;  Table Accessed:	// 	无										;
;  Table Updated:	// 	无										;
;  Input:			// 	无										;
;  Output:			// 	完成显示器的初始化						;
;  Return:			// 	无										;
;  Others:			// 	其它说明								;

⌨️ 快捷键说明

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