【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块2

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十五:I2C红色8*8LED点阵屏模块 HT16k33(VK16K33)驱动1088BS 物联网可扩展编程

在这里插入图片描述
在这里插入图片描述

知识点:VK16K33芯片
是一款存储器映射和多功能LED控制驱动芯片。该芯片支持更大 128 点的显示模式(16SEGs×8COMs) 以及更大 13×3 的按键矩阵扫描电路。VK16K33 的软件配置特性使其适用于多种 LED 应用,包括 LED 模块和显示子系统。VK16K33 通过双向I2C 接口可与大多数微控制器进行通信。

功能特点1.工作电压:4.5V~5.5V2.内部 RC 振荡器3.I2C 总线接口4.16×8 位 RAM 用于存储显示数据5.更大显示模式为16×8:16SEGs和8COMs6.读 /写地址自动递增7.多达13×3 按键矩阵扫描功能8. 16阶调光电路9.封装类型:20/24/28-pin SOP VK16K33此系列IC具有低功耗、高抗杂讯及高系统ESD防护能力;VK16K33整合了LED驱动和按键扫描的功能,将控制面板所需要的功能融合于一身,可降低主MCU的负担及需要的I/O数目。采用I2C的介面更可减少控制面板和主板之间的材料成本、进而降低产品整体成本。

VK16K33有28SOP、24SOP和20SOP三种包装,分别对应三种更大显示点数;16x8点LED和13x3个按键、12x8点LED和10x3个按键,以及8x8点LED和8x3个按键。内建显示记忆体及RC振荡电路;工作电压:4.5V~5.5V;VK16K33支持中断信号和轮询两种工作模式。可选择性的提供按键中断信号给MCU,MCU可不须一直检查按键状态。VK16K33与系统控制晶片的传输只需2根信号线,通过VK16K33 侦测按键输入,可减少主版MCU I/O数目及精简主版及面板的布局线路;因此可降低产品整体成本。 VK16K33适用于家电、影音设备、仪表设备、车用装置等LED显示器/面板的控制及驱动。

在这里插入图片描述

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
项目之二:流水瀑布,循环显示

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
  项目之二:流水瀑布,循环显示
  实验接线:
  VK16k33    UNO
  VIN        5V
  GND        GND
  SCL        A5
  SDA        A4
*/

// 引用I2C库
#include <Wire.h>

// 引用ht16k33库
#include "ht16k33.h"

// LED Matrix 模块默认地址为:0x70
#define I2C_ADDR 0x70

HT16K33 *led = NULL;  // 申明模块变量

void setup() {
    
    
  // 初始化I2C, 也可以使用TwoWire
  Wire.begin();
  // 初始化串口
  Serial.begin(115200);

  while (led == NULL) {
    
    
    // 当led没有实例化,就循环检测模块是否连接
    Wire.beginTransmission(I2C_ADDR);
    uint8_t error = Wire.endTransmission();
    if (error == 0) {
    
    
      Serial.print("LED Matrix module is found at address 0x");
      Serial.println(I2C_ADDR, HEX);
      led = new HT16K33(I2C_ADDR);
    }
    delay(2000);
  }

  // 打开模块
  led->displayOn();
}

void loop() {
    
    
  if (led != NULL) {
    
    
    // 清除模块所有显示
    led->clear();
    // 每次需要刷新模块显示,都需要调用write方法将数据传递给模块
    led->write();

    // 瀑布demo
    for (int i = 0; i < 8; i++) {
    
    
      for (int j = 0; j < 8; j++) {
    
    
        led->setPixel(i, j, 1);
        led->write();
        delay(30);
      }
    }
  }
  delay(2000);
}

实验场景图 动态图

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
项目之三:8x8 LED 矩阵测试,显示“T”

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
  项目之三:8x8 LED 矩阵测试,显示“T”
  实验接线:
  VK16k33    UNO
  VIN        5V
  GND        GND
  SCL        A5
  SDA        A4
*/

// For I2C
#include <Wire.h>
// Libraries for Matrix
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_8x8matrix matrix = Adafruit_8x8matrix();

void setup() {
    
    
  Serial.begin(9600);
  // Good idea to send data to both
  // device and serial as it helps with
  // troubleshooting.
  Serial.println("8x8 LED 矩阵测试");
  // set the address
  matrix.begin(0x70);
}

void loop() {
    
    
  // Make sure where led 0x0 is:
  // And it is working
  matrix.setTextSize(1);
  matrix.setTextColor(LED_ON);
  // clear the matrix
  matrix.clear();
  // position the cursor
  matrix.setCursor(2, 0);
  // text to print
  matrix.print("T");
  Serial.println("显示‘T’");
  // write the data out to the matrix
  matrix.writeDisplay();
  // how fast the characters are displayed
  delay(1000);
}

实验串口返回情况

在这里插入图片描述

实验场景图

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
项目之四:8x8 LED 矩阵测试,显示一斜线

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零七:I2C红色8*8LED点阵模块VK16k33驱动1088BS树莓派物联网可扩展编程
  项目之四:8x8 LED 矩阵测试,显示一斜线
  实验接线:
  VK16k33    UNO
  VIN        5V
  GND        GND
  SCL        A5
  SDA        A4
*/

// For I2C
#include <Wire.h>
// Libraries for Matrix
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_8x8matrix matrix = Adafruit_8x8matrix();

void setup() {
    
    
  Serial.begin(9600);
  // Good idea to send data to both
  // device and serial as it helps with
  // troubleshooting.
  Serial.println("8x8 LED 矩阵测试");
  // set the address
  matrix.begin(0x70);
}

void loop() {
    
             
 // clear display        
 matrix.clear();        
 // set (start pixel x,y end pixel, ON)            
 matrix.drawLine(1,0, 8,7, LED_ON);       
 // write RAM to matrix        
 matrix.writeDisplay();       
 delay(500);       
 }       

实验场景图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132143615
今日推荐