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

📄 tstyj.asm

📁 Small RTOS51是为51系列单片机而编写的。它是完全免费的、源代码公开的多任务实时操作系统。它可在无任何外部数据存储器的单片80C51系统上运行
💻 ASM
字号:
;**************************************************
;    平凡单片机工作室
;  http://www.mcustudio.com
;   (c) Copyright 2003 Pingfan's McuStudio
;    All rights Reserved
;tstyj.asm
;作者:周坚   
;功能描述:液晶测试程序,第一行第一列开始显示"Welcome!",打开光标并闪烁显示
;本例可用DSB-1A型单片机实验板验证
;**************************************************

    RS  bit P2.5
    RW  bit P2.6
    E   bit P2.7

    DPORT   EQU     P0
    XPOS    EQU     R1      ;列方向地址指针
    YPOS    EQU     R2      ;行方向地址指针
    CUR     EQU     R3      ;设定光标参数

    NoDisp  EQU 0           ;无显示
    NoCur   EQU 1           ;有显示无光标
    CurNoFlash  EQU 2       ;有光标但不闪烁
    CurFlash    EQU 3       ;有光标且闪烁



    ORG 0000H
    JMP START
    ORG 30H
START:
    MOV     SP,#5FH
    CALL    RSTLCD
    MOV     20H,#'W'
    MOV     21H,#'e'
    MOV     22H,#'l'
    MOV     23H,#'c'
    MOV     24H,#'o'
    MOV     25H,#'m'
    MOV     26H,#'e'
    MOV     27H,#'!'
    MOV     28H,#' '
    MOV     29H,#0

    MOV     Cur,#CurFlash
    CALL    SETCUR
    
    MOV     R0,#20H
    MOV     r1,#1
    MOV     r2,#0
    CALL    WRITESTRING
    JMP $
;测试主程序到此结束

WriteString:
    MOV     A,@R0
    JZ      WS_RET
    CALL    WriteChar   
    MOV     A,XPOS
    CJNE    A,#15,WS_1  ;如果XPOS中的值未到15(可显示的最多位)
    JMP     WS_RET
WS_1:   
    INC     R0
    INC     XPOS
    JMP     WriteString
WS_RET: 
    RET

;光标设置命令
SetCur:
    MOV     A,CUR
    JZ      S_1         ;参数为0,转关显示
    DEC     A
    JZ      S_2         ;参数为1,转开显示,但无光标
    DEC     A
    JZ      S_3         ;参数为2,转开显示且有光标,无闪烁
    DEC     A
    JZ      S_4         ;参数为3,转开显示,光标闪烁
    JMP     S_RET       ;否则返回
S_1:    
    MOV     A,#00001000B    ;关显示
    CALL    LCDWC
    JMP     S_RET
S_2:    
    MOV     A,#00001100B    ;开显示但无光标
    CALL    LCDWC
    JMP     S_RET
S_3:    
    MOV     A,#00001110B    ;开显示有光标但不闪烁
    CALL    LCDWC
    JMP     S_RET
S_4:    
    MOV     A,#00001111B    ;开显示有光标且闪烁
    CALL    LCDWC
S_RET:
    RET
                
;清屏命令
ClrLcd:
    MOV     A,#01H
    CALL    LCDWC
    RET
;在指定的行与列显示指珲的字符,xpos,行,ypos,列 A,待显示字符
WriteChar:
    CALL    LCDPOS
    CALL    LCDWD
    RET
        
;系统资源 一个堆栈 
WaitIdle:           ;正常读写操作之前必须检测LCD控制器状态
    PUSH    ACC
    MOV     DPORT,#0FFH
    CLR     RS
    SETB    RW
    SETB    E
    NOP
W_1:
    MOV     A,DPORT
    ANL     A,#80H
    JZ      W_2
    JMP     W_1
W_2:    
    CLR     E
    POP     ACC
    RET
;系统资源 a     
LcdWd:                  ;写字符子程序
    CALL    WAITIDLE
    SETB    RS
    CLR     RW
    MOV     DPORT,A     ;以A为数据传递
    SETB    E
    NOP
    CLR     E
    RET
;系统资源 a
LcdWc:                  ;送控制字子程序(检测忙信号)
    CALL    WaitIdle
LcdWcn:                 ;送控制字子程序(不检测忙信号)
    CLR     RS
    CLR     RW
    MOV     DPORT,A
    SETB    E
    NOP
    CLR     E
    RET
;系统资源:一个堆栈 
LCDPOS:                     ;设置第(XPOS,YPOS)个字符的DDRAM地址
    PUSH    ACC
    MOV     A,XPOS
    ANL     A,#0FH          ;X位置范围(0到15)
    MOV     XPOS,A
    MOV     A,YPOS
    ANL     A,#01H          ;Y位置范围(0到1)
    MOV     YPOS,A
    CJNE    A,#00,LPS_LAY   ;(第一行)X: 第0----15个字符
    MOV     A,XPOS          ;    DDRAM:   0----0FH
    JMP     LPS_LAX
LPS_LAY:
    MOV     A,XPOS          ;(第二行)X: 第0----15个字符
    ADD     A,#40H          ;DDRAM:  40----4FH
LPS_LAX:
    ORL     A,#80H          ;设置DDRAM地址
    CALL    LCDWC
    POP     ACC
        RET 
;系统资源 a
RSTLCD:
    MOV     R6,#15          ;如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30
    CALL    DELAY           ;延时15毫秒
    MOV     A,#38H
    CALL    LCDWCN
    MOV     R6,#5           ;延时5毫秒,如晶振频率高于12M,加大该值
    CALL    DELAY
    CALL    LCDWCN
    MOV     R6,#5           ;延时5毫秒,如晶振频率高于12M,加大该值
    CALL    DELAY
    CALL    LCDWCN
    
    MOV     A,#38H          ;显示模式设置
    CALL    LCDWC
    MOV     A,#08H          ;显示关闭
    CALL    LCDWC
    MOV     A,#01H          ;显示清屏
    CALL    LCDWC
    MOV     A,#06H          ;显示光标移动位置
    CALL    LCDWC
    MOV     A,#0CH          ;显示开及光标设置
    CALL    LCDWC
    RET

;系统资源:r4,r5,r6
DELAY:
D_1:    MOV     R5,#25       ;延时子程序(1MS)
D_2:    MOV     R4,#20
        DJNZ    R4,$
        DJNZ    R5,D_2
        DJNZ    R6,D_1      ;R6用作参数传递         
        RET

    END

⌨️ 快捷键说明

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