单片机大作业---16*16点阵显示step2

本文是在上一篇文章基础上的延伸,如果你还不懂单片机控制led的基本原理的话请先看看上一篇文章

https://blog.csdn.net/haohulala/article/details/91372488

有了上一步的基础,我们现在就可以很轻松地开始写滚动显示的程序啦,为了方便起见,我们就写左移显示吧。

part1 如何实现滚动

我们以向左滚动为例,实际上仔细观察后就会发现,想要实现向左滚动就是需要将字形码的起始地址向右偏移,这样汉字左边的部分就会消失,后面的汉字由于偏移就会出现出来。更直观一点说,你可以把屏幕想象成一个窗口,字向左滚动就相当于屏幕向右滚动,也就是起始指针向右偏移。

part2 主程序

;==========
;初始化程序
;==========
MAIN:   MOV SP, #5FH    ;初始化堆栈指针
        MOV IE, #82H    ;1000 0010B,表示开总中断和EX1外部中断1
M1:     MOV R7, #4H     ;****这里控制要显示的字数****
        MOV R6, #00H    ;这是DPTR的偏移量,这个值不需要修改
M2:     ACALL DISPLAY
        DJNZ R7, M2
        SJMP M1

主程序比step多了一个R6寄存器,用来存放字形码偏移量,赋初值为0

part3 显示程序

;===============================
;显示主程序
;显存为30H开始的32个内存单元
;P0口控制低8位字形码
;P1口控制高8位字形码
;P2口控制字位码
;P2.7口为高电平的时候不选通任何一列
;先送字形码,后送字位码
;然后调用延时子程序后再显示下一列
;显示完一个字后
;================================
DISPLAY:    
            PUSH 00H
            PUSH 01H
            PUSH 02H
            PUSH 03H
            PUSH 04H
            PUSH 05H
            MOV R5, #10H    ;一个字显示16次能显示完,每次都向左偏移一个单位
D3:         ACALL GET       ;先将下一帧送入显存
            MOV R4, #10H   ;****这里控制循环次数,也就是一个字显示多久****
            ;初始化部分
D1:         MOV R0, #30H    ;用作上半部分显示内容指针
            MOV R1, #30H+10H;用作下半部分显示内容指针
            MOV R2, #10H    ;进行显示内容控制
            MOV R3, #00H    ;用作字位码
            CLR A
            MOV P0, A
            MOV P1, A
            SETB P2.7
            ;显示部分
D2:         MOV P0, @R0     ;将低8位字形码送入P0口
            MOV P1, @R1     ;将高8位字形码送入P1口
            MOV P2, R3      ;将字位码送入P2口
            CLR P2.7        ;将P2.7口置0表示可以显示
            ACALL DELAY5    ;延时0.5ms
            SETB P2.7       ;关闭显示
            INC R0
            INC R1
            INC R3
            DJNZ R2, D2
            DJNZ R4, D1
            DJNZ R5, D3     ;控制一个字显示16次,每次偏移一个单位
            POP 05H
            POP 04H
            POP 03H
            POP 02H
          
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值