37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一:8位LED数码管MAX7219模块(支持级联八位串行3个IO口控制)
知识点:MAX7219芯片
是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。只需要3个IO口即可驱动8位数码管!数码管显示时无闪烁!支持级联!
功能特点
1 10MHz连续串行口
2 独立的LED段控制
3 数字的译码与非译码选择
4 150μA的低功耗关闭模式
5 亮度的数字和模拟控制
6 高电压中断显示
7 共阴极LED显示驱动
8 限制回转电流的段驱动来减少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24脚的 DIP和 SO 封装
内部功能框图
模块电原理图
接线说明(以提供的程序为例,可以接任意IO口,
在程序中修改端口定义即可):
VCC→5V
GND→GND
DIN→D2
CS →D3
CLK→D4
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一: 8位LED数码管MAX7219模块
项目之一:测试显示“87654321”
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十四: 8位LED数码管MAX7219模块
项目之一:测试显示“87654321”
*/
#include "LedControl.h"
// Arduino 引脚 2 至DIN,4 至Clk,3 至ck,设备数量是1个
LedControl lc = LedControl(2, 4, 3, 1);
void setup() {
// 初始化 MAX7219 器件
lc.shutdown(0, false); // 启用显示
lc.setIntensity(0, 5); // 设置亮度级别(0 为最小值,15 为最大值)
lc.clearDisplay(0); // 清除显示寄存器
}
void loop() {
for (int i = 0; i < 8; i++) {
lc.setDigit(0, i, i + 1, false);
}
delay(1000);
}
Arduino实验场景图
实验开源仿真编程(Linkboy V5.33)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十一: 8位LED数码管MAX7219模块
项目之二:顺序显示23个数字、字母及符号
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十四: 8位LED数码管MAX7219模块
项目之二:顺序显示23个数字、字母及符号
*/
#include "LedControl.h"
// Arduino 引脚 2 至DIN,4 至Clk,3 至ck,设备数量是1个
LedControl lc = LedControl(2, 4, 3, 1);
char chars[23] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'A', 'b', 'c', 'd', 'E', 'F', 'H', 'L', 'P',
'.', '-', '_'
};
void setup() {
// 初始化 MAX7219 器件
lc.shutdown(0, false); // 启用显示
lc.setIntensity(0, 5); // 设置亮度级别(0 为最小值,15 为最大值)
lc.clearDisplay(0); // 清除显示寄存器
}
void loop() {
for (int i = 0; i < 23; i++) {
lc.setChar(0, 0, chars[i], false);
delay(300);
}
}
Arduino实验场景图