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

📄 参考程序2.txt

📁 本文档是现行所有的液晶驱动电路及各自硬件底层驱动程序设计.
💻 TXT
📖 第 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 + -