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

📄 chuan.asm]

📁 带字库的12864显示程序加上打印机打印
💻 ASM]
字号:
	             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
;===============================================
;显示汉字和字符
;加入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
           
;===============================================
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
        JB P0.7,$                                                                           CLR E                                                                               RET
;================================================
;延时子程序
;================================================
DELAY3:
        MOV R5,#16H
DEL31:  MOV R6,#0FFH
DEL32:  MOV R7,#0FFH
DEL33:  DJNZ R7,DEL33
        DJNZ R6,DEL32
        DJNZ R5,DEL31
        RET

DELAY2:
        MOV R6,#0CH
DEL21:  MOV R7,#18H
DEL22:  DJNZ R7,DEL22
        DJNZ R6,DEL21
        RET

DELAY1:
        MOV R6,#06H
DEL11:  MOV R7,#08H
DEL12:  DJNZ R7,DEL12
        DJNZ R6,DEL11
        RET

DELAY4:
          MOV R6,#200
DEL41:    MOV R7,#200
DEL42:    DJNZ R7,DEL42
          DJNZ R6,DEL41
          RET

DELAY5:
          MOV R5,#05H
DEL51:    MOV R6,#0FFH
DEL52:    MOV R7,#0FFH
DEL53:    DJNZ R7,DEL53
          DJNZ R6,DEL52
          DJNZ R5,DEL51
          RET
;***********************************************

TAB1A:     DB  '我是山西农业大学'    ;显示在第一行
TAB1B:     DB  '  工程技术学院  '    ;显示在第二行
TAB1C:     DB  '电气工程及自动化'    ;显示在第三行
TAB1D:    DB  '是我所攻读的专业'     ;显示在第四行
           END

⌨️ 快捷键说明

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