37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕) MAX7219 是美国MAXIM 公司推出的多位LED 显示驱动器,采用3 线串行接口传送数据,可直接与单片机接口连接,用户能方便修改其内部参数,以实现多位LED 显示。它内含硬件动态扫描电路、BCD译码器、段驱动器和位驱动器。此外,其内部还含有8X8 位静态RAM,用于存放8 个数字的显示数据。显然,它可直接驱动64 段LED点阵显示器。当多片MAX7219 级联时,可控制更多的LED 点阵显示器。显示的数据通过单片机数据处理后,送给MAX7219 显示。 串行输入/输出共阴极显示驱动器 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发光的检测模式。 MAX7219内部结构图 作为一块专用的LED显示驱动芯片,MAX7219能够以动态形式驱动8位数码显示器。还可以用 n 片MAX7219进行级连,以驱动8 * n位数码显示。MAX7219与数码显示器的之间的电路极为简单,几乎连限流电阻都不用。MAX7219与单片机之间也仅仅需要连接3条引线。当单片机把数据送到MAX7219后,它就可以独立的进行动态扫描显示,无需单片机再进行干预。对于单片机来说,这些数码显示器,看起来似乎都是在进行静态显示,可以说是驱动多位数码显示器的最佳选择。 MAX7219各引脚的功能: DIN:串行数据输入端 DOUT:串行数据输出端,用于级连扩展 LOAD:装载数据输入 CLK:串行时钟输入 DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流 SEG A~SEG G DP 7段驱动和小数点驱动 ISET:通过一个10k电阻和Vcc相连,设置段电流 技术参数: 种类: LED显示驱动器 系列: MAX7219 数位数量: 8 片段数量: 64 安装风格: SMD/SMT 封装 / 箱体: SOIC-Wide-24 工作电源电压: 4 V to 5.5 V 电源电流— 大值: 330 mA 小工作温度: - 40 C 大工作温度: + 85 C 封装: Reel或Tube 高度: 2.35 mm 长度: 15.6 mm 产品: LED Display Drivers 宽度: 7.6 mm 高电平输出电流: - 2 mA 低电平输出电流: 5 mA Pd-功率耗散: 941 mW 工厂包装数量: 1000 零件号别名: MAX7219 单位重量: 734.500 mg 功能特点: 1 10MHz连续串行口 2 独立的LED段控制 3 数字的译码与非译码选择 4 150μA的低功耗关闭模式 5 亮度的数字和模拟控制 6 高电压中断显示 7 共阴极LED显示驱动 8 限制回转电流的段驱动来减少EMI(MAX7221) 9 SPI, QSPI, MICROWIRE串行接口(MAX7221) 10 24脚的 DIP和 SO 封装 MAX7219的应用电路 MAX7219点阵显示模块(8X8 LED共阴屏幕) 模块参数: 1.单个模块可以驱动一个8*8共阴点阵 2.模块工作电压:5V 3.模块尺寸:长5厘米X宽3.2厘米X高1.5厘米 4.带4个固定螺丝孔,孔径3mm,可使用M3铜柱固定 5.模块带输入输出接口,支持多个模块级联 模块电原理图 8*8 发光管点阵 1088AS 3mm共阴 8X8 高亮 红色 ★ 能在低电压、小电流条件下驱动发光 ★ 发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高 ★ 体积小,重量轻,抗冲击性能好.固态封装,封装方式为灌胶型,稳定性高 ★ 寿命长,使用寿命在5万小时以上 ★ 可连续扫描驱动各字节 ★ 良好的显示效果、视角宽 ★ 推荐恒流使用,恒压会出现亮度不均匀现象 ★ 表面有保护膜的产品,可以在使用前撕下来 ★ 焊接温度: 260℃ 停留时间最长5秒 ★ 当工作温度高于25℃时,Ifm,ifp和Id必须降低;电流降低率是-036mA/℃(直流驱动),或-0.86mA/℃(脉冲驱动)功耗率是-0.75mW/℃。产品的工作电流不能大于对应工作温度条件Ifm或Ifp的60%。 ★ 蓝色,翠绿色,白色请采取防静电措施 接线方式: (在IN方向的针脚) Arduino Uno --- MAX7219 5V VCC GND GND 12 DIN 11 CS 10 CLK 实验接线: 1.模块左边为输入端口,右边为输出端口。 2.控制单个模块时,只需要将输入端口接到单片机 3.多个模块级联时,第1个模块的输入端接单片机,输出端接第2个模块的输入端,第2个模块的输出端接第3个模块的输入端,以此类推... /* 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕) 安装库:IDE--工具--管理库--搜索“LedControl”--安装 实验源代码 */ #include int DIN = 12; int CS = 11; int CLK = 10; byte e = {0x7C,0x7C,0x60,0x7C,0x7C,0x60,0x7C,0x7C}; //E byte d = {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78}; //D byte u = {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x7E}; //U byte c = {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E}; //C byte eight = {0x7E,0x7E,0x66,0x7E,0x7E,0x66,0x7E,0x7E}; //8 byte s = {0x7E,0x7C,0x60,0x7C,0x3E,0x06,0x3E,0x7E}; //S byte dot = {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18}; //. byte o = {0x7E,0x7E,0x66,0x66,0x66,0x66,0x7E,0x7E}; //O byte m = {0xE7,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0xC3}; //M LedControl lc=LedControl(DIN,CLK,CS,4); void setup(){ lc.shutdown(0,false); //启动时,MAX72XX处于省电模式 lc.setIntensity(0,8); //将亮度设置为最大值 lc.clearDisplay(0); //清除显示 } void loop(){ byte smile = {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};//笑脸 byte neutral = {0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};//标准脸 printByte(eight);//显示8 delay(1000);//延时1秒 printByte(neutral);//显示标准脸 delay(1000); } //点阵显示函数 void printByte(byte character 图形编程 仿真编程 /* 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目:全屏亮暗各1秒 引脚定义 DIN = D11 CS = D10 CLK = D13 */ #include const byte sprite = { {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}, {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, }; const byte DECODEMODE = 0x09; const byte INTENSITY = 0x0a; const byte SCANLIMIT = 0x0b; const byte SHUTDOWN = 0x0c; const byte DISPLAYTEST = 0x0f; void max7219(const byte reg, const byte data) { digitalWrite(SS, LOW); SPI.transfer(reg); SPI.transfer(data); digitalWrite(SS, HIGH); } void setup() { SPI.begin(); max7219(SCANLIMIT, 7); max7219(DECODEMODE, 0); max7219(INTENSITY, 2); max7219(DISPLAYTEST, 0); max7219(SHUTDOWN, 1); for(byte i=0; i<8; i++) { max7219(i+1, 0); } } void loop() { for(byte j=0; j<2; j++) { for(byte i=0; i<8; i++) { max7219(i+1, sprite ); } delay(1000); } } /* 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十二:MAX7219点阵显示模块(8X8 LED共阴) 项目四:全屏红心跳动 引脚定义 DIN = D11 CS = D10 CLK = D13 */ #include const byte sprite = { { 0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18 }, { 0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00 } }; const byte DECODEMODE = 0x09; const byte INTENSITY = 0x0a; const byte SCANLIMIT = 0x0b; const byte SHUTDOWN = 0x0c; const byte DISPLAYTEST = 0x0f; void max7219(const byte reg, const byte data) { digitalWrite(SS, LOW); SPI.transfer(reg); SPI.transfer(data); digitalWrite(SS, HIGH); } void setup() { SPI.begin(); max7219(SCANLIMIT, 7); max7219(DECODEMODE, 0); max7219(INTENSITY, 2); max7219(DISPLAYTEST, 0); max7219(SHUTDOWN, 1); for(byte i=0; i<8; i++) { max7219(i+1, 0); } } void loop() { for(byte j=0; j<2; j++) { for(byte i=0; i<8; i++) { max7219(i+1, sprite ); } delay(500); } }