“(SKU:)八位数码管”的版本间的差异
来自DFRobot Product Wiki
Dfrobot-bj(讨论 | 贡献) (→写数据操作) |
Dfrobot-bj(讨论 | 贡献) |
||
第92行: | 第92行: | ||
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> | <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> | ||
− | + | ||
− | + | ||
==Arduino平台应用== | ==Arduino平台应用== | ||
第173行: | 第172行: | ||
} | } | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
2019年7月5日 (五) 17:32的版本
目录 |
简介
这款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库
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); //开启显示 }