(SKU:)八位数码管

来自DFRobot Product Wiki
跳转至: 导航搜索

thumb|300px|right|八位数码管

目录

简介

这款8位数码管是所采用的是一款存储器映射和多功能 LED控制驱动芯片。该芯片支持最大128点的显示模式(16SEGs×8COMs)以及最大13×3的按键矩阵扫描电路。HT16K33的软件配置特性使其适用于多种 LED 应用,包括LED模块和显示子系统。采用IIC接口只需要2个普通IO即可驱动,不需要mcu扫描,节省mcu资源。

性能描述

  • 工作电压:4.5V~5.5V
  • 工作电流:2mA
  • 待机电流:10uA
  • I2C总线接口
  • 16x8位RAM用于存储显示数据
  • 内部 RC 振荡器
  • 四种可更改的从机地址

引脚说明

八位数码管



引脚说明
名称 功能描述
SDA 数据线
SCL 控制线
GND 电源负极
VCC 电源正极








地址修改说明

地址修改

该数码管背部预留了A0,A1两个数据位的焊盘(断开为0,连接为1),可以通过A0,A1的不同组合来实现四种从机地址(如右图所示)。
数码管地址控制器格式:

MSB D6 D5 D4 D3 D2 D1 LSB
1 1 1 0 0 A1 A0 R/W





其中:D3~D7位不可更改,进行写操作时D0位R/W=0,则:

A1 A0 地址
0 0 0xE0
0 1 0xE2
1 0 0xE4
1 1 0xE6










硬件地址如上表所示,而软件控制地址为上述地址右移一位后的地址(即0x70,0x71,0x72,0x73),这是由Wire通信协议决定的,详情见官方Wire库



















写操作说明

字节写操作

一个字节写操作由一个START信号、一个带R/W位的从机地址、一个有效的命令字节寄存器地址、一组数据以及一个STOP信号组成。
写操作.png

页写操作

START信号和带R/W位的从机地址发送至总线后,接着发送寄存器地址给从机,该寄存器地址将被写入地址指针。接收到应答信号后,接着发送要写入存储器的数据,内部地址指针会自动递增至下一个地址位置。当到达显示存储器地址0x0FH后地址指针返回到0x00H。
页写操作.png

Arduino平台应用

Arduino 连接图

Arduino八位数码管接线图


示例代码

#include <Wire.h>
/***************************地址定义***************************/
#define address     0x70  //控制寄存器地址;硬件地址默认为0xE0,可修改为:0xE2或0xE4或0xE6;(移位后的软件控制地址为:0x70,0x71,0x72,0x73)
/***************************功能定义***************************/
#define OSC_OFF     0x20  //时钟关
#define OSC_ON      0x21  //时钟开
#define DISP_OFF    0x80  //显示关
#define DISP_ON     0x81  //显示开
#define Flash_TwoS  0x87  //闪烁频率:0.5Hz
#define Flash_OneS  0x85  //闪烁频率:1Hz
#define Flash_HalfS 0x83  //闪烁频率:2Hz
#define BRIGHTNESS  15    //亮度设置:16级亮度调节,由暗至亮:0~15
/***************************数码管位码***************************/
unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};//显示数据(从左至右):0~9,a~f
/*****************************写命令****************************/
void I2C_Write_CMD(unsigned char CMD)
{
  Wire.beginTransmission(address);
  Wire.write(CMD);
  Wire.endTransmission();
}

/***************************写显示数据***************************/
void I2C_Write_DATA(unsigned char reg,unsigned char DATA)
{
  Wire.beginTransmission(address);
  Wire.write(reg*2); //显示寄存器地址为(从左至右):0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e
  Wire.write(DATA);
  Wire.endTransmission();  
}

void setup() 
{
  Wire.begin();
  I2C_Write_CMD(OSC_ON);          //开启时钟  
  I2C_Write_CMD(DISP_ON);         //开启显示
  I2C_Write_CMD(0xE0|BRIGHTNESS); //设置亮度
}

void loop()
{
  unsigned char i,j;
  for(i=0;i<16;i++)
    {
      for(j=0;j<8;j++)
        {
          I2C_Write_DATA(j,TAB[i]); //j为显示寄存器地址变量,TAB取值为显示数据变量,TAB值与0x80相或即将最高位置1,用于点亮小数点
        }
        delay(500);
    }
  I2C_Write_CMD(DISP_OFF);  //关闭显示
  delay(1000);
  I2C_Write_CMD(DISP_ON);   //开启显示
  I2C_Write_CMD(Flash_HalfS);//开启闪烁,闪烁频率:2Hz
  for(i=0;i<16;i++)
    {
      Wire.beginTransmission(address);  
      for(j=0;j<8;j++)
        {
          I2C_Write_DATA(j,TAB[i]|0x80); //
        }
      Wire.endTransmission();      
      delay(500);
    }
  I2C_Write_CMD(DISP_OFF);  //关闭显示
  delay(1000);
  I2C_Write_CMD(DISP_ON);   //开启显示
} 
个人工具
名字空间

变换
操作
导航
工具箱