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

📄 主程序1.asm

📁 液晶显示程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        RS      EQU P2.2  ;RS
        RW      EQU P2.3  ;R/W
        E       EQU P2.4  ;E
        PSB     EQU P2.5  ;CS
        RST     EQU P2.6  ;RET
;-----------------------------------------------
        LCD_X   EQU 30H
        LCD_Y   EQU 31H
        COUNT   EQU 32H
        COUNT1  EQU 33H
        COUNT2  EQU 34H
        COUNT3  EQU 35H
;-----------------------------------------------
        LCD_DATA  EQU 36H
        LCD_DATA1 EQU 37H
        LCD_DATA2 EQU 38H
        STORE     EQU 39H

;-----------------------------------------------
        ORG       0000H
        LJMP      MAIN
        ORG       0100H
;-----------------------------------------------
MAIN:
        MOV      SP,#5FH
        CLR      RST ;复位
        LCALL    DELAY4
        SETB     RST
        NOP
        SETB     PSB ;通讯方式为8位数据并口

;********************初始化**********************
LGS0:
        MOV      A,#34H ;34H--扩充指令操作
        LCALL    SEND_I
        MOV      A,#30H ;30H--基本指令操作
        LCALL    SEND_I
        MOV      A,#01H ;清除显示
        LCALL    SEND_I
        MOV      A,#06H ;指定在资料写入或读取时,光标的移动方向
        LCALL    SEND_I ;DDRAM 的地址计数器(AC)加1
        MOV      A,#0CH ;开显示,关光标,不闪烁
        LCALL    SEND_I
;===============================================
TU_PLAY1:
        MOV      DPTR,#TU_TAB1 ;显示图形
        LCALL    PHO_DISP
        LCALL    DELAY3

;=================================================
;;显示汉字和字符
;加入80ms的延时,使你能够看清楚显示的过程
;根据汉字显示坐标分段写入(顺序写入)
;=================================================
HAN_WR2:
       LCALL    CLEAR_P
HAN_WR2A:
       MOV      DPTR,#TAB1A   ;显示汉字和字符
       MOV      COUNT,#10H    ;地址计数器设为16。
       MOV      A,#80H        ;第一行起始地址
       LCALL    SEND_I
       LCALL    QUSHU
HAN_WR2B:
       MOV      DPTR,#TAB1B   ;显示汉字和字符
       MOV      COUNT,#10H    ;地址计数器设为16。
       MOV      A,#90H        ;第二行起始地址
       LCALL    SEND_I
       LCALL    QUSHU
HAN_WR2C:
       MOV      DPTR,#TAB1C   ;显示汉字和字符
       MOV      COUNT,#10H    ;地址计数器设为16。
       MOV      A,#88H        ;第三行起始地址
       LCALL    SEND_I
       LCALL    QUSHU
HAN_WR2D:
       MOV      DPTR,#TAB1D   ;显示汉字和字符
       MOV      COUNT,#10H    ;地址计数器设为16。
       MOV      A,#98H        ;第四行起始地址
       LCALL    SEND_I
       LCALL    QUSHU
       LCALL    DELAY3
       LCALL    FLASH
       LCALL    CLEAR_P
       JMP      TU_PLAY2
;----------------------------------------------
;TU_PLAY1:
       MOV      DPTR,#TU_TAB1 ;显示图形
       LCALL    PHO_DISP
       LCALL    DELAY3

;----------------------------------------------
TU_PLAY2:
       MOV      DPTR,#TU_TAB2 ;显示图形
       LCALL    PHO_DISP
       LCALL    DELAY3

;----------------------------------------------
TU_PLAY3:
       MOV      DPTR,#TU_TAB4 ;显示图形
       LCALL    PHO_DISP
       LCALL    DELAY3

;-----------------------------------------------
;显示点阵
;-----------------------------------------------
LATPLAY1:
       MOV      A,#01H ;清屏
       LCALL    SEND_I
       MOV      LCD_DATA1,#0CCH ;显示点阵
       MOV      LCD_DATA2,#0CCH
       LCALL    LAT_DISP
       LCALL    DELAY3
       LCALL    CLEAR_P

KU_PLAY2:
       LJMP     TU_PLAY1

;===============================================
;全屏显示图形子程序
;===============================================
PHO_DISP:
       MOV      COUNT3,#02H
       MOV      LCD_X,#80H
PHO_DISP1:
       MOV      LCD_Y,#80H
       MOV      COUNT2,#20H
PHO_DISP2:
       MOV      COUNT1,#10H
       LCALL    WR_ZB
PHO_DISP3:
       CLR      A
       MOVC     A,@A+DPTR
       LCALL    SEND_D
       INC      DPTR
       DJNZ     COUNT1,PHO_DISP3
       INC      LCD_Y
       DJNZ     COUNT2,PHO_DISP2
       MOV      LCD_X,#88H
       DJNZ     COUNT3,PHO_DISP1

       MOV      A,#36H
       LCALL    SEND_I
       MOV      A,#30H
       LCALL    SEND_I
       RET
;----------------------------------------------
CLRRAM:
       MOV      LCD_DATA1,#00H ;GDRAM写0子程序
       MOV      LCD_DATA2,#00H
       LCALL    LAT_DISP
       RET
;==============================================
;显示点阵子程序
;==============================================
LAT_DISP:
       MOV      COUNT3,#02H
       MOV      LCD_X,#80H
LAT_DISP1:
       MOV      LCD_Y,#80H
       CLR      F0
       MOV      COUNT2,#20H
LAT_DISP2:
       MOV      COUNT1,#10H
       LCALL    WR_ZB
LAT_DISP3:
      JB        F0,LAT_DISP32
      MOV       LCD_DATA,LCD_DATA1
      AJMP      LAT_DISP31
LAT_DISP32:
      MOV       LCD_DATA,LCD_DATA2
LAT_DISP31:
      MOV       A,LCD_DATA
      LCALL     SEND_D
      DJNZ      COUNT1,LAT_DISP31
      INC       LCD_Y
      CPL       F0
      DJNZ      COUNT2,LAT_DISP2
      MOV       LCD_X,#88H
      DJNZ      COUNT3,LAT_DISP1

      MOV       A,#36H
      LCALL     SEND_I
      MOV       A,#30H
      LCALL     SEND_I
      RET
;---------------------------------------------
WR_ZB:
      MOV       A,#34H
      LCALL     SEND_I
      MOV       A,LCD_Y
      LCALL     SEND_I
      MOV       A,LCD_X
      LCALL     SEND_I
      MOV       A,#30H
      LCALL     SEND_I
      RET
;===============================================
FLASH:
      MOV       A,#08H ;关闭显示
      LCALL     SEND_I
      LCALL     DELAY5
      MOV       A,#0CH ;开显示,关光标,不闪烁
      LCALL     SEND_I
      LCALL     DELAY5
      MOV       A,#08H ;关闭显示
      LCALL     SEND_I
      LCALL     DELAY5
      MOV       A,#0CH ;开显示,关光标,不闪烁
      LCALL     SEND_I
      LCALL     DELAY5
      MOV       A,#08H ;关闭显示
      LCALL     SEND_I
      LCALL     DELAY5
      RET
;==================================================
;清屏
;==================================================
CLEAR_P:
      MOV       A,#01H ;清屏
      LCALL     SEND_I
      MOV       A,#34H
      LCALL     SEND_I
      MOV       A,#30H
      LCALL     SEND_I
      RET
;==================================================
;查表取数据送显示
;==================================================
QUSHU:
      CLR       A
      MOVC      A,@A+DPTR ;查表取数据
      LCALL     SEND_D    ;送显示
      INC       DPTR
      LCALL     DELAY4    ;延时80ms,
      DJNZ      COUNT,QUSHU
      RET
;===============================================
;写数据子程序
;RS=1,RW=0,E=高脉冲,D0-D7=数据
;===============================================
SEND_D:
      LCALL     CHK_BUSY ;写数据子程序
      SETB      RS
      CLR       RW
      MOV       P0,A
      SETB      E    
      NOP
      NOP
      CLR       E
      RET
;===============================================
;写指令子程序
;RS=0,RW=0,E=高脉冲,D0-D7=指令码
;===============================================
SEND_I:
      LCALL     CHK_BUSY
      CLR       RS
      CLR       RW
      MOV       P0,A
      SETB      E
      NOP
      NOP
      CLR       E
      RET
;================================================
;读数据子程序
;RS=1,RW=1,E=H,D0-D7=数据
;================================================
READ_D:
      LCALL     CHK_BUSY ;读数据子程序
      SETB      RS
      SETB      RW
      SETB      E
      NOP
      MOV       A,P0
      CLR       E
      MOV       STORE,A
      RET
;================================================
;;测忙碌子程序
;RS=0,RW=1,E=H,D0-D7=状态字
;================================================
CHK_BUSY:
       MOV     P0,#0FFH ;测忙碌子程序
       CLR     RS
       SETB    RW
       SETB    E

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -