级联下的传值方式

级联下, N个MAX7219相当于组成了一个8*N bit宽度的锁存器, 如果需要对第M个7219进行写入, 需要做M次寻址+写入后拉高CS, 才能到达这个7219. 如果仅仅对这个7219进行操作, 不操作其他7219, 那么在第1个寻址写入后, 做的寻址写入输入的都是空值.

对于级联的MAX7219, 如果要显示产生滚动的效果, 那么每次要操作的都是整行, 可以将其看成是一个(N8)8的点阵, 每次直接对一行写入N个byte.

连线

  • CLK => P2.2
  • CS => P2.1
  • DIN => P2.0
  • VCC => 5V
  • GND => GND

代码示例

#include <reg52.h>
#include <intrins.h> #define u8 unsigned char
#define u16 unsigned int #define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUT_DOWN 0x0C
#define DISPLAY_TEST 0x0F #define BLOCKS 4 sbit MAX7219_CLK = P2^2;
sbit MAX7219_CS = P2^1;
sbit MAX7219_DIN = P2^0; u8 code bytes[] = {
0x3e,0x63,0x63,0x7f,0x63,0x63,0x63,0x63, //A
0x7e,0x63,0x63,0x7e,0x63,0x63,0x63,0x7e, //B
0x3e,0x63,0x63,0x60,0x60,0x63,0x63,0x3e, //C
0x3e,0x63,0x73,0x6b,0x67,0x63,0x63,0x3e, //0
0x0c,0x1c,0x3c,0x0c,0x0c,0x0c,0x0c,0x3f, //1
0x3e,0x63,0x63,0x06,0x0c,0x18,0x30,0x7f, //2
0x3e,0x63,0x63,0x0e,0x03,0x63,0x63,0x3e, //3
0x06,0x0e,0x1e,0x36,0x66,0x7f,0x06,0x06, //4
0x7f,0x60,0x60,0x7e,0x03,0x03,0x03,0x7e, //5
0x3e,0x63,0x60,0x7e,0x63,0x63,0x63,0x3e, //6
0x7f,0x03,0x03,0x06,0x0c,0x18,0x18,0x18, //7
0x3e,0x63,0x63,0x3e,0x63,0x63,0x63,0x3e, //8
0x3e,0x63,0x63,0x63,0x3f,0x03,0x63,0x3e, //9
}; u8 val[BLOCKS];
u8 character_len = sizeof(bytes) / 8; void delay(u16 x)
{
u16 i,j;
for(i = 0; i < x; i++)
for(j = 0;j < 112; j++);
} void Max7219_writeByte(u8 dat)
{
u8 i;
MAX7219_CS = 0;
for(i = 8; i >= 1; i--)
{
MAX7219_CLK = 0;
MAX7219_DIN = dat & 0x80; // &10000000, 取最高位
dat = dat << 1;
MAX7219_CLK = 1;
}
} void Max7219_singeWrite(u8 index, u8 addr, u8 dat)
{
MAX7219_CS = 0;
Max7219_writeByte(addr);
Max7219_writeByte(dat);
while(index--)
{
Max7219_writeByte(0x00);
Max7219_writeByte(0x00);
}
MAX7219_CS = 1;
} void Max7219_multiWrite(u8 addr, u8 len, u8* dat)
{
MAX7219_CS = 0;
while(len--)
{
Max7219_writeByte(addr);
Max7219_writeByte(*dat++);
}
MAX7219_CS = 1;
} void Max7219_init(void)
{
u8 i;
for (i = 0; i < BLOCKS; i++)
{
Max7219_singeWrite(i, SHUT_DOWN, 0x01); // 0x00:shutdown, 0x01:normal
Max7219_singeWrite(i, DECODE_MODE, 0x00); // No decode
Max7219_singeWrite(i, INTENSITY, 0x03); // 0x00:min, 0x0F:max
Max7219_singeWrite(i, SCAN_LIMIT, 0x07); // Display 8 digits
Max7219_singeWrite(i, DISPLAY_TEST, 0x00); // 0x00:normal, 0x01:test mode
}
} void main(void)
{
// pos:点阵右沿对应的val数组元素编号. 因为要无缝滚屏, 用右沿做求余不会产生跳变
// lpos: 点阵左沿对应的val数组元素编号, 每次根据点阵右沿和点阵宽度计算得到
u16 pos = 0, lpos = 0;
// cpos: 点阵左沿对应的文字编号
// bpos: 在这个文字中, 当前移动到第几个bit, 值从0-7
u8 i, j, cpos = 0, bpos = 0, tcpos = 0;
Max7219_init();
while(1)
{
lpos = pos + sizeof(bytes) - BLOCKS * 8;
cpos = lpos / 8; // 第几个字
bpos = lpos % 8; // 字的第几个bit
for (i = 0; i < 8; i++) // 对每一行, 对val的每个元素赋值
{
// 从第cpos个字的bpos位开始, 填满每个点阵对应的byte
for (j = 0; j < BLOCKS; j++)
{
// 高位部分
tcpos = (cpos + j) % character_len;
val[j] = bytes[tcpos * 8 + i] << bpos;
// 低位部分
tcpos = (cpos + j + 1) % character_len;
val[j] |= bytes[tcpos * 8 + i] >> (8 - bpos);
}
Max7219_multiWrite(i+1, BLOCKS, val);
}
// 每处理完一屏, pos右移一位
pos = (pos + 1) % sizeof(bytes);
delay(50);
}
}

参考

STC89C52驱动MAX7219LED点阵级联, 文字滚动效果的更多相关文章

  1. Flash 开发环境搭建和文字滚动效果实例

    Flash 开发环境搭建和文字滚动效果实例 一.Flash 开发环境搭建 Flash发布的时候可以将资源(即将库中的元件)集成到swf运行文件中.Flash没有代码自动输入补全功能,因此需要一个英文一 ...

  2. android采用SurfaceView实现文字滚动效果

    前言 为了实现文字的滚动效果,之前也重写了TextView效果都不太好,后来对SurfaceView进行完善. 声明     欢迎转载,但请保留文章原始出处:)  小崔博客:http://blog.c ...

  3. 在AxureRP8中实现广告文字滚动效果

    本文是实现动态文字在一个区域中滚动的效果,大概实现过程如下: 先准备一个区域,然后让文字在该区域内水平移动,本文是实现了从右到左的轮询的效果,其他雷同. 在Axure中,这种移动的过程需要动态移动,利 ...

  4. js文字滚动效果实现

    纯js实现,完整代码如下: <!doctype html> <html lang="en"> <head> <meta http-equi ...

  5. TextView文字滚动效果

    ScrollText.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  6. 文字滚动效果,jquery和marquee标签

    链接:https://pan.baidu.com/s/1pMwHYH1 密码:r9ys marquee标签是微软创建的,后来大部分浏览器都适用后,微软在IE8把这个标签去掉了.为符合W3C规范,还是使 ...

  7. js文字滚动效果

    function (global) { var logo = document.getElementById('logo'); var text = document.createTextNode(' ...

  8. Unity3D 文字滚动跑马灯效果

    需求 在日常游戏中,文字滚动效果是比较常用的.例如日常游戏顶部的新闻公告,聊天系统的文字滚动,都属于这个范围. 思路 由于使用的地方比较广泛,所以希望能够尽量独立的游戏之外,能够做到随处使用的功能.N ...

  9. TextView实现文字水平滚动效果

    有时候我们使用TextView显示文本,只想把所有内容用一行显示出来,但是一行又显示不完,就需要让文本实现水平滚动的效果. 具体实现方法如下: 1,实现自定义TextView并实现isFocused( ...

  10. 二、JavaScript语言--JS实践--信息滚动效果制作

    运用JavaScript技术,掌握无缝滚动和歇间性滚动的制作方法. 一.marquee标签实现信息滚动 1 behavior滚动的方式 alternate:表示在两端之间来回滚动 scroll:表示由 ...

随机推荐

  1. 【Gerrit】操作技巧

    多笔提交依赖 1. cherry-pick 同步的多笔代码前后有依赖,如第M笔提交是基于第N笔修改的,直接同步过去会有冲突,所以同步M笔提交时需要基于N笔提交,即写入第N笔commit-id 上述填的 ...

  2. .NET周刊【1月第2期 2024-01-21】

    国内文章 NCC Mocha v0.1.0 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统 https://mp.weixin.qq.com/s/gUx-dqlYqcwgQN ...

  3. .NET集成IdGenerator生成分布式全局唯一ID

    前言 生成分布式唯一ID的方式有很多种如常见的有UUID.Snowflake(雪花算法).数据库自增ID.Redis等等,今天我们来讲讲.NET集成IdGenerator生成分布式全局唯一ID. 分布 ...

  4. Razor 语法@Html.DropDownList,根据List集合或者枚举生成Select标签

    1.根据List集合生成Select标签,根据数据库数据换成SelectListItem集合 Action 方法(也可使用下方的List集合的扩展方法): 1 var selectList = DBL ...

  5. [转帖]Ceph简单搭建

    https://cloud.tencent.com/developer/article/1643322 Ceph基础介绍 ​ Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可 ...

  6. [转帖]长篇图解 etcd 核心应用场景及编码实战

    https://xie.infoq.cn/article/3329de088beb60f5803855895 一.白话 etcd 与 zookeeper 二.etcd 的 4 个核心机制 三.Lead ...

  7. 银河麒麟不同架构获取rpm包的方法

    银河麒麟不同架构获取rpm包的方法 背景 随着信创和网络安全越来越重要 现阶段国产化的软硬件部署越来越多. 很多时候现场有很多国产化的设备.不同架构.不同版本. 还不能上网, 无法获取对应的安装介质. ...

  8. [转帖]Linux中的Page cache和Buffer cache详解

    1.内存情况 在讲解Linux内存管理时已经提到,当你在Linux下频繁存取文件后,即使系统上没有运行许多程序,也会占用大量的物理内存.这是因为当你读写文件的时候,Linux内核为了提高读写的性能和速 ...

  9. 文盘Rust -- 安全连接 TiDB/Mysql

    作者:京东科技 贾世闻 最近在折腾rust与数据库集成,为了偷懒,选了Tidb Cloud Serverless Tier 作为数据源.Tidb 无疑是近五年来最优秀的国产开源分布式数据库,Tidb ...

  10. ant-design-vue 表单验证详解

    表单验证详解 <template> <!-- 第一个坑 :model="formState.youForm" 一定要写成这样 不要写成:model="f ...