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

📄 text_display.asm

📁 OCM240128-7.rar
💻 ASM
字号:
;将C/D接到单片机的P2.7口,将CS接到单片机的P2.6口,采用总线寻址方式  
              DATA1   EQU    30H;参数1单元
              DATA2   EQU    31H;参数2单元
              COM     EQU    32H;指令代码单元
              CODE0   EQU    33H;字符代码存放单元
              ATTR0   EQU    34H;字符属性码存放单元
              O_Y     EQU    35H;Y坐标(0-15),128/8=16,即一列显示所占字节数
              O_X     EQU    36H;X坐标(0-29),240/8=30,即一行显示所占字节数   
              INDI_H  EQU    37H;计算文本显示RAM地址的高位备份单元  
              INDI_L  EQU    38H;计算文本显示RAM地址的低位备份单元          
              C_ADD   EQU    07F00H;指令通道地址
              D_ADD   EQU    3F00H;数据通道地址                 
              FS      BIT    P1.7;选择字体控制位
              
             
             
             
              ORG     0000H
              LJMP    MAIN
;              ORG     000BH
;              LJMP    IT0P
;              ORG     001BH
;              LJMP    IT1P
              ORG     0100H
MAIN:         MOV     SP,#60H
;              MOV     TMOD,#11H;晶振为11.0592HZ,T0,T1设置为方式1
;              MOV     TL0,#00H
;              MOV     TH0,#0DCH;设置T0定时为10ms
;              MOV     TL1,#00H
;              MOV     TH1,#0DCH;设置T1定时为10ms

              MOV     DPTR,#C_ADD;设置指令通道地址
              MOVX    A,@DPTR ;写入操作
              
              LCALL   LCD_INT 
              MOV     O_Y,#07H;设置坐标初始值
              MOV     O_X,#02H
              MOV     R0,#00H;设查表的初值
              MOV     R2,#26
LOOP:         LCALL   CAL_ADD;计算文本显示RAM地址
              MOV     A,R0
              MOV     DPTR,#ASC_TAB;设置表首地址
              MOVC    A,@A+DPTR ;查表
              MOV     CODE0,A
              LCALL   T_DISP;显示字符
              INC     R0
              INC     O_X
              DJNZ    R2,LOOP
HERE:         AJMP    HERE     
 
;LCD初始化子程序        
LCD_INT:      CLR     FS;将字体设置成8*8dots
              MOV     DATA1,#00H
              MOV     DATA2,#00H
              MOV     COM,#40H;设置文本区首址为0000H
              LCALL   WR_CD0
              MOV     DATA1,#1EH
              MOV     DATA2,#00H;设置文本显示区域宽度,即一行显示所占字节数为30个
              MOV     COM,#41H
              LCALL   WR_CD0
              MOV     DATA1,#00H
              MOV     DATA2,#08H
              MOV     COM,#42H;设置图形区首址为0800H
              LCALL   WR_CD0
              MOV     DATA1,#1EH
              MOV     DATA2,#00H;设置图形显示区域宽度,即一行显示所占字节数为30个
              MOV     COM,#43H
              LCALL   WR_CD0
              MOV     COM,#0A2H;光标形状设置,8(列)*2(行)
              LCALL   WR_CD2
              MOV     COM,#80H;显示方式设置,逻辑“或”合成
              LCALL   WR_CD2
              MOV     COM,#9CH;显示开关设置,将光标显示以及闪烁禁用,文本和图形显示启用
              LCALL   WR_CD2
              LCALL   CLEAR              
              RET
              
;写指令和写数据子程序
WR_CD0:       LCALL   ST01;双字节参数指令写入入口
              MOV     A,DATA1;取第一个参数单元数据
              MOV     DPTR,#D_ADD;设置数据通道地址/数据写入地址
              MOVX    @DPTR,A;写入操作
WR_CD1:       LCALL   ST01;单字节参数指令写入入口
              MOV     A,DATA2;取第二个参数单元数据
              MOV     DPTR,#D_ADD;设置数据通道地址/数据写入地址
              MOVX    @DPTR,A;写入操作           
WR_CD2:       LCALL   ST01;无参指数令写入入口
              MOV     A,COM;取指令代码单元数据
              MOV     DPTR,#C_ADD;设置指令通道地址/指令写入地址
              MOVX    @DPTR,A;写入操作
              RET   
 
;判断状态子程序STA0-STA7 ,即读状态子程序                                         
;判断状态位STA1,STA0子程序(读写指令和读写数据状态),在写指令或者数据之前,这两个标志位
;必须同时位“1”
ST01:         LCALL   RE_CO;读指令
              JNB     ACC.0,ST01
              JNB     ACC.1,ST01
              RET
;判断状态位STA2子程序(数据自动读状态),该位在数据自动读操作中取代STA1和STA0有效,
;在连续读过程中每读一次之前都要确认STA2为“1”              
ST2:          LCALL   RE_CO;读指令
              JNB     ACC.2,ST2
              RET     
;判断状态位STA3子程序(数据自动写状态)
ST3:          LCALL   RE_CO;读指令
              JNB     ACC.3,ST3
              RET  
;判断状态位STA6子程序(屏读/屏拷贝状态)  
ST6:          LCALL   RE_CO;读指令
              JB      ACC.6,ST6;判断STA6如果为1的话,出错
              RET     ;若STA6如果为0的话, 正确    
              
;读指令子程序
RE_CO:    ;    MOV     P0,#0FFH
              MOV     DPTR,#C_ADD;设置指令通道地址
              MOVX    A,@DPTR ;写入操作
              RET
 
;清显示的RAM子程序
CLEAR:        MOV     DATA1,#00H
              MOV     DATA2,#00H
              MOV     COM,#24H;设置显示RAM首地址/地址指针位置
              LCALL   WR_CD0     
              MOV     R3,#00H;设置循环量,每列 显示16个字符  
              MOV     R4,#1EH;每行可以写三十个字符
              MOV     COM,#0B0H;设置自动写方式
              LCALL   WR_CD2
CLEAR0:       LCALL   ST3;判断自动写状态位STA3
              MOV     A,#00H;置数据0
              MOV     DPTR,#D_ADD;写入数据
              MOVX    @DPTR,A
              DJNZ    R4,CLEAR0
              MOV     R4,#1EH;重装每行字符数
              DJNZ    R3,CLEAR0              
              MOV     COM,#0B2H;设置自动写结束命令
              LCALL   WR_CD2    
              RET
              
;计算文本显示RAM地址,通过Y坐标(0-15),128/8=16,即一列显示所占字节数
;X坐标(0-29),240/8=30,即一行显示所占字节数,通过这两个数计算文本显示RAM地址
CAL_ADD:      MOV     A,O_Y
              MOV     B,#1EH;文本显示宽度为1EH
              MUL     AB ;结果为BA
              CLR     C
              ADD     A,O_X             
              MOV     INDI_L,A ;备份低位地址指针
              MOV     A,B
              ADDC    A,#00H
              MOV     INDI_H,A ;备份高位地址指针
              RET

;文本显示子程序              
T_DISP:       MOV     A,INDI_L
              MOV     DATA1,A ;存文本显示RAM地址低位
              MOV     A,INDI_H
              MOV     DATA2,A ;存文本显示RAM地址高位
              MOV     COM,#24H;设置地址指针
              LCALL   WR_CD0 
              MOV     DATA2,CODE0;写入字符代码
              MOV     COM,#0C4H
              LCALL   WR_CD1
              RET
              
ASC_TAB:      DB      2CH,29H,35H,38H,29H,21H,2FH,2AH,29H,21H,00H,2CH,2FH,36H,25H
              DB      00H,2DH,21H,2EH,3AH,21H,29H,27H,21H,2EH,27H
              END             
;              CLR     C ;计算图形显示RAM地址
;              MOV     A,INDI_H  
;              ADD     A,#08H
;              MOV     DATA2,A
;              MOV     COM,#24H;设置地址指针
;              LCALL   WR_CD0
;              MOV     DATA2,ATTR0;写入字符代码
;              MOV     COM,#0C4H
;              LCALL   WR_CD1
;
                  
             
              

⌨️ 快捷键说明

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