怎样将MAX7219驱动的LED矩阵8x8与ATtiny85微控制器连接

步骤1:硬件
max7219 模块通常如下所示。它们的一侧有输入总线,另一侧有输出总线。这样,您就可以菊花链式连接2个或更多模块,即以菊花链方式连接,以创建更复杂的设置。
我们使用的模块能够使用5个小跳线成链状连接。参见下图。
步骤2:引脚和信号
max7219 模块有5个引脚:
vcc –电源(+)
gnd –接地(-)
din –数据输入
cs –芯片选择
clk –时钟
这意味着我们需要attiny85微控制器一侧的3个引脚来控制模块。这些将是:
pb0 –连接到clk
pb1 –连接到cs
pb2 –连接到din
这足以连接到max7219模块并对其进行编程。
步骤3:协议
与 max7219 进行通信相对容易–它使用同步协议,这意味着我们发送的每个数据位都有一个时钟周期,表示该数据位的存在。
换句话说,我们向位发送2个并行序列-一个用于时钟,另一个用于数据。
第4步:软件
max7219 的方式模块的工作原理是:
我们将字节写入其内部寄存器。
max7219解释数据。
max7219控制矩阵中的led。
这也意味着我们不必一直在led阵列中盘旋来点亮它们。 -max7219控制器负责这一工作。
因此,为了以方便的方式使用max7219模块,我们需要一个函数库来实现这一目的。
首先,我们需要一些基本功能,以便写入max7219寄存器。
向max7219写入一个字节。
向max7219写一个字(2个字节)。
向控制器写入一个字节的函数如下所示:
void max7219_byte(uint8_t data) {
for(uint8_t i = 8; i 》= 1; i--) {
portb &= ~(1 《《 max7219_clk); // set clk to low
if (data & 0x80) // mask the msb of the data
portb |= (1 《《 max7219_din); // set din to high
else
portb &= ~(1 《《 max7219_din); // set din to low
portb |= (1 《《 max7219_clk); // set clk to high
data 《《= 1; // shift to the left
}
}
现在我们可以向max7219发送字节了,我们可以开始发送命令了。这是通过发送2个字节来完成的,第一个字节是内部寄存器的地址,第二个字节是我们要发送的数据。
max7219控制器中有十几个寄存器。/p》
发送命令或单词基本上是发送2个连续字节。该函数的实现非常简单。
void max7219_word(uint8_t address, uint8_t data) {
portb &= ~(1 《《 max7219_cs); // set cs to low
max7219_byte(address); // sending the address
max7219_byte(data); // sending the data
portb |= (1 《《 max7219_cs); // set cs to high
portb &= ~(1 《《 max7219_clk); // set clk to low
}
请务必在此处注意将cs信号恢复为high的行-这标志着序列的结束-在这种情况下,命令的结尾。控制链中连接的一个以上矩阵时,使用类似的技术。
在开始打开和关闭led之前,下一步是初始化max7219控制器。这是通过将某些值写入某些寄存器来完成的。为了方便起见,在进行编码时,我们可以将初始化序列放入数组中。
uint8_t initseq[] = {
0x09, 0x00, // decode-mode register, 00 = no decode
0x0a, 0x01, // intensity register, 0x00 。. 0x0f
0x0b, 0x07, // scan-limit register, 0x07 to show all lines
0x0c, 0x01, // shutdown register, 0x01 = normal operation
0x0f, 0x00, // display-test register, 0x00 = normal operation
};
我们只需要按顺序将上面的5条命令作为地址/数据对发送即可。
下一步步骤–点亮一排led。
这很简单–我们只需要编写一个命令,其中第一个字节为地址(从0到7),第二个字节为代表8个led的8位。在行中。
void max7219_row(uint8_t address, uint8_t data) {
if (address 》= 1 && address 《= 8) max7219_word(address, data);
}
请注意,这仅适用于1个矩阵。如果我们将更多矩阵连接在一起,它们将全部显示相同的数据。原因是在发送命令后,我们将cs信号返回到high,这会导致链中的所有max7219控制器锁存并显示最后一条命令的内容。
步骤5 :测试
该测试代码并没有做什么,但它演示了如何与max7219控制器进行通信。
这是一个简单的测试程序,它可以点亮第一排(r = 1)上的led在最右边的位置,然后将其向左移动直到到达最左边的位置,然后向上一行(r = 2)进行相同的操作,直到到达顶部(r = 8)。
max7219_init();
for (;;) {
for (uint8_t r = 1; r 《= 8; r++) {
uint8_t d = 1;
for (uint8_t i = 9; i 》 0; i--) {
max7219_row(r, d);
d = d 《《 1;
_delay_ms(50);
}
}
}
max7219led8x8库
上述所有功能都是max7219led8x8的一部分图书馆。其源代码可在https://bitbucket.org/tinusaur/max7219led8x8上获得。
步骤6:应用程序
tinusaur shield gamex3
如果您已经有了tinusaur板,我们可以提供shield gamex3,以便将max7219模块更容易地连接到attiny85微控制器。
gametinu项目
gametinu是一个小型游戏平台,您可以使用shield gamex3以及其他一些部件和工具来构建自己的游戏。


大数据企业天下秀发布2022第一季度报告
2010年中国PCB产业前景良好 但暗含不少问题
专访华为董事徐文伟:让科学回归科学 拒绝太多地域和政治属性
印尼电池级镍厂项目的环境影响评价报告有望今年年底出炉
热度不弱于小米6,小编觉得OPPOR11这次真算很厚道了!
怎样将MAX7219驱动的LED矩阵8x8与ATtiny85微控制器连接
深度学习的框架Caffe使用详情
自动驾驶检测器可同时实现3D检测精读和速度的提升
仿生生物嗅觉传感器研究进展
美国航天局的“毅力号探测器”顺利踏上火星
TX RX分层有什么意义?
电缆故障测试仪之故障原因的详细分析
LED灯的各种连接形式及特点介绍
IIC-China 2010参展商展前专访:世纪民生
苹果迎来iOS11.3正式版 iPhone 8 Plus/iPhone X已哭晕
MAX5215,MAX5217低功耗数模转换器
截止2019年3月全球5G专利中国占比高达34%
600万死难者记忆由AI守护!
研究人员开发新算法,可改善自动驾驶系统性能
魅族Pro7最新消息,魅族Pro7晚上七点半正式上线,深度处理的联发科,煤油们是否买单?