电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块
分 享
扫描二维码分享
【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块
雕爷学编程
雕爷学编程
关注
发布时间: 2021-05-13
丨
阅读: 345
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 #### 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) #### 实验八十一:8位LED数码管MAX7219模块(支持级联八位串行3个IO口控制) ![](https://cf02.ickimg.com/bbsimages/202105/f97d00dbf9efd043b4cbf052e6fd4696.jpg) ![](https://cf02.ickimg.com/bbsimages/202105/66e9a4932e401166bdf67dcf3b7ecc60.jpg) MAX7219 是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。 ![](https://cf02.ickimg.com/bbsimages/202105/368c6e6508a44081bca324447ec48bcf.jpg) 一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。只需要3个IO口即可驱动8位数码管!数码管显示时无闪烁!支持级联! ![](https://cf02.ickimg.com/bbsimages/202105/b7c1024448761992938dfefcf6be1570.jpg) MAX7219/MAX7221 是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。 功能特点 1 10MHz连续串行口 2 独立的LED段控制 3 数字的译码与非译码选择 4 150μA的低功耗关闭模式 5 亮度的数字和模拟控制 6 高电压中断显示 7 共阴极LED显示驱动 8 限制回转电流的段驱动来减少EMI(MAX7221) 9 SPI, QSPI, MICROWIRE串行接口(MAX7221) 10 24脚的 DIP和 SO 封装 ![](https://cf02.ickimg.com/bbsimages/202105/3b1c0b384b31e0ff0639e33c7f4f9017.jpg) 管脚描述 管脚 名称 功能 1 DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 2,3,5-8,10,11 DIG 0–DIG7 八个数据驱动线路置显示器共阴极为低电平。关闭时7219此管脚输出高电平,7221呈现高阻抗。 4,9 GND 地线 (4脚和9脚必须同时接地) 12 LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。 CS (MAX7221) 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后16位在cs端的上升沿时被锁定。 13 CLK 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿, 数据移入内部移位寄存器。 下降沿时, 数据从DOUT端输出。MAX7221来说,只有当cs端为低电平时时钟输入才有效。 14-17,20-23 SEG 7 段和小数点驱动,为显示器提供电流。当一个段驱 A–SEG G, 动关闭时,7219的此端呈低电平,7221呈现高阻抗。 DP 18 SET 通过一个电阻连接到VDD 来提高段电流。 19 V+ 正极电压输入,+5V 24 DOUT 串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有效。当使用多个MAX7219/MAX7221时用此端方便扩展。 ![](https://cf02.ickimg.com/bbsimages/202105/6d6342e05fe7f593e4e548b4cb1ed9ab.jpg) ![](https://cf02.ickimg.com/bbsimages/202105/63c706d51737f02473e90ff52367de3f.jpg) 8位LED数码管MAX7219模块(支持级联八位串行3个IO口控制) 接线说明(以提供的程序为例,可以接任意IO口,在程序中修改端口定义即可): VCC→5V GND→GND DIN→D2 CS →D3 CLK→D4 ![](https://cf02.ickimg.com/bbsimages/202105/80dab864506d93d2d141c9f4d1029c96.jpg) 模块电原理图 ![](https://cf02.ickimg.com/bbsimages/202105/d07ac295bb3207b905d94e5bb82c6935.jpg) 实验开源代码 ```cpp /@@* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验八十一: 8位LED数码管MAX7219模块 能通过验证,上传成功 仅显示“23456E86”,列为失败的程序,技术有限,只能以后再说了 */ #include
int CLK = 4; int CS = 3; int DIN = 2; //这里定义了那三个脚 int PIECENUM = 8;//数码管片数 void setup() { pinMode(CLK, OUTPUT); pinMode(CS, OUTPUT); pinMode(DIN, OUTPUT); //让三个脚都是输出状态 Delay_xms(50); Init_MAX7219(PIECENUM); Delay_xms(2000); } void loop() { Write_Max7219(1, 0x0f, 0x00, 0); //显示测试:1;测试结束,正常显示:0 for (int i = 1; i <= 5; i++) { Write_Mynum(1, i, i + 1, 1); } //Write_Mynum(1, 7, '_', 0); // Write_Mynum(1, 8, '_', 0); for (int i = 1; i <= 8; i++) { Write_Mynum(2, i, 2, 0); } for (int i = 1; i <= 8; i++) { Write_Mynum(3, i, 3, 0); } for (int i = 1; i <= 8; i++) { Write_Mynum(4, i, 8 - i, 1); } while (1); } void Delay_xms(unsigned int x) { unsigned int i, j; for (i = 0; i < x; i++) for (j = 0; j < 112; j++); } //切换地址,方便写 void Write_Mynum(int pnum, unsigned char address, unsigned char dat , int dp) { Write_Max7219(pnum, 9 - address, dat, dp); } //功能:向MAX7219写入字节 //入口参数:DATA,dp显示小数点与否 void Write_Max7219_byte(unsigned char DATA, int dp) { unsigned char i; digitalWrite(CS, LOW); for (i = 8; i >= 1; i--) { digitalWrite(CLK, LOW); if (i == 8 && dp == 1) digitalWrite(DIN, HIGH); else { if (DATA & 0X80) digitalWrite(DIN, HIGH); else digitalWrite(DIN, LOW); } DATA <<= 1; digitalWrite(CLK, HIGH); } } //功能:向MAX7219写入数据 //入口参数:pnum数码管片序号,address,dat,dp显示小数点与否 void Write_Max7219(int pnum, unsigned char address, unsigned char dat, int dp) { digitalWrite(CS, LOW); Write_Max7219_byte(address, 0); //写入地址,即数码管编号 Write_Max7219_byte(dat, dp); //写入数据,即数码管显示数字 if (pnum > 1) { digitalWrite(CLK, HIGH); for (int i = 1; i < pnum; i++) { Write_Max7219_byte(0X00, 0); Write_Max7219_byte(0X00, 0); } } digitalWrite(CS, HIGH); } //Max7219初始化 void Init_MAX7219(int pienum) { for (int i = 1 ; i <= pienum ; i++) { Write_Max7219(i, 0x09, 0xff, 0); //译码方式:BCD码 Write_Max7219(i, 0x0a, 0x03, 0); //参数3:亮度 Write_Max7219(i, 0x0b, 0x07, 0); //扫描界限;参数3:8个数码管显示 Write_Max7219(i, 0x0c, 0x01, 0); //掉电模式:参数3:0,普通模式:1 Write_Max7219(i, 0x0f, 0x01, 0); //显示测试:参数3:1;测试结束,正常显示:0 } } ``` 实验场景图 ![](https://cf02.ickimg.com/bbsimages/202105/898c05d1601855d7afc92ded8607785d.jpg) 实验开源仿真编程(Linkboy V4.2) 程序之二,显示字符3和4,小数点流水移动 ![](https://cf02.ickimg.com/bbsimages/202105/08e43b2f14f6a5560ec1b09a1575c998.jpg) 实验开源仿真编程(Linkboy V4.2) 程序之三,显示字符88888888和8个小数点 ![](https://cf02.ickimg.com/bbsimages/202105/a7a10b1bda41f20fc5bcb10f269b5361.jpg) 实验开源仿真编程(Linkboy V4.2) 程序之四,循环调整屏幕的16级亮度 ![](https://cf02.ickimg.com/bbsimages/202105/ef3f56b3b8a16d19227d1e31d7f66646.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
雕爷学编程
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交