7.5 LED点阵的纵向移动

该博客介绍了一种实现LED点阵垂直滚动的方法,通过定时器T0进行动态扫描刷新,利用P1口的引脚控制地址线,并通过中断服务函数每隔250ms更新图像索引,从而实现图片的滚动效果。
摘要由CSDN通过智能技术生成
点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,我们所看到的动画片、游戏等等,它们的基本原理也都是这样的。

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

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

用一个变量 index 来代表每张图片的起始位置,每次从 index 起始向下数 8 行代表了当前的图片,250ms 改变一张图片,然后不停的动态刷新,这样图片就变成动画了。首先我们要对显示的图片进行横向取模,虽然这是 32 张图片,由于我们每一张图片都是和下一行连续的,所以实际的取模值只需要 40 个字节就可以完成,我们来看看程序。
   
   
   
  1. #include <reg52.h>
  2. sbit ADDR0 = P1^0;
  3. sbit ADDR1 = P1^1;
  4. sbit ADDR2 = P1^2;
  5. sbit ADDR3 = P1^3;
  6. sbit ENLED = P1^4;
  7. unsigned char code image[] = { //图片的字模表
  8. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Keil中实现16x16LED点阵字符移动,你可以按照以下步骤进行: 1. 创建一个新的Keil项目,选择适合你的开发板或控制器。 2. 在程序中定义需要显示的字符的点阵数据,可以使用ASCII码表来查找对应字符的点阵数据。 3. 设置一个计数器用于计算字符的滚动位置。 4. 在主循环中,不断更新计数器的值,并将点阵数据向左移动相应的位数,然后将移动后的数据输出到LED点阵上。 5. 当计数器的值超过16时,重新从数组的开头开始显示点阵数据,并将计数器清零。 6. 调整更新的时间间隔可以控制字符的滚动速度。 下面是一个简单的Keil程序示例,可以实现字符的滚动显示: ```c #include <reg52.h> // 定义16x16点阵数据数组 unsigned char code LED_MATRIX[16][16] = { // 这里填入需要显示的字符的点阵数据 }; // 计数器,用于计算字符的滚动位置 unsigned char counter = 0; // 定时器中断处理函数 void timer0_isr() interrupt 1 { // 更新计数器的值 counter++; // 将数组中的数据向左移动相应的位数 for (int i = 0; i < 16; i++) { for (int j = 0; j < 15; j++) { LED_MATRIX[i][j] = LED_MATRIX[i][j+1]; } } // 将移动后的数据输出到LED点阵上 for (int i = 0; i < 16; i++) { P1 = ~(1 << i); P0 = LED_MATRIX[i][0]; // 稍微延时一下,避免闪烁 // ... } // 当计数器的值超过16时,重新从数组的开头开始显示点阵数据,并将计数器清零 if (counter > 16) { counter = 0; // ... } } void main() { // 初始化IO口和定时器 // ... // 启动定时器中断 // ... while (1) { // 稍微延时一下,控制滚动速度 // ... } } ``` 在上面的代码示例中,你需要完成以下任务: 1. 在Keil中创建一个新的项目,并选择适合你的开发板或控制器。 2. 在程序中定义16x16点阵数据数组,并初始化为需要显示的字符的点阵数据。 3. 设置计数器,用于计算字符的滚动位置。 4. 编写定时器中断处理函数,在每个一段时间触发一次,更新点阵数据数组并输出到LED点阵上。 5. 在主函数中,初始化IO口和定时器,并启动定时器中断。 6. 在主函数中,添加一个循环,控制滚动速度。 7. 在定时器中断处理函数中,当计数器的值超过16时,重新从数组的开头开始显示点阵数据,并将计数器清零。 提示:在Keil中,你需要使用适当的头文件来定义寄存器和函数。同时,你还需要根据具体的硬件来设置IO口的输出和延时函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值