TM1652 驱动两位数码管
时间: 2023-08-26 09:04:55 浏览: 350
TM1652_V1.0_TM1652驱动_TM1652数码管_TM1652_
5星 · 资源好评率100%
TM1652是一种常用于驱动数字显示器的芯片,可以方便地控制数字的显示和亮度调节。它可以通过I2C总线协议来和主控芯片进行通信,支持最多8个数字管的控制。
以下是使用TM1652驱动两位数码管的示意图和代码:
示意图:
```
+----+ +----+
| D1 | | D2 |
+----+ +----+
| | | |
| | | |
--- --- --- ---
| | | |
| | | |
+----+ +----+
| D3 | | D4 |
+----+ +----+
```
代码:
```c
#include <Wire.h>
#define TM1652_ADDR 0x24 // TM1652芯片的地址
byte tube[2] = {0x00, 0x00}; // 存储两位数码管的数值
void setup() {
Wire.begin(); // 初始化I2C总线
writeByte(0x48); // 在TM1652芯片上配置亮度为最大值
}
void loop() {
int num = 99; // 要显示的数字
int tens = num / 10; // 十位数
int ones = num % 10; // 个位数
tube[0] = getTubeCode(tens); // 转换为数码管显示码
tube[1] = getTubeCode(ones);
display(); // 显示数值
}
void writeByte(byte data) {
Wire.beginTransmission(TM1652_ADDR);
Wire.write(data);
Wire.endTransmission();
}
byte getTubeCode(int num) {
byte code = 0;
switch (num) {
case 0: code = 0x3f; break;
case 1: code = 0x06; break;
case 2: code = 0x5b; break;
case 3: code = 0x4f; break;
case 4: code = 0x66; break;
case 5: code = 0x6d; break;
case 6: code = 0x7d; break;
case 7: code = 0x07; break;
case 8: code = 0x7f; break;
case 9: code = 0x6f; break;
}
return code;
}
void display() {
Wire.beginTransmission(TM1652_ADDR);
Wire.write(0x44); // 启动数据传输
Wire.endTransmission();
Wire.beginTransmission(TM1652_ADDR);
Wire.write(0xC0); // 写入第一个数码管的地址
Wire.write(tube[0]); // 写入第一个数码管的数值
Wire.write(tube[1]); // 写入第二个数码管的数值
Wire.endTransmission();
}
```
以上代码使用了一个getTubeCode函数,将数字转换为数码管显示码。可以根据需要修改该函数来适应不同类型的数码管。
阅读全文