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

📄 lcdviewlib.asm

📁 一个用PIC做的无线点菜系统的系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;---------------------------------------------------------------;
SHOW_INIT:														;
;1. 延时40ms													;
	Call	Delay40mS											;
																;
;2. 功能设置	: 8Bit MPU控制界面  基本指令集动作				;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00110000'							;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
;3. 再次功能设置,以保证正确	: 8Bit MPU控制界面  基本指令集动作	;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00110000'							;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
;4. 显示开关控制	: 整体显示ON   游标显示ON  游标显示反白ON	;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00001111'							;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
;5. 清除显示	: 显示为空										;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00000001'							;
	Call	WRINS												;
	Call	Delay10mS											;
																;
;6. 进入模式设定	: 游标右移,DDRAM位址计数器(AC)加1		;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00000110'							;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
;7. 显示界面1													;
	MovK	Show_Menu_No,7										;
	Call	SHOW_MENU											;
																;
;注意:  擦除某个字,在该位输入 字 A1FF							;
																;
	Return														;
;***************************************************************;


;******************LCD工作模式设置******************************;		ok - 2
;由于有些部件复用了资源,因此当使用LCD时可能需要进行一些设置	;
;同时,在不使用部件功能的非中断方式下,							;
;必须关闭中断,避免通讯过程被干扰								;
LCDMode:														;
;所需要的资源分配设置放在这里									;
;禁止中断														;
	Call	CloseINT											;
	Return														;
;***************************************************************;


;***************************************************************;		ok - 1
;根据给出的坐标得到地址											;
;  INPUT:			//SHOW_WORD_X;SHOW_WORD_X					;
;  OUTPUT:			//SHOW_WriteData,W							;
;  Return:			// 	0:正常  1:XY范围不正常					;
;---------------------------------------------------------------;
LCDConCoorS:													;
																;
;1.根据给定的X、Y地址确定位址计数器(AC)						;
;	AC=x+80H  		y=0											;
;	  =x+80H+10H	y=1											;
;	  =x+80H+8H		y=2											;
;	  =x+80H+18H	y=3											;
																;
	;判断X是否有效												;
	ClrC														;
	MovLW	8				;X从0-7								;
	SubWF	SHOW_WORD_X,W										;
	SKPNC														;
	RetLW	1													;
																;
	;无进位,表示是负的,值有效									;
	MovLW	80H				;首先将X+80H						;
	AddWF	SHOW_WORD_X,W										;
	MovWF	Show_WriteData										;
																;
	MovF	SHOW_WORD_Y,W										;
	SKPNZ														;
	Goto	SHOW_WORDY0		;Y是0								;
	DECF	SHOW_WORD_Y,F										;
	SKPNZ														;
	Goto	SHOW_WORDY1		;Y是1								;
	DECF	SHOW_WORD_Y,F										;
	SKPNZ														;
	Goto	SHOW_WORDY2		;Y是2								;
	DECF	SHOW_WORD_Y,F										;
	SKPNZ														;
	Goto	SHOW_WORDY3		;Y是3								;
	RetLW	1				;Y>3,无效返回						;
																;
SHOW_WORDY3:													;
	MovLW	8H													;
	AddWF	Show_WriteData,F									;
SHOW_WORDY1:													;
	MovLW	8H													;
	AddWF	Show_WriteData,F									;
SHOW_WORDY2:													;
	MovLW	8H													;
	AddWF	Show_WriteData,F									;
SHOW_WORDY0:													;
	RetLW	0													;
;***************************************************************;


;***************************************************************;		ok - 3
;  Function:		// 	Void SHOW_CURSOR()						;
;  Description:		// 	在规定位置显示							;
;  Calls:			// 											;
;  Called By:		// 											;
;  Table Accessed:	// 	无										;
;  Table Updated:	// 	无										;
;  Input:			// 	SHOW_WORD_X,SHOW_WORD_Y,				;
;  Output:			// 	在光标移动到规定位置					;
;  Return:			// 	0:正常  1:XY范围不正常					;
;  Others:			// 	其它说明								;
;---------------------------------------------------------------;
SHOW_CURSOR:													;
;1.根据给出的坐标得到地址										;
	Call	LCDConCoors											;
	BTFSS	STATUS,Z											;
	RetLW	1		;坐标错误									;
																;
;2.设定AC值														;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	BSF		Show_WriteData,7	;将高7位置为1					;
	Call	WRINS												;
																;
	RetLW	0													;
;***************************************************************;


;***************************************************************;		ok - 4
;  Function:		// Void SHOW_WORD( )						;
;  Description:		// 在规定位置显示规定的文字					;
;  Calls:			// 											;
;  Called By:		// 											;
;  Table Accessed:	// 无										;
;  Table Updated:	// 无										;
;  Input:			// SHOW_WORD_X,SHOW_WORD_Y,SHOW_WORD_ADDRESS;
;	从SHOW_WORD_ADDRESS位置开始的显示字符串,这个字符串以0结束	;
;	最长占用的字节数为8*2+1=17个								;
;  Output:			// 	在规定位置显示规定的文字				;
;  Return:			// 	0:正常  1:XY范围不正常					;
;  Others:			// 	其它说明								;
;---------------------------------------------------------------;
SHOW_WORD:														;
;1.设定光标暨AC值												;
	Call	SHOW_CURSOR											;
	BTFSS	STATUS,Z											;
	RetLW	1		;坐标错误									;
																;
	Call	Delay100			; 延时100us						;
																;
;2.将2*n个字节写到RAM中,n为要写的字数,							;
	MovLW	SHOW_WORD_ADDRESS		;将地址放入FSR				;
	MovWF	FSR													;
																;
SHOW_WORD_WRRAM:												;
	BSF		Show_Flag,Show_Flag_RS	;写第一个数据				;
	BCF		Show_Flag,Show_Flag_RW								;
	MovFW	INDF												;
	MovWF	Show_WriteData										;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
																;
	INCF	FSR			;因为每个字都有两个字节,写第二个数据	;
	BSF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovFW	INDF												;
	MovWF	Show_WriteData										;
	Call	WRINS												;
	Call	Delay100		; 延时100us							;
																;
																;
;3.判断是否写完?如果首地址是0,就结束,因为字符范围为A1A0-F7FF	;
	INCF	FSR													;
	MovFW	INDF												;
	SKPZ														;
	Goto	SHOW_WORD_WRRAM										;
																;
	RetLW	0													;
;***************************************************************;


;***************************************************************;	-2
;  Function:		// 	Void WRT_SHOW_WORD()					;
;  Description:		// 	将表中固定的文字,写入SHOW_WORD_ADDRESS	;
;  Calls:			// 											;
;  Called By:		// 	SHOW_MENU								;
;  Table Accessed:	// 	无										;
;  Table Updated:	// 	无										;
;  Input:			// 	Line_Word_Address,与表首地址的距离		;
;						Line_Word_Num:这一行的字的个数*2		;
;						W:地址									;
;  Output:			// 											;
;  Return:			// 											;
;  Others:			// 	其它说明								;
;---------------------------------------------------------------;
WRT_SHOW_WORD:													;
	MovWF	FSR													;
WRT_SHOW_WORD_N:												;
	MovFW	Line_Word_Address									;
	Call	Menu_Table			;获取第一个字的内容				;
	MovWF	INDF				;赋值给SHOW_WORD_ADDRESS		;
	INCF	FSR													;
	INCF	Line_Word_Address									;
	DECFSZ	Line_Word_Num,F										;
	Goto	WRT_SHOW_WORD_N										;
	Return														;
;***************************************************************;


;***************************************************************;
;  Function:		// 	Byte SHOW_MENU( )						;
;  Description:		// 	刷新界面,显示新界面					;
;  Calls:			// 											;
;  Called By:		// 											;
;  Table Accessed:	// 	无										;
;  Table Updated:	// 	无										;
;  Input:			// 	Show_Menu_No							;
;  Output:			// 	刷新界面,显示新界面					;
;  Return:			// 	0:正常  1:Show_Menu_No范围不正常		;
;  Others:			// 	其它说明								;
;---------------------------------------------------------------;
SHOW_MENU:														;
	;清除显示	: 显示为空										;
	BCF		Show_Flag,Show_Flag_RS								;
	BCF		Show_Flag,Show_Flag_RW								;
	MovK	Show_WriteData,B'00000001'							;
	Call	WRINS												;
	Call	Delay10mS											;
																;
	;判断是哪个界面												;
	INCF	Show_Menu_No,W										;
	;界面显示													;
	Goto	Show_Menu_Run										;
																;
	RetLW	1			;数值不符,返回1							;
																;
;显示界面1:														;
SHOW_MENU_NO1:													;
																;
	;第二行第三个字开始显示"欢迎使用"							;
	LCDShowLine	2,1,MENU1-LINE1,8								;
	;第三行第二个字开始显示"威力点菜系统"						;
	LCDShowLine	1,2,MENU1-LINE2,12								;
																;
	RetLW	0			;返回									;
																;
;显示界面2:														;
SHOW_MENU_NO2:													;
																;
	;第一行第一个字开始显示"请输入:"							;
	LCDShowLine	0,0,MENU2_LINE1,8								;
	;第二行第二个字开始显示"桌号:"								;
	LCDShowLine	1,1,MENU2_LINE2,6								;
	;第三行第二个字开始显示"工号:"								;
	LCDShowLine	1,2,MENU2_LINE3,6								;
	;第四行第二个字开始显示"人数:"								;
	LCDShowLine	1,3,MENU2_LINE4,6								;
																;
	MovK	SHOW_WORD_X,4	;移动游标到“桌号”后					;
	MovK	SHOW_WORD_Y,1										;
	Call	SHOW_CURSOR											;
																;
	RetLW	0			;返回									;
																;
;显示界面3:														;
SHOW_MENU_NO3:													;
																;
	;第一行第一个字开始显示"请输入:"							;
	LCDShowLine	0,0,MENU3_LINE1,8								;
	;第二行第二个字开始显示"桌号:"								;
	LCDShowLine	1,1,MENU3_LINE2,6								;
	;第三行第二个字开始显示"菜号:"								;
	LCDShowLine	1,2,MENU3_LINE3,6								;
	;第四行第二个字开始显示"数量:"								;
	LCDShowLine	1,3,MENU3_LINE4,6								;
																;
	MovK	SHOW_WORD_X,4	;移动游标到“菜号”后					;
	MovK	SHOW_WORD_Y,2										;
	Call	SHOW_CURSOR											;
																;
	RetLW	0			;返回									;
																;
;显示界面4:														;
SHOW_MENU_NO4:													;
																;
	;第一行第三个字开始显示"核对菜单"							;
	LCDShowLine	2,0,MENU4_LINE1,8								;
																;
	RetLW	0			;返回									;
																;
;显示界面5:														;
SHOW_MENU_NO5:													;
																;
	;第二行第三个字开始显示"发送成功"							;
	LCDShowLine	2,1,MENU5_LINE1,8								;
	;第三行第四个字开始显示"OK"									;
	LCDShowLine	3,2,MENU5_LINE2,4								;
																;
	RetLW	0			;返回									;
																;
;显示界面6:														;
SHOW_MENU_NO6:													;
																;
	;第二行第三个字开始显示"发送失败"							;
	LCDShowLine	2,1,MENU6_LINE1,8								;
	;第三行第二个字开始显示"是否重新发送"						;
	LCDShowLine	1,2,MENU6_LINE2,12								;
	RetLW	0			;返回									;
																;
;显示界面7:														;
SHOW_MENU_NO7:													;
	;第二行第二个字开始显示"正在下载菜单"						;
	LCDShowLine	1,1,MENU7_LINE1,12								;
	;第三行第三个字开始显示"请等待..."							;
	LCDShowLine	2,2,MENU7_LINE2,8								;
																;
	RetLW	0			;返回									;
;***************************************************************;

⌨️ 快捷键说明

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