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