“(SKU:)八位数码管”的版本间的差异
来自DFRobot Product Wiki
Dfrobot-bj(讨论 | 贡献) (→地址修改说明) |
Dfrobot-bj(讨论 | 贡献) (→地址修改说明) |
||
第86行: | 第86行: | ||
|align="center"|0xE6 | |align="center"|0xE6 | ||
|} | |} | ||
− | <br><br><br><br> | + | <br><br><br><br>br><br>br><br> |
硬件地址如上表所示,而软件控制地址为上述地址右移一位后的地址,这是由Wire通信协议决定的,详情见[https://www.arduino.cc/en/Reference/Wire 官方Wire库] | 硬件地址如上表所示,而软件控制地址为上述地址右移一位后的地址,这是由Wire通信协议决定的,详情见[https://www.arduino.cc/en/Reference/Wire 官方Wire库] | ||
<br><br><br><br> | <br><br><br><br> |
2019年7月5日 (五) 16:46的版本
目录 |
简介
这款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的不同组合来实现。
地址控制器格式:
MSB | D6 | D5 | D4 | D3 | D2 | D1 | LSB |
1 | 1 | 1 | 0 | 0 | A1 | A0 | R/W |
其中:写地址R/W=0,则:
A1 | A0 | 地址 |
0 | 0 | 0xE0 |
0 | 1 | 0xE2 |
1 | 0 | 0xE4 |
1 | 1 | 0xE6 |
br>
br>
硬件地址如上表所示,而软件控制地址为上述地址右移一位后的地址,这是由Wire通信协议决定的,详情见官方Wire库
Arduino平台应用
Arduino 连接图
引脚图
示例代码
//该数码管有两种地址显示模式,该程序先用地址一显示,在关闭显示之后用地址二显示,为了与地址一显示区分开,地址二显示中设置了闪烁频率 #include <Wire.h> /***************************地址定义***************************/ #define address 0x70 //控制寄存器地址 /***************************功能定义***************************/ #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};//显示数据(从左至右):0~9,a~f /*****************************写命令****************************/ void I2C_Write_CMD(unsigned char CMD) { Wire.beginTransmission(address); Wire.write(CMD); Wire.endTransmission(); } /***************************写显示数据***************************/ /*************地址一*************/ void I2C_Write_DATA1(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 I2C_Write_DATA2(unsigned char reg,unsigned char DATA) { Wire.write(reg); //显示寄存器地址为(从左至右):0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 Wire.write(DATA); } //------------------------------------------------------------------------------------------------------------------------------/ 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_DATA1(j,TAB[i]|0x80); //j为显示寄存器地址变量,TAB取值为显示数据变量,TAB值与0x80相或即将最高位置1,用于点亮小数点 } delay(500); } I2C_Write_CMD(DISP_OFF); //关闭显示 delay(1000); I2C_Write_CMD(DISP_ON); //开启显示 /***************************地址二显示***************************/ I2C_Write_CMD(Flash_HalfS); //设置闪烁频率 for(i=0;i<16;i++) { Wire.beginTransmission(address); for(j=0;j<8;j++) { I2C_Write_DATA2(j,TAB[i]|0x80); //j为显示寄存器地址变量,TAB取值为显示数据变量,TAB值与0x80相或即将最高位置1,用于点亮小数点 } Wire.endTransmission(); delay(500); } I2C_Write_CMD(DISP_OFF); //关闭显示 delay(1000); I2C_Write_CMD(DISP_ON); //开启显示 }