Arduino与JavaScript开发实例数码管显示控制基于Max7219
Arduino与JavaScript开发实例-数码管显示控制-基于Max7219
数码管显示控制-基于Max7219
Maxim MAX7219 是一款 LED 显示驱动器,可控制多达 64 个单独的 LED,或八个 7 段 LED 数字,或单独的 LED 和数字的任意组合,以八行八列的矩阵形式连接。 它将主机从不断复用 8 行 8 列的繁琐工作中解放出来。 此外,它还负责亮度控制(16 级),并实现显示测试和显示空白(关机)功能。
主机使用三个信号与 MAX7219 通信:DATA、CLK 和 LOAD。 该模块对它们进行了位操作,但也可以使用摩托罗拉的 SPI 接口(或其他制造商的类似接口)来简化和加快数据传输。
数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),其基本单元是发光二极管。
七段数码管分为共阳极及共阴极,共阳极的七段数码管的正极(或阳极)为八个发光二极管的共有正极,其他接点为独立发光二极管的负极(或阴极),使用者只需把正极接电,不同的负极接地就能控制七段数码管显示不同的数字。共阴极的七段数码管与共阳极的只是接驳方法相反而已。
在前面的文章中,对数码管理已经做了详细的介绍,请参考:
- Ardunio开发实例-七段数码管
- Arduino与Proteus仿真实例-7段数码管(7线)驱动仿真
- Arduino与Proteus仿真实例-MAX7219驱动8位7段数码管仿真
- Arduino与Proteus仿真实例-MAX7219级联驱动多个8x8LED点阵仿真
本次实例将实现基于Max7219单个数码管理驱动显示控制,实现一个简单时钟功能。
1、Led.Digits对象创建与描述
Led.Digits 类构造一个对象,该对象可以代表一个或多个(链接的)8 位、7 段 * LED 数字显示器 (MAX7219/MAX7221) 设备,连接到物理板上。 一个实例最多可以控制 8 个设备,提供 64 个可显示的数字。其参数如下:
- options:属性参数的对象。
| 属性 | 类型 | 值/描述 | 默认值 | 是否必须 |
|---|---|---|---|---|
| pins | Object | { data, clock, cs }. 数字引脚名称的对象 |
yes | |
| pins | Array | [ data, clock, cs ].数字引脚名称的对象. |
yes | |
| devices | Number | 1-8.设备数量,对于单个设备情况,可以省略. |
1 |
no |
| controller | string | HT16K33. 要使用的控制器的名称 | no |
1)对象初始化
默认为Max7219控制器
1 | new five.Led.Digits({ |
HT16K33控制器
1 | new five.Led.Digits({ |
2)调用
1 | var five = require("johnny-five"); |
3)常用API
一个 Led.Digits 实例最多可以表示 8 个链接的设备(1 个设备最多可以支持 8 个七段数字),其中每个可以直接通过其在链中的设备索引来寻址 (1-8)。
注意:当设备关闭时(使用 off 方法),数据会被保留,并且会在打开时显示在设备上(使用 on 方法)。 通过提供一种省电机制,这在使用电池为设备供电时很有用。
- **on()**:打开所有设备
- **on(device index)**:打开指定设备
1 | digits.on(1); // 打开设备1 |
- **off()**:关闭所有设备
- **off(device index)**:关闭指定设备
1 | digits.off(1); // 关闭设备1 |
- **clear()**:关闭所有设备的所有 LED。
- **clear(device index)**:关闭指定设备索引处的设备的所有 LED。 (注意:clear() 不会关闭设备。)
- brightness(0-100) :将所有设备的亮度设置为 0-100%。
- brightness(device index, 0-100) :为指定设备索引处的设备设置亮度,范围为 0-100%。
- **draw(position, character)**:在所有设备上将字符绘制到数字位置 (0-7)。
- **draw(device index, position, character)**:将字符绘制到设备上指定设备索引处的数字位置 (0-7)。
有效字符值:
+ 单个数字
+ 单个数字或字符串
+ 包含数字或字母字符后跟小数点字符的字符串。
1 | // 在设备1,位置 0 显示“1” |
+ **print(string)**:显示可用数字的字符串
- 如果字符串包含冒号:出现在显示单元上,则将其视为单个字符。 这意味着包含冒号的 4 位显示将被视为 5 个字符显示。
1
2
3
4
5
6
digits.print("12:00"); // 显示冒号
digits.print("12 00"); // 不显示冒号
digits.print("HOLA");
- 数字后面的句点不被视为字符,它们被解释为前面字符的一部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
digits.print("0.0.0.0.")
digits.print("0.0.:0.0.")
```4)预定义字符

### 2 、硬件准备
* Arduino Mega2560开发板一块
* 8位7段共阴数码管一个
* Max7219控制器一个
* 面包板一块
* 杜邦线若干
* 数据线一条
仿真电路原理图如下:

### 3、软件准备
* VS Code IDE
* Arduino IDE
* NodeJs(本次使用的版本为v16.13.0)
* Visual Studio 2019
* Electron(本次使用版本为v17.0.1)
* Proteus 8.13 SP0
前面的文章已经对Arduino与JavaScript开发环境已经做了详细描述,请参考:[Arduino与JavaScript开发实例-开发环境搭建](https://blog.csdn.net/wujuxKkoolerter/article/details/124907013)
### 4、代码实现
本次实例使用到Nodejs支持库:`moment`,执行命令行并安装:`npm install -g moment`
const five = require(‘johnny-five’)
const moment = require(“moment”)
const board = new five.Board({port:’COM3’,repl:false})
board.on(“ready”, () => {
// 初始化数码管
var digits = new five.Led.Digits({
pins: {
data: 2,
cs: 3,
clock: 4,
}
})
// 每1秒钟获取一次系统时间,并显示
setInterval(() => {
// 获取当前时间
var timedata = moment().format(“HH.mm.ss”)
// 显示时
digits.draw(0,5,timedata[0])
digits.draw(0,4,timedata[1] + timedata[2])
// 显示分
digits.draw(0,3,timedata[3])
digits.draw(0,2,timedata[4] + timedata[5])
// 显示秒
digits.draw(0,1,timedata[6])
digits.draw(0,0,timedata[7])
},1000)
})
### 5、仿真结果

文章来源: https://iotsmart.blog.csdn.net/article/details/125033782
