⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.asm

📁 基于16F877A的路灯控制系统的设计
💻 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 + -