LED点阵的纵向移动

发布者:WhisperingHeart最新更新时间:2016-12-23 来源: eefocus关键字:LED点阵  纵向移动 手机看文章 扫描二维码
随时随地手机看文章

点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,我们所看到的动画片、游戏等等,它们的基本原理也都是这样的。

上一节我们学了如何在点阵上画一个❤形,有时候我们希望这些显示是动起来的,而不是静止的。对于点阵本身已经没有多少的知识点可以介绍了,主要就是编程算法来解决问题了。比如我们现在要让点阵显示一个 I ❤ U 的动画,首先我们要把这个图形用取模软件画出来看一下,如图 7-10 所示。

图 7-10  上下移动横向取模
图 7-10  上下移动横向取模


这张图片共有 40 行,每 8 行组成一张点阵图片,并且每向上移动一行就出现了一张新图片,一共组成了 32 张图片。

用一个变量 index 来代表每张图片的起始位置,每次从 index 起始向下数 8 行代表了当前的图片,250ms 改变一张图片,然后不停的动态刷新,这样图片就变成动画了。首先我们要对显示的图片进行横向取模,虽然这是 32 张图片,由于我们每一张图片都是和下一行连续的,所以实际的取模值只需要 40 个字节就可以完成,我们来看看程序。


#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code image[] = { //图片的字模表

    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

    0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,

    0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,

    0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,

    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

};

void main(){

    EA = 1;  //使能总中断

    ENLED = 0;  //使能 U4,选择 LED 点阵

    ADDR3 = 0;

    TMOD = 0x01; //设置 T0 为模式 1

    TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms

    TL0 = 0x67;

    ET0 = 1;  //使能 T0 中断

    TR0 = 1;  //启动 T0

    while (1);

    }

    /* 定时器 0 中断服务函数 */

    void InterruptTimer0() interrupt 1{

    static unsigned char i = 0; //动态扫描的索引

    static unsigned char tmr = 0; //250ms 软件定时器

    static unsigned char index = 0; //图片刷新索引

   

    TH0 = 0xFC; //重新加载初值

    TL0 = 0x67;

    //以下代码完成 LED 点阵动态扫描刷新

    P0 = 0xFF;  //显示消隐

    switch (i){

        case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index+0]; break;

        case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index+1]; break;

        case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index+2]; break;

        case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index+3]; break;

        case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index+4]; break;

        case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index+5]; break;

        case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index+6]; break;

        case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index+7]; break;

        default: break;

    }

    //以下代码完成每 250ms 改变一帧图像

    tmr++;

    if (tmr >= 250){  //达到 250ms 时改变一次图片索引

        tmr = 0;

        index++;

        if (index >= 32){  //图片索引达到 32 后归零

           index = 0;

        }

    }

}

大家把这个程序下载到单片机上看看效果,一个 I ❤ U 一直往上走动的动画就出现了,现在还有哪位敢说我们工科同学不懂浪漫的?还需要用什么玫瑰花取悦女朋友吗?一点技术含量都没有,要玩就玩点高科技,呵呵。


当然,别光图开心,学习我们还要继续。往上走动的动画我写出来了,那往下走动的动画,大家就要自己独立完成了,不要偷懒,一定要去写代码调试代码。瞪眼看只能了解知识,而能力是在真正的写代码、调试代码这种实践中培养起来的。


关键字:LED点阵  纵向移动 引用地址:LED点阵的纵向移动

上一篇:LED点阵的图形显示
下一篇:LED点阵的横向移动

推荐阅读最新更新时间:2024-03-16 15:26

单片机实验——8X8LED点阵显示技术(二)
利用8X8 点阵挨个显示数字0 到9 的数字,到9后从0重新开始,如此循环。 解决方式一:通过中断方式让所有行值始终为低电平(事实上,并不是一次性让所有行值为低电平,而是挨行设置,CPU的中断时间间隔较短,当挨行设置频率较快时,可近似认为所有行值都为低电平),而列值需要根据具体数字的列值来确定,每秒改一次列值的数字。 解决方式二:通过中断方式让所有列值始终为高电平(原理同上),而行值根据具体数字的行值来确定,每秒改变一次行值的数字 以下我采用了方法一来实现。 编译环境:KEIL C51 V3 电路仿真软件:proteus 7.4 单片机类型:AT89C52 LED类型:MATRIX-8X8-RED 单片机上
[单片机]
单片机实验——8X8<font color='red'>LED点阵</font>显示技术(二)
利用51单片机来控制LED点阵
引言 单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。广大工程技术人员通过学习有关单片机的知识后,也能依靠自己的力量来开发所希望的单片机系统,并可获得较高的经济效益。正因为如此,在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、家用电器等各个方面。在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时则需要先根据新的汉字
[单片机]
STM32 MAX7219驱动的8*8 LED点阵
STM32驱动8*8的点阵,按照之前的接法试验了很多次,依然还是调不通。已经意识到可能是延时的问题了,在初始化函数中加了延时,在写数据的函数中加了延时,还是搞不定。其实最后解决的方法也挺简单的,只不过自己没经验罢了。开始填坑! 解决方法:在main函数中,一步一步的进行函数初始化,在进行MAX7219初始化之前加一个50MS的延时,竟然正常工作了,真的是坑,哈哈哈。自己虽菜,但是最终解决了问题,还是很不错的。还是我大互联网的功劳啊。 主程序就不贴了,很简单。
[单片机]
51单片机课程设计——led点阵广告牌程序设计
上学期期末的课设题目是led点阵广告牌,当时的要求如下: (1)能够显示不同字符的LED点阵广告牌; (2)按键切换不同的显示效果(如闪烁,静止,平移等); (3)按键切换不同的显示内容; (4)能够显示图形或自定义字符; (5)其他功能(创新部分); (6)系统调试、分析、总结与功能实现。 当时用的是我用是的普中科技的STC90C51RD+的单片机,不过只要是51单片机,换哪个51内核的芯片都可以,只要电路和程序匹配就可以。 我用的那款普中科技的51单片机可以直接连线决定线路的布置,不需要自己去重新焊一个电路板。 然后我根据任务要求连接了电路,写了对应的程序,还有proteus仿真。 另外,觉得有趣可以点个赞;有什么
[单片机]
51单片机课程设计——<font color='red'>led点阵</font>广告牌程序设计
HT48R50A的 5X7 LED点阵显示示例程序
HT48R50A的 5X7 LED 点阵显示示例程序 ; ******************************************** ; Function : 5X7 LED点阵显示示例程序 * ; MICroProcessor : HT48R50A-1/28SKDIP-A * ; Author: www.picavr.com * ; Crystal : 4MHz * ; ******************************************** #INCLUDE HT48R50A-1.INC ;------------
[单片机]
HT48R50A的 5X7 <font color='red'>LED点阵</font>显示示例程序
基于51单片机16X32LED点阵显示屏程序设计
51单片机16X32LED点阵显示屏由单片机最小系统、行驱动电路74HC154、列驱运电路74HC595组成,实现汉字、数字的显示。电路简单。程序中以20个汉字作为显示示例。资料含51单片机C语言源程序、PROTEUS7.8仿真源文件。附送取模软件及取模说明文档,方便你自己更换显示内容。显示移动速度可在程序中进行设置。 #include REG51.H #define FOSC 12 //定义晶振频率 #define INIT_TH0 0x3C //定时器T0初始值 #define INIT_TL0 0xB0 #define TMOD_T00 0x
[单片机]
基于51单片机16X32<font color='red'>LED点阵</font>显示屏程序设计
LED点阵显示屏动态显示和远程监控的实现
1、引言 LED点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。 目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。 另
[安防电子]
<font color='red'>LED点阵</font>显示屏动态显示和远程监控的实现
PIC单片机控制LED点阵显示屏
本实验在proteus软件上模拟完成。 实验器件:20片8X8LED点阵显示屏,10片74LS164移位寄存器,10片74LS273数据锁存器,2片74LS138译码器,1片PIC16F877A单片机。 proteus元件库中中没有16X80点阵显示屏,所以用20片8X8LED点阵屏拼装而成。 10片74LS164移位寄存器和10片74LS273数据锁存器用于传送和保存一行数据。 2片74LS138构成4选16译码器用于行选。 实验截图: 源程序: list p=16f877A ; list directive to define processor #include p16f87
[单片机]
PIC单片机控制<font color='red'>LED点阵</font>显示屏
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved