你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
乐鑫esp8266使用 SPI 驱动Max7219芯片的驱八位数码管!
立即下载
用AI写一个
金额:
5
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
发布时间:2019-03-23
19人
|
浏览:9715次
|
收藏
|
分享
技术:C语言
运行环境:cywin
概述
乐鑫esp8266使用 SPI 驱动Max7219芯片的驱八位数码管!
详细
# 一、前言。 ------------------------------------------------------- - 前面我已经为大家分享了`esp8266`驱动`ds18b20`、`OLED`等外设驱动,今天有幸给大家分享下一个使用`spi`驱动Max7219芯片的八位数码管! ------------------------------------------------------- ![](/contentImages/image/20190322/RwTMzsQpsC2SCUn54cc.png) ------------------------------------------------------- # 二、认识`MAX7219`。 ------------------------------------------------------- ## 2.1 概述。 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发光的检测模式。 在应用时要求3V的操作电压或segment blinking,可以查阅MAX6951数据资料。 -------------------------- ## 2.2 管脚配置。 ![](/contentImages/image/20190322/YzPXMVyCGGHuXly1w2G.png) - 其中,各个管脚如下说明: | 管脚 |名称 |说明 | |--|--|--| | 1 | DIN | 串行数据输入端口。在时钟上升沿时数据被载入内部的 16 位寄存器。| | 2,3,5-8,10,11|DIG 0–DIG 7 | 八个数据驱动线路置显示器共阴极为低电平。关闭7219 此管脚输出高电平,7221 呈现高阻抗。| | 4、9 | GND| 地线(4 脚和 9 脚必须同时接地)。| | 12| LOAD| 载入数据。连续数据的后 16 位在 LOAD 端的上升沿时被锁定。| | 13 | CLK| 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿,数据移入内部移位寄存器。下降沿时,数据从 DOUT端输出。对 MAX7221 来说,只有当cs 端为低电平时时钟输入才有效。| | 14-17,20-23 |SEG A–SEG G, DP | 7 段和小数点驱动,为显示器提供电流。当一个段驱动关闭时,7219 的此端呈低电平,7221 呈现高阻抗。| | 14-17,20-23 | DIN | 串行数据输入端口。在时钟上升沿时数据被载入内部的 16 位寄存器。| | 18 | SET| 串行数据输入端口。在时钟上升沿时数据被载入内部的 16 位寄存器。| | 19 | Vcc| 正极电压输入,+5V。| | 24 | DOUT| 串行数据输出端口,从 DIN 输入的数据在 16.5 个时钟周期后在此端有效。当使用多个MAX7219/MAX7221时用此端方便扩展。| -------------------------- ## 2.3 时序图。 ![在这里插入图片描述](/contentImages/image/20190323/87kPpscc6BDmDGUDgUQ.png) 对 MAX7219 来说,串行数据在 DIN 输入 16 位数据包,无论 LOAD 端处于何种状态,在时钟的上升沿数据均移入到内部 16 位移位寄存器。对 MAX7221 来说,无论数据输入或输出cs 必须为低电平。然后数据在 LOAD/ cs 的上升沿被载入数据寄存器或控制寄存器。LOAD/ cs 端在第 16 个时钟的上升沿同时或之后,下个时钟上升沿之前变为高电平,否则数据将会丢失。在 DIN 端的数据传输到移位寄存器在 16.5 个时钟周期之后出现在 DOUT 端。 在时钟的下降沿数据将被输出。数据位标记为 D0-D15(如下表示)。D8-D11 为寄存器地址位。D0-D7 为数据位。D12-D15 为无效位。在传输过程中,首先接收到的是 D15 位,是非常重要的一位(MSB)。 ![在这里插入图片描述] ![](/contentImages/image/20190323/hQtHClbB8OrE5FFavTX.png) ------------------------------------------------------- # 三、认识`esp8266`的spi。 ------------------------------------------------------- - `esp8266`有两组`spi`接口,但是第一组已经用来和`flash`芯片通讯了!所以我们只能用第二组也就是各引脚寄存器功能定义,12引脚为MISO(输入)引脚,13引脚为MOSI(输出)引脚,14引脚为CLK(时钟)引脚,15引脚为CS(片选)!所以我们如下显示接法:
把MAX7219八位数码管显示模块的CS(LOAD)引脚接至Esp8266的15引脚,MAX7219八位数码管显示模块的CLK引脚接至Esp8266的14引脚,MAX7219八位数码管显示模块的DIN引脚接至Esp8266的13引脚!**电源共地即可!!** ![](/contentImages/image/20190322/fbHWI9OQqikNNBwkkdE.png) ------------------------------------------------------- # 四、代码如何使用。 ------------------------------------------------------- - `esp8266`的spi驱动代码我从 `GitHub`下载的,具体的来源也忘了。。。。也就三个文件:`spi.c`、`spi.h`和`spi_register.h`; - 下面是一个一秒加1的程序示范: ``` LOCAL int flagTime = 0; void ICACHE_FLASH_ATTR Led_Show_Time() { flagTime++; int unitPlace = flagTime / 1 % 10; int tenPlace = flagTime / 10 % 10; int hundredPlace = flagTime / 100 % 10; int thousandPlace = flagTime / 1000 % 10; os_printf("个位:%d\n十位:%d\n百位:%d\n千位:%d\n", unitPlace, tenPlace, hundredPlace,thousandPlace); //设置相应位显示的数字 spi_transaction(1, 0, 0, 8, 0x01, 8, unitPlace, 0, 0); spi_transaction(1, 0, 0, 8, 0x02, 8, tenPlace, 0, 0); spi_transaction(1, 0, 0, 8, 0x03, 8, hundredPlace, 0, 0); spi_transaction(1, 0, 0, 8, 0x04, 8, thousandPlace, 0, 0); spi_transaction(1, 0, 0, 8, 0x05, 8, 0, 0, 0); spi_transaction(1, 0, 0, 8, 0x06, 8, 0, 0, 0); spi_transaction(1, 0, 0, 8, 0x07, 8, 0, 0, 0); spi_transaction(1, 0, 0, 8, 0x08, 8, 0, 0, 0); } void ICACHE_FLASH_ATTR user_init(void) { os_printf("SDK version:%s\n", system_get_sdk_version()); //spi引脚接口初始化,参数 1表示为HSPI spi_init(1); //译码方式:BCD码,第5个参数为译码寄存器地址,第7个函数为设置译码寄存器的命令,下面各语句类同,向指定寄存器发送(设置)数据 spi_transaction(1, 0, 0, 8, 0x09, 8, 0xff, 0, 0); //亮度级别 spi_transaction(1, 0, 0, 8, 0x0a, 8, 0x0b, 0, 0); //扫描界限;4个数码管显示 spi_transaction(1, 0, 0, 8, 0x0b, 8, 0x07, 0, 0); //掉电模式:0,普通模式:1 spi_transaction(1, 0, 0, 8, 0x0c, 8, 0x01, 0, 0); //显示测试:1;测试结束,正常显示:0 spi_transaction(1, 0, 0, 8, 0x0f, 8, 0x01, 0, 0); os_delay_us(60000); os_timer_disarm(&ShowTime); os_timer_setfn(&ShowTime, (os_timer_func_t *)Led_Show_Time, NULL); os_timer_arm(&ShowTime, 1000, 1); } ``` ------------------- - 效果如下: ------------------- ![](/contentImages/image/20190322/IkC2DeJSDWFvBj04rH5.gif) # 五、项目结构图 > 项目结果图如下 ![](/contentImages/image/20190323/3smPhO9uzlwAUvH4VgR.png)
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
0
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
半颗心脏
13
例子数量
740
帮助
127
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
基于Android的rgb七彩环颜色采集器
企业者的福音之8266接入阿里智能,点亮一盏灯。
乐鑫esp8266的 基于Nonos移植红外线1883,实现遥控器控制
Android开发SDK接入机智云,智能家居实现APP远程控制多设备
实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件。
乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本
esp8266烧录Html文件,实现内置网页控制设备!
动起来做一个微信小程序Mqtt协议控制智能硬件的框架,支持短线重连!
乐鑫esp8266使用 SPI 驱动Max7219芯片的驱八位数码管!
在支付宝小程序上websocket实现mqtt协议连接服务器控制硬件。
乐鑫esp32 sdk编程驱动ws2812灯珠,实现彩虹光彩夺目效果。
微信小程序ble蓝牙控制esp32,实现无需网络也可以控制亮度;