📄 lcdviewlib.asm
字号:
;---------------------------------------------------------------;
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 + -