zoukankan      html  css  js  c++  java
  • 微机原理课程设计——在液晶模块上面实现文字的横向、纵向滚动——代码

    代码是照着同学的框架完成的,实现的功能有:水平滚动、垂直滚动

    IO_ADDRESS EQU  0298H
    ;----------------------------------------------------------------------
    DATA SEGMENT
        HZ_TAB DW 0CEA2H,0BBFAH,0D4ADH,0C0EDH        
        HZ_ADR DB ?                  ;存放显示行起始端口地址
        MESS            DB  'STRIKE ANY KEY,RETURN TO DOS!',0AH,0DH,'$'
    DATA ENDS
    ;----------------------------------------------------------------------
    STACK SEGMENT
        STA DW 100 DUP(?)
        TOP EQU LENGTH STA
    STACK ENDS
    ;----------------------------------------------------------------------
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
    START:
        MOV AX, DATA
        MOV DS, AX
        MOV ES, AX
        MOV AX, STACK
        MOV SS, AX
        MOV SP, TOP
    ;--------------
        ;8255初始化
        MOV DX,IO_ADDRESS
        ADD DX,3
        MOV AL,80H
        OUT DX,AL                       
        MOV AL,0FFH
        MOV DX,IO_ADDRESS
        OUT DX,AL
    ;--------------
        MOV DX,OFFSET MESS
        MOV AH,09
        INT 21H                      ;显示提示信息
    ;--------------
        CALL CLEAR
        CALL FUNCUP
    ;--------------
        ;主循环
    LOOPA:
        ;水平滚动
        MOV CX,2
    LOP1:
        CALL HSCROLL_A
        LOOP LOP1 
        ;垂直滚动
        MOV CX,2
    LOP2:
        CALL VSCROLL
        LOOP LOP2
        ;检测是否有键按下
        MOV    AH,01
        INT    16H
        JZ    LOOPA
        ;返回
        MOV   AH,4CH
        INT   21H
    ;====================================================================
    ;函数名:HSCROLL_A
    ;功能:对每一行实现水平滚动
    ;====================================================================
    HSCROLL_A PROC NEAR
        PUSH CX
        PUSH BX
        MOV CX,0
        MOV BL, 80H
        JMP NEXT1
    AGA1:
        MOV BL, 90H 
        JMP NEXT1
    AGA2:
        MOV BL, 88H 
        JMP NEXT1
    AGA3:
        MOV BL, 98H 
        JMP NEXT1
        ;延时等待
    NEXT1:
        PUSH CX
        MOV CX,07FH
    NEXT2:
        CALL DELAY
        LOOP NEXT2
        POP CX
    
        ;循环2次
        PUSH CX   
        MOV CX,2
    NEXT3:
        CALL HSCROLL
        LOOP NEXT3
        POP CX
    
        INC CX
        CMP CX,1
        JZ AGA1
        CMP CX,2
        JZ AGA2
        CMP CX,3
        JZ AGA3
    
        POP BX
        POP CX
        RET
    HSCROLL_A ENDP
    ;====================================================================
    ;函数名:HSCROLL
    ;功能:在某一行实现水平滚动
    ;====================================================================
    HSCROLL PROC NEAR
        PUSH CX
        PUSH BX
        MOV CX,5
    AGAIN: 
        MOV BYTE PTR HZ_ADR, BL 
        ;延时片段 
        PUSH CX
        MOV CX,07FH
    BACK2:
        CALL DELAY
        LOOP BACK2
        POP CX
        
        CALL CLEAR              ;LCD 清除          
        CALL LCD_DISP           ;LCD 显示
        INC  BL
        LOOP AGAIN
    
        POP BX
        POP CX
        RET
    HSCROLL ENDP
    ;====================================================================
    ;函数名:VSCROLL
    ;功能:垂直滚动子程序
    ;====================================================================
    VSCROLL PROC NEAR
        PUSH CX
        PUSH DX
        MOV DL, 0
    
    NEXT_ROW:
        MOV CX,0
        MOV BYTE PTR HZ_ADR, 80H 
        ADD BYTE PTR HZ_ADR, DL
        JMP NEX1
    BAC1:
        MOV BYTE PTR HZ_ADR, 90H 
        ADD BYTE PTR HZ_ADR, DL
        JMP NEX1
    BAC2:
        MOV BYTE PTR HZ_ADR, 88H 
        ADD BYTE PTR HZ_ADR, DL
        JMP NEX1
    BAC3:
        MOV BYTE PTR HZ_ADR, 98H 
        ADD BYTE PTR HZ_ADR, DL
        JMP NEX1
    NEX1:
        PUSH CX
        MOV CX,07FH
    NEX2:
        CALL DELAY
        LOOP NEX2
        POP CX
        CALL CLEAR              ;LCD 清除          
        CALL LCD_DISP           ;LCD 显示
    
        INC CX
        CMP CX,1
        JZ BAC1
        CMP CX,2
        JZ BAC2
        CMP CX,3
        JZ BAC3
        ;下一列
        INC DL
        CMP DL,5
        JNZ NEXT_ROW
        POP DX
        POP CX
        RET
    VSCROLL ENDP
    ;====================================================================
    ;函数名:CLEAR
    ;功能:LCD清零
    ;====================================================================
    CLEAR PROC
                    ;设置显示开,DDRAM内容保持不变、光标、闪烁关
                    MOV AL,0CH              ;00001100
                    MOV DX, IO_ADDRESS
                    OUT DX,AL               ;设置CLEAR命令
                    CALL CMD_SETUP
                    ;清屏指令,DDRAM位址计数器调整为00H
                    MOV AL,01H
                    MOV DX, IO_ADDRESS
                    OUT DX,AL               ;设置CLEAR命令
                    CALL CMD_SETUP          ;启动LCD执行命令
                    RET
    CLEAR ENDP
    ;====================================================================
    ;函数名:FUNCUP 
    ;功能:设置LCD模式
    ;====================================================================
    FUNCUP          PROC
                    ;MOV AL, 0fH             ;LCD功能设置命令
                    ;OUT DX, AL
                    ;CALL CMD_SETUP
                    ;      
                    ;00110100功能设置指令——扩充指令集动作
                    MOV AL, 34H             ;LCD显示状态命令
                    OUT DX, AL
                    CALL CMD_SETUP
                    
                    
                    RET
    FUNCUP           ENDP
    ;====================================================================
    ;函数名:LCD_DISP
    ;功能:显示汉字编码
    ;====================================================================
    LCD_DISP        PROC
                    PUSH CX
                    PUSH BX
                    MOV CX,4
                    LEA BX, HZ_TAB
    NEXT:
                    MOV AL,HZ_ADR
                    MOV DX, IO_ADDRESS
                    OUT DX, AL
                    CALL CMD_SETUP          ;设定DDRAM地址命令
                    MOV AX,[BX]
                    PUSH AX
                    MOV AL,AH               ;先送汉字编码高位
                    MOV DX,IO_ADDRESS
                    OUT DX,AL
                    CALL DATA_SETUP         ;输出汉字编码高字节
                    CALL DELAY              ;延迟
                    POP AX
                    MOV DX,IO_ADDRESS
                    OUT DX, AL
                    CALL DATA_SETUP         ;输出汉字编码低字节
                    CALL DELAY
                    INC BX
                    INC BX                  ;修改显示内码缓冲区指针
                    INC BYTE PTR HZ_ADR     ;修改LCD显示端口地址
                    
                    LOOP NEXT
                    POP BX
                    POP CX
     
                    RET               
    LCD_DISP   ENDP
    ;====================================================================
    ;函数名:CMD_SETUP
    ;功能:写指令
    ;====================================================================
    CMD_SETUP       PROC
                    MOV DX,IO_ADDRESS                ;指向8255端口控制端口
                    ADD DX,2
                    NOP
                    MOV AL,00000000B                ;PC1置0,pc0置0 (LCD I端=0,W端=0)
                    OUT DX, AL
                    CALL DELAY
                    NOP
                    MOV AL,00000100B                ;PC2置1 (LCD E端=1)
                    OUT DX, AL
                    NOP
                    CALL DELAY
                    MOV AL, 00000000B               ;PC2置0,(LCD E端置0)
                    OUT DX, AL
                    CALL DELAY
    
                    RET
    CMD_SETUP       ENDP
    ;====================================================================
    ;函数名:DATA_SETUP
    ;功能:写数据
    ;====================================================================
    DATA_SETUP      PROC
                    MOV DX,IO_ADDRESS                ;指向8255控制端口
                    ADD DX,2
                    MOV AL,00000001B                ;PC1置0,PC0=1 (LCD I端=1)
                    OUT DX, AL
                    NOP
                    CALL DELAY
                    MOV AL,00000101B                ;PC2置1 (LCD E端=1)
                    OUT DX, AL
                    NOP
                    CALL DELAY
                    MOV AL, 00000001B               ;PC2置0,(LCD E端=0)
                    OUT DX, AL
                    NOP
                    CALL DELAY
                    RET
    DATA_SETUP      ENDP
    ;====================================================================
    ;函数名:DELAY
    ;功能:延时
    ;====================================================================
    DELAY           PROC
                    PUSH CX
                    PUSH DX
                    MOV CX, 0FFFFh
    X1:         
                    LOOP  X1
                    MOV CX, 0FFFFh
    X2:         
                    LOOP  X2
                    MOV CX, 0FFFFh
    X3:         
                    LOOP  X3
    
                    POP DX
                    POP CX
                    RET
    DELAY           ENDP
        CODE ENDS
    END START
  • 相关阅读:
    网站测试自动化系统—在测试代码中硬编码测试数据
    在WPF里面显示DIB图片格式的图片
    网站测试自动化系统—系统应该有的功能
    Windbg 教程调试非托管程序的基本命令下
    Windbg教程调试非托管程序的基本命令上
    网站测试自动化系统—基于Selenium和VSTT
    WPF中一个通用的BoolToXXX转换类
    使用MPLex实现语法高亮显示的功能代码解释
    网站测试自动化系统—数据驱动测试
    如何控制float类型小数点后的位数
  • 原文地址:https://www.cnblogs.com/YiDongZhao/p/14731814.html
Copyright © 2011-2022 走看看