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