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

📄 t6963.txt

📁 发一个用汇编写的LCD读写程序
💻 TXT
字号:
;===============================================================================
;                用6963C控制器驱动的LCD的程序(带详细注释)
;===============================================================================
;--------------------------------------------------------
;                液晶初始化程序
;--------------------------------------------------------

INT_LCD:
        MOV     DAT1,#00H         ;设置文本显示区首地址。
        MOV     DAT2,#00H
        MOV     LCD_COM,#40H
        LCALL   PR1
        MOV     DAT1,#20H         ;设置文本显示区宽度,即每行显示所占字节数。
        MOV     DAT2,#00H
        MOV     LCD_COM,#41H
        LCALL   PR1
        MOV     DAT1,#00H         ;设置文本显示区首地址,或为文本属性区首地址。
        MOV     DAT2,#08H
        MOV     LCD_COM,#42H
        LCALL   PR1
        MOV     DAT1,#20H         ;设置图形显示区宽度,或为文本属性区宽度。
        MOV     DAT2,#00H         ;即每行显示所占字节数。
        MOV     LCD_COM,#43H
        LCALL   PR1
        MOV     LCD_COM,#0A7H     ;光标形状设置。
        LCALL   PR12
        MOV     LCD_COM,#80H      ;显示方式设置,逻辑“或”合成。
        LCALL   PR12
        MOV     LCD_COM,#9CH      ;显示开关设置。
        LCALL   PR12
        RET
;--------------------------------------------------------
;                液晶清屏程序
;--------------------------------------------------------
CLEAR_LCD:
        MOV     DAT1,#00H         ;设置显示RAM首地址。
        MOV     DAT2,#00H         ;
        MOV     LCD_COM,#24H
        LCALL   PR1
        MOV     R3,#00H         ;设置循环量。
        MOV     R4,#20H         ;
        MOV     LCD_COM,#0B0H   ;设置自动写方式。
        LCALL   PR12
CLEAR_LCD1:
        LCALL   ST3             ;判断状态位S2。
        MOV     A,#01H          ;置数据0。修改这个数据,可以在屏幕上看到满屏的变化。
        LCALL   PR13            ;写入数据。
        DJNZ    R3,CLEAR_LCD1   ;循环。
        DJNZ    R4,CLEAR_LCD1
        MOV     LCD_COM,#0B2H   ;设置自动写结束指令。
        LCALL   PR12
        RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;            以下是文本方式下的汉字显示
;--------------------------------------------------------
;                建立CGRAM程序
;--------------------------------------------------------
     ;    COUNT    EQU    34H     ;西文字符(8x8点阵)个数。
CGRAM:
        MOV     DAT1,#03H        ;设置CGRAM偏置地址。
        MOV     DAT2,#00H
        MOV     LCD_COM,#22H
        LCALL   PR1
        MOV     DAT1,#00H        ;设置RAM地址指针。
        MOV     DAT2,#1CH
        MOV     LCD_COM,#24H
        LCALL   PR1
        MOV     LCD_COM,#0B0H    ;设置自动写入方式。
        LCALL   PR12
        MOV     A,COUNT          ;计算写入的字节数。
        MOV     B,#08H
        MUL     AB
        MOV     COUNT,A          ;计算低8位数据。
        INC     B                ;计算高8位数据。
        MOV     DPTR,#CGTAB      ;取字符库首地址。
        PUSH    DPH              ;保存字符库指针。
        PUSH    DPL
CGRAM1:
        LCALL   ST3              ;判断自动写状态位。
        POP     DPL              ;取字符库指针。
        POP     DPH
        CLR     A
        MOVC    A,@A+DPTR        ;取数据。
        INC     DPTR             ;字符库指针+1。
        PUSH    DPH              ;保存字符库指针。
        PUSH    DPL
        LCALL   PR13             ;写入数据。
        DJNZ    COUNT,CGRAM1     ;计算循环。
        DJNZ    B,CGRAM1
        MOV     LCD_COM,#0B2H   ;写入“结束自动写”命令。
        LCALL   PR12
        POP     ACC              ;修正堆栈指针。
        POP     ACC
        RET

CGTAB:   (这里存放你的字库)


;--------------------------------------------------------
;                液晶文本方式下汉字显示程序
;--------------------------------------------------------
               C_CODE    EQU      33H    ;汉字字符代码。
         ;      O_Y       EQU      35H    ;Y坐标(0-15)。
         ;      O_X       EQU      36H    ;X坐标(0-29)。
WRI_CT:
       MOV      A,O_Y
       MOV      B,#20H
       MUL      AB
       ADD      A,O_X
       MOV      O_X,A
       MOV      DAT1,A
       MOV      A,B
       ADDC     A,#00H             ;文本显示区首地址为0000H。
       MOV      O_Y,A
       MOV      DAT2,A             ;设置显示RAM地址。
       MOV      LCD_COM,#24H
       LCALL    PR1
       MOV      A,C_CODE           ;取显示代码。
       MOV      DAT2,A             ;写入左上半部汉字代码。
       MOV      LCD_COM,#0C0H
       LCALL    PR11
       MOV      A,C_CODE           ;
       ADD      A,#02H
       MOV      DAT2,A             ;写入右上半部汉字代码。
       LCALL    PR11
       MOV      A,#20H             ;修改显示RAM地址。
       ADD      A,O_X
       MOV      DAT1,A
       CLR      A
       ADDC     A,O_Y
       MOV      DAT2,A
       MOV      LCD_COM,#24H      ;设置显示RAM地址。
       LCALL    PR1
       MOV      A,C_CODE
       INC      A
       MOV      DAT2,A            ;写入左下半部汉字代码。
       MOV      LCD_COM,#0C0H
       LCALL    PR11
       MOV      A,C_CODE
       ADD      A,#03H
       MOV      DAT2,A            ;写入右下半部汉字代码。
       LCALL    PR11
       RET
;--------------------------------------------------------
;                液晶文本方式显示汉字调用方法(举例)
;--------------------------------------------------------
       MOV      C_CODE,#80H      ;
       MOV      O_X,#00H
       MOV      O_Y,#00H
       LCALL    WRI_CT
       MOV      C_CODE,#84H      ;
       MOV      O_X,#07H
       MOV      O_Y,#02H
       LCALL    WRI_CT
       SJMP     $
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;              图形方式下的汉字显示程序
;-----------------------------------------------------
CC_CODE    EQU     33H           ;汉字字符代码。
O_Y        EQU     35H           ;Y坐标(0-127)
O_X        EQU     36H           ;X坐标(0-29)
COUNT      EQU     34H           ;计数器。

WRI_CC:
       MOV      A,O_Y            ;计算图形显示RAM地址。
       MOV      B,#20H           ;图形显示区宽度为20H。
       MUL      AB
       ADD      A,O_X
       MOV      O_X,A
       MOV      A,B
       ADDC     A,#08H           ;图形显示区首地址为0800H。
       MOV      O_Y,A
       MOV      DPTR,#CCTAB      ;计算汉字库字符首地址。
       MOV      A,CC_CODE
       MOV      B,#20H
       MUL      AB
       ADD      A,DPL
       MOV      DPL,A
       MOV      A,B
       ADDC     A,DPH
       MOV      DPH,A
       PUSH     DPH              ;保存字库地址指针。
       PUSH     DPL
       MOV      COUNT,#10H       ;计数器设置为16次。
WRI_CC1:
       MOV      DAT1,O_X         ;设置显示RAM地址。
       MOV      DAT2,O_Y
       MOV      LCD_COM,#24H
       LCALL    PR1
       POP      DPL              ;取字库地址指针。
       POP      DPH
       CLR      A
       MOVC     A,@A+DPTR        ;取左部字模数据。
       MOV      DAT2,A           ;设置数据。
       MOV      A,#10H           ;偏置地址为16。
       MOVC     A,@A+DPTR        ;取右部字模数据。
       MOV      DAT1,A           ;暂存数据。
       INC      DPTR             ;字库地址指针+1。
       PUSH     DPH              ;保存字库地址指针。
       PUSH     DPL
       MOV      LCD_COM,#0C0H    ;设置一次性写数据指令代码。
       LCALL    PR11             ;写入数据。
       MOV      DAT2,DAT1        ;设置右部数据。
       LCALL    PR11             ;写入数据。
       MOV      A,#20H           ;修改显示RAM地址。
       ADD      A,O_X            ;
       MOV      O_X,A
       CLR      A
       ADDC     A,O_Y
       MOV      O_Y,A
       DJNZ     COUNT,WRI_CC1    ;计数器循环。
       POP      ACC              ;修正堆栈指针。
       POP      ACC
       RET

CCTAB:    (字库存放位置)

;--------------------------------------------------------
;                液晶图形方式下汉字显示演示程序(举例)
;--------------------------------------------------------
         MOV     CC_CODE,#00H    ;
         MOV     O_X,#00H
         MOV     O_Y,#00H
         LCALL   WRI_CC
         MOV     CC_CODE,#01H    ;
         MOV     O_X,#03H
         MOV     O_Y,#00H
         LCALL   WRI_CC
         MOV     CC_CODE,#02H    ;
         MOV     O_X,#06H
         MOV     O_Y,#00H
         LCALL   WRI_CC
         MOV     CC_CODE,#03H    ;
         MOV     O_X,#09H
         MOV     O_Y,#00H
         LCALL   WRI_CC
         SJMP    $
;----------------------------------------------------
;   向LCD中写指令和数据子程序
;----------------------------------------------------
PR1:
         LCALL    ST01            ;双字节参数指令写入入口。
         MOV      A,DAT1          ;取第一参数单元数据。
         LCALL    PR13            ;
PR11:
         LCALL    ST01            ;单字节参数指令写入入口。
         MOV      A,DAT2          ;取第二参数单元数据。
         LCALL    PR13            ;
PR12:
         LCALL    ST01            ;无参数指令写入入口。
         MOV      A,LCD_COM           ;取指令代码单元数据。
         LJMP     PR14            ;
PR13:
         MOV      DPTR,#D_ADD     ;
PR14:
         MOVX     @DPTR,A         ;
         RET

;----------------------------------------------------
;   读状态字子程序。
;----------------------------------------------------
R_ST:
         MOV      DPTR,#C_ADD     ;设置指令通道地址。
         MOVX     A,@DPTR
         RET

;----------------------------------------------------
;   状态STA1、STA0检测程序
;----------------------------------------------------
ST01:
         LCALL    R_ST
         JNB      ACC.0,ST01
         JNB      ACC.1,ST01
         RET

;----------------------------------------------------
;   状态位STA2检测子程序
;----------------------------------------------------
ST2:
         LCALL    R_ST
         JNB      ACC.2,ST2
         RET

;----------------------------------------------------
;   状态位STA3检测子程序
;----------------------------------------------------
ST3:
         LCALL    R_ST
         JNB      ACC.3,ST3
         RET
;----------------------------------------------------
;   根据当前光标所在条目,算出相应地址,显示出光标
;    入口:A--地址表号码。
;----------------------------------------------------
CURSOR:
      CJNE    A,#01H,NEXT_POS1   ;
      MOV     DPTR,#POSITION1   ;指向各条对应地址。
      LJMP    CURSOR_COM
NEXT_POS1:
      CJNE    A,#02H,NEXT_POS2   ;
      MOV     DPTR,#POSITION2   ;指向各条对应地址。
      LJMP    CURSOR_COM
NEXT_POS2:

CURSOR_COM:
      MOV     A,TERM            ;取出当前的条数。
      CLR     C                 ;
      RLC     A                 ;X2
      MOVC    A,@A+DPTR         ;取出第1操作数。
      MOV     R2,A              ;保存到R2.
      INC     DPTR              ;指向下一个操作数。
      MOV     A,TERM            ;取出当前的条数。
      CLR     C                 ;
      RLC     A                 ;X2
      MOVC    A,@A+DPTR         ;取出第2操作数。
      MOV     R3,A              ;第2个操作数放到R3中。
      MOV     R4,#21H           ;光标指针设置指令码。
      LCALL   PR1               ;执行指令。
      RET

POSITION1:
          DB  11H,22H,33H,44H,55H,66H      ;画面2中选择条目。
POSITION2:
          DB  11H,22H,33H,44H,55H,66H      ;输入口令时选择数字位数。

⌨️ 快捷键说明

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