?? lcd.asm
字號:
;*******************************
;*LCD.ASM
;*******************************
;*本程序包含控制外部液晶面板的4-BIT控制子程序。
;*這些程序是專門為演示板設計的,但它也可以作為其他類
;*型的使用KS0066U控制器的液晶面板的控制程序。
;*占用I/O RB1-RB5,RA5
;*使用RAM 2個字節
;*程序包括:
;* -INITLCD 初始化液晶面板函數
;* -PUTCLCD 將字符寫入LCD的函數
;* -SENDCMD 將命令寫入LCD的函數
;* -CLRLCD 清 LCD顯示函數
;*入口參數 WREG
;*出口參數 無
;*LCD顯示RAM地址:第一行0X80~8F;第二行0XC0~CF
;********************************************
#INCLUDE P16F877A.INC
;********************************************
;*外部函數及變量
;********************************************
EXTERN LONGDELAY,DELAY
;********************************************
;*定義LCD數據&控制I/O;可以用人意的6個普通的I/O管腳定義,實際連線依據該部分定義
;********************************************
#DEFINE LCD_DB7 PORTB,5;占用的I/O口定義
#DEFINE LCD_DB6 PORTB,4
#DEFINE LCD_DB5 PORTB,3
#DEFINE LCD_DB4 PORTB,2
#DEFINE LCD_E PORTA,5
#DEFINE LCD_RS PORTB,1
#DEFINE LCD_DB7_DIR TRISB,5
#DEFINE LCD_DB6_DIR TRISB,4
#DEFINE LCD_DB5_DIR TRISB,3
#DEFINE LCD_DB4_DIR TRISB,2
#DEFINE LCD_E_DIR TRISA,5
#DEFINE LCD_RS_DIR TRISB,1
;********************************************
;LCD模塊命令
#DEFINE DISP_ON 0X00C ;開顯示
#DEFINE DISP_ON_C 0X00E ;開顯示,開指針
#DEFINE DISP_ON_B 0X00F ;開顯示,開指針,開閃爍
#DEFINE DISP_OFF 0X008 ;關顯示
#DEFINE CLR_DISP 0X001 ;清顯示的操作數
#DEFINE ENTRY_INC 0X006 ;操作數
#DEFINE ENTRY_INC_S 0X007 ;操作數
#DEFINE ENTRY_DEC 0X004 ;操作數
#DEFINE ENTRY_DEC_S 0X005 ;操作數
#DEFINE DD_RAM_ADDR 0X080 ;初始化第一行顯示的操作數
#DEFINE DD_RAM_UL 0X0C0 ;初始化第二行顯示的操作數
;*******************************************
LCD_GROUP UDATA ;數據區
;*******************************************
LCD_TEMP RES 1
BYTE RES 1
LCD_DATA1 RES 1
;*******************************************
PROG_LCD CODE ;程序區
;*******************************************
;INITLCD---初始化LCD模塊
;*******************************************
INITLCD
GLOBAL INITLCD
BSF STATUS,RP0
BCF STATUS,RP1
BCF LCD_DB7_DIR
BCF LCD_DB6_DIR
BCF LCD_DB5_DIR
BCF LCD_DB4_DIR
BCF LCD_E_DIR
BCF LCD_RS_DIR
BCF STATUS,RP0
BCF LCD_DB7
BCF LCD_DB6
BCF LCD_DB5
BCF LCD_DB4
BCF LCD_E
BCF LCD_RS
BSF LCD_E
BCF LCD_E
BSF LCD_DB5
BSF LCD_E
BCF LCD_E
CALL LONGDELAY
MOVLW 0X28
CALL SENDCMD ;四位數據總線,兩行顯示,5X7點陣字符
MOVLW DISP_ON ;開顯示
CALL SENDCMD
MOVLW ENTRY_INC ;設置指針移動方式
CALL SENDCMD
MOVLW DD_RAM_ADDR ;設置起始地址
CALL SENDCMD
CALL CLRLCD
RETURN
;**************************************
;*PUTCLCD 將字符數據送入LCD,本程序將字符數據分成了高半字節和低半
;* 字節分別輸入,先送入的是高半字節
;**************************************
PUTCLCD
GLOBAL PUTCLCD
BSF LCD_RS ;設置為數據模式
MOVWF BYTE ;存WREG到BYTE寄存器
CALL WRITE ;寫入高半字節
SWAPF BYTE,F ;送入數據的低字節
CALL WRITE
CALL DELAY
RETURN
;***************************************
;*SENDCMD-送命令到LCD,本程序將命令數據分成了高半字節和低半字節分別輸入
;*先送入的是高半字節
;***************************************
SENDCMD
GLOBAL SENDCMD
BCF LCD_RS ;設置為送命令模式
MOVWF BYTE
CALL WRITE
SWAPF BYTE,F
CALL WRITE
CALL DELAY
RETURN
;***************************************
;*CLRLCD-清除LCD顯示
;***************************************
CLRLCD
GLOBAL CLRLCD
MOVLW CLR_DISP
CALL SENDCMD
RETURN
;***************************************
;*WRITE-送半個字節數據
;***************************************
WRITE
BCF LCD_DB7 ;清數據線
BCF LCD_DB6
BCF LCD_DB5
BCF LCD_DB4
BTFSC BYTE,7 ;因數據線提前清0,當某位為1時,把相應I/O置為1
BSF LCD_DB7 ;若為0,則測試下一位
BTFSC BYTE,6
BSF LCD_DB6
BTFSC BYTE,5
BSF LCD_DB5
BTFSC BYTE,4
BSF LCD_DB4
BSF LCD_E
BCF LCD_E
RETURN
;***************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -