?? 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 + -