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

📄 126x64液晶多功能显示.asm

📁 proteus实例集锦
💻 ASM
字号:
;*********************************************

 ;Controller:ST7920

 ;MCU:AT89C51 ,晶体频率:12MHz

 ;LCM:128*64

 ;LCM型号:带中文字库的128X64-0402

 ;LCM 接口:1:GND 2:VCC 3:V0 4.RS 5:RW 6:E 7--14:DB0-DB7 15:PSB 16:NC 17:RST 18:Vout

;**********************************************
;占用单元30H,31H,32H,33H,A,DPTR,R2,R4,R6,R7
;功能:显示    浙江工业职业技术
;              学院电子协会欢迎
;              您
;
RS      EQU   P2.4      ;RS=“H”,表示DB7——DB0为显示数据
                        ;RS=“L”,表示DB7——DB0为显示指令数据
RW      EQU   P2.5      ;R/W=“H”,E=“H”,数据被读到DB7——DB0
                        ;R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR
E       EQU   P2.6      ;使能信号
PSB     EQU   P2.7      ;H:8位或4位并口方式,L:串口方式(见注释1)
RST     EQU   P2.0      ;复位端,低电平有效
                        ;模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空
COM     EQU   30H       ;DD RAM 地址存放单元
DAT     EQU   31H       ;汉字代码数据存放单元
DAT1    EQU   32H       ;汉字码址表低位存放单元
DAT2    EQU   33H       ;汉字码址表高位存放单元

;******************************以上是接口定义
       ORG   0000H
       AJMP  START
       ORG   0030H
START: MOV   SP,#60H
       LJMP  DISP
;*********************************
DISP:   CLR     PSB
        LCALL   DELAY
        SETB    PSB         ;将PSB置1,通信方式为8位数据并口
        LCALL   DELAY
        MOV     COM,#30H    ;功能设置---8BIT控制界面,基本指令集
        ACALL   WRI         ;调用写指令子程序
        LCALL   DELAY       ;延迟39uS
        MOV     COM,#0CH    ;显示打开,光标关,反白显示关
        ACALL   WRI         ;调用写指令子程序
        LCALL   DELAY       ;延迟39uS
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        LCALL   DELAY       ;延迟39uS
        MOV     COM,#06H    ;DDRAM的地址计数器(AC)加1
        ACALL   WRI         ;调用写指令子程序
        LCALL   DELAY       ;延迟39uS

;****************************************************
;右移显示,时间间隔为1秒
DISPX:  MOV     R0,#00H     ;显示文字偏移量
        MOV     R1,#00H     ;附加显示文字偏移量
        MOV     R2,#1       ;显示文字个数
        MOV     R3,#1       ;附加显示文字个数
        MOV     R4,#25      ;总的显示次数
DISP1:  MOV     COM,#80H    ;显示首地址
        ACALL   WRI         ;调用写指令子程序
        ACALL   DISP11      ;调用右移显示子程序
        INC     R3          ;取下一次显示文字个数
        MOV     A,R3        
        CJNE    A,#9,DISP12 ;判断文字个数是否超过8
        MOV     A,#8        ;超过8个就定死显示个数
        MOV     R3,A        ;把新的显示个数进行保存
DISP12: MOV     R2,A        
        MOV     A,R1        ;把原先的文字偏移量加2得到新的首位文字偏移量
        ADD     A,#2        
        MOV     R0,A        ;保存新的文字偏移量
        MOV     R1,A        
        ACALL   DELAY1      ;延时下1秒再进行下一次显示
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        ACALL   DELAY       ;延时
        ACALL   DELAY
        ACALL   DELAY       
        DJNZ    R4,DISP1    ;判断移位显示是否完毕


        MOV     R0,#00H     ;显示文字偏移量
        MOV     R1,#00H     ;附加显示文字偏移量
        MOV     R2,#1       ;显示文字个数
        MOV     R3,#1       ;附加显示文字个数
        MOV     R4,#25      ;总的显示次数
        MOV     B,#97H      ;显示首地址
DISP2:  MOV     COM,B       ;送首位显示地址
        ACALL   WRI         ;调用写指令子程序
        ACALL   DISP21      ;调用左移显示子程序
        MOV     R0,#00H     ;重新放首位显示偏移量
        INC     R3          ;取下一次显示位数,并进行判断
        MOV     A,R3
        CJNE    A,#9,DISP22
        MOV     A,#8
        MOV     R3,A        ;保存显示位数
DISP22: MOV     R2,A
        DEC     B           ;取下一次显示首地址,并进行判断
        MOV     A,B
        CJNE    A,#8FH,DISP23
        MOV     B,#90H      ;首地址小于90H时就定死在90H
        INC     R1          ;这时的首位文字偏移量也要相应改变
        INC     R1
        MOV     A,R1
        MOV     R0,A
DISP23: ACALL   DELAY1      
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        ACALL   DELAY
        ACALL   DELAY
        ACALL   DELAY
        DJNZ    R4,DISP2
        
        
;右移显示,时间间隔为1秒
        MOV     R0,#00H
        MOV     R1,#00H
        MOV     R2,#1
        MOV     R3,#1
        MOV     R4,#25
DISP3:  MOV     COM,#88H
        ACALL   WRI
        ACALL   DISP11
        INC     R3
        MOV     A,R3
        CJNE    A,#9,DISP32
        MOV     A,#8
        MOV     R3,A
DISP32: MOV     R2,A
        MOV     A,R1
        ADD     A,#2
        MOV     R0,A
        MOV     R1,A
        ACALL   DELAY1
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        ACALL   DELAY
        ACALL   DELAY
        ACALL   DELAY
        DJNZ    R4,DISP3


        MOV     R0,#00H
        MOV     R1,#00H
        MOV     R2,#1
        MOV     R3,#1
        MOV     R4,#25
        MOV     B,#9FH
DISP4:  MOV     COM,B
        ACALL   WRI        
        ACALL   DISP21
        MOV     R0,#00H
        INC     R3
        MOV     A,R3
        CJNE    A,#9,DISP42
        MOV     A,#8
        MOV     R3,A
DISP42: MOV     R2,A
        DEC     B
        MOV     A,B
        CJNE    A,#97H,DISP43
        MOV     B,#98H
        INC     R1
        INC     R1
        MOV     A,R1
        MOV     R0,A
DISP43: ACALL   DELAY1
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        ACALL   DELAY
        ACALL   DELAY
        ACALL   DELAY
        DJNZ    R4,DISP4

;逐个显示从“浙”开始到“您”;时间间隔为1秒
DISP5:  MOV    R0,#00H
        MOV    R2,#8
        MOV    COM,#80H
        ACALL  WRI
        ACALL  DISP31
        MOV    R0,#10H
        MOV    R2,#8
        MOV    COM,#90H
        ACALL  WRI
        ACALL  DISP31
        MOV    R0,#20H
        MOV    R2,#1
        MOV    COM,#88H
        ACALL  WRI
        ACALL  DISP31
        ACALL   DELAY1
;====================================
;清除屏幕显示,延时1秒
        MOV     COM,#01H    ;清除屏幕显示,将DDRAM的地址计数器归零
        ACALL   WRI         ;调用写指令子程序
        ACALL   DELAY1
;====================================       
        AJMP    DISPX


;==============================
;字符显示子程序
DISP11: MOV     A,R0        ;送偏高位偏移量
        MOV     DPTR,#TAB   ;置表头地址
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表高位
        ACALL   WRD         ;写入第一字节数据
        INC     R0
        MOV     A,R0
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表低位
        ACALL   WRD         ;写入第二字节数据
        MOV     A,R0        ;文字偏移量减三得到下一个要显示文字的偏移量
        CLR     C
        SUBB    A,#3
        MOV     R0,A
        DJNZ    R2,DISP11   ;判断是否显示满
        RET      
;=============================
;字符显示子程序
DISP21: MOV     A,R0        ;送偏高位偏移量
        MOV     DPTR,#TAB   ;置表头地址
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表高位
        ACALL   WRD         ;写入第一字节数据
        INC     R0
        MOV     A,R0
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表低位
        ACALL   WRD         ;写入第二字节数据
        INC     R0          ;取下一个字符地址
        ACALL   DELAY
        DJNZ    R2,DISP21   ;判断是否显示满
        RET        
;==========================
;字符显示子程序
DISP31: MOV     A,R0        ;送偏高位偏移量
        MOV     DPTR,#TAB   ;置表头地址
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表高位
        ACALL   WRD         ;写入第一字节数据
        INC     R0
        MOV     A,R0
        MOVC    A,@A+DPTR   ;查表得到字符代码
        MOV     DAT,A       ;送汉字码址表低位
        ACALL   WRD         ;写入第二字节数据
        INC     R0          ;取下一个字符地址
        ACALL   DELAY1
        DJNZ    R2,DISP31   ;判断是否显示满
        RET        
;**************************
WRI:    PUSH    ACC
        CLR     RS
        SETB    RW

WRI1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRI1
        CLR     RW
        MOV     P0,COM
        SETB    E
        CLR     E
        POP     ACC
        RET

;********************以上是写指令子程序

WRD:    PUSH    ACC
        CLR     RS
        SETB    RW
WRD1:   MOV     P0,#0FFH
        SETB    E
        MOV     A,P0
        CLR     E
        JB      ACC.7,WRD1
        SETB    RS
        CLR     RW
        MOV     P0,DAT
        SETB    E
        CLR     E
        POP     ACC
        RET

;********************以上是写数据子程序
DELAY:  MOV  R7,#0FFH
DELAY4: MOV  R6,#00FH
LOOP2:  DJNZ R6,LOOP2
        DJNZ R7,DELAY4
        RET

DELAY1: MOV  R5,#08H
DELAY11:MOV  R7,#0FFH
DELAY41:MOV  R6,#0FFH
        DJNZ R6,$
        DJNZ R7,DELAY41
        DJNZ R5,DELAY11
        RET

;************************以上是延时子程序

TAB: DB  0D5H,0E3H, 0BDH,0ADH, 0B9H,0A4H, 0D2H,0B5H   ;第一行前四个字(浙江工业)
     DB  0D6H,0B0H, 0D2H,0B5H, 0BCH,0BCH, 0CAH,0F5H   ;第一行后四个字(职业技术)
     DB  0D1H,0A7H, 0D4H,0BAH, 0B5H,0E7H, 0D7H,0D3H   ;第二行前四个字(学院电子)
     DB  0D0H,0ADH, 0BBH,0E1H, 0BBH,0B6H, 0D3H,0ADH   ;第二行后四个字(协会欢迎)
     DB  0C4H,0FAH, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H   ;第三行前四个字(您      )
     DB  0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H   ;第三行后四个字(        )
     DB  0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H, 0A3H,0A0H  

⌨️ 快捷键说明

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