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

📄 12864zk.asm

📁 液晶12864
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;12864(带字库汉字显示演示程序)
;***************************************************************************
;*  sxj1974@163.com		     (51c51 test web)     www.8951.com     *
;*  Create by :石学军      www.51c51.com 更多例程请登陆网站        	   *
;***************************************************************************

RS EQU P2.0
          RW EQU P2.1
          E  EQU P2.2
          PSB EQU P2.3
          RST EQU P2.5
;-----------------------------------------------
          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

⌨️ 快捷键说明

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