Arduino与Proteus仿真实例-HT16K33驱动8位16段数码管仿真

HT16K33驱动8位16段数码管仿真

16段显示模块是一种用于显示数字的电子设备,由16个LED段组成。 由于 LED 的尺寸很小,因此很容易将多个 LED 连接在一起以形成一个类似16段显示器的单元。 在16段显示模块中,16个LED排列成一个矩形。 有时,在16段显示单元中会看到一个额外的 LED,用于显示小数点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZaK2gUD-1636331104875)(images/52-1.png)]

在前面的实例中,对7段数码管做了详细的介绍,14段数码管与7段数码管类似,请参考:

HT16K33 是一个内存映射和多功能 LED 控制器驱动器。 设备中最大显示段数为128个模式(16段和8个公共点),带有13*3(MAX.)矩阵键扫描电路。 HT16K33 的软件配置特性使其适用于多种 LED 应用,包括 LED 模块和显示子系统。 HT16K33 与大多数微控制器兼容,并通过两线双向 I2C 总线进行通信。

在前面的实例中,对HT16K33做了相关介绍,请参考:

1、仿真电路原理图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8caYzGno-1636331104878)(images/52-2.png)]

3、仿真代码实现

本次使用到如下开源库:

由于Adafruit_LED_Backpack库没有16段数码的驱动,下面在Adafruit_LED_Backpack库的基础实现16段数码管驱动

1)驱动定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/\*!
@brief Class for four-digit alphanumeric displays.
\*/
class Adafruit_AlphaNum16 : public Adafruit_LEDBackpack {
public:
/\*!
@brief Constructor for four-digit alphanumeric displays.
\*/
Adafruit\_AlphaNum16(void);

/\*!
@brief Write single character of alphanumeric display as raw bits
(not a general print function).
@param n Character index (0-3).
@param bitmask Segment bitmask.
\*/
void writeDigitRaw(uint8\_t n, uint16\_t bitmask);

/\*!
@brief Write single ASCII character to alphanumeric display.
@param n Character index (0-3).
@param ascii ASCII character.
@param dot If true, also light corresponding dot segment.
\*/
void writeDigitAscii(uint8\_t n, uint8\_t ascii, bool dot = false);
};

2)驱动实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Adafruit_AlphaNum16::Adafruit\_AlphaNum16(void) {}

void Adafruit_AlphaNum16::writeDigitRaw(uint8\_t n, uint16\_t bitmask) {
displaybuffer[n] = bitmask;
}

void Adafruit_AlphaNum16::writeDigitAscii(uint8\_t n, uint8\_t a, bool d) {
uint16\_t font = pgm\_read\_word(SixteenSegmentASCII + a);

displaybuffer[n] = font;

/\*
Serial.print(a, DEC);
Serial.print(" / '"); Serial.write(a);
Serial.print("' = 0x"); Serial.println(font, HEX);
\*/

if (d)
displaybuffer[n] |= (1 << 16);
}

3)演示程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

#include <Wire.h>
#include <Adafruit\_GFX.h>
#include "Adafruit\_LEDBackpack.h"

Adafruit_AlphaNum16 alpha16 = Adafruit\_AlphaNum16();

void setup() {
Serial.begin(9600);

alpha16.begin(0x70); // pass in the address
alpha16.clear();
//alpha16.writeDigitRaw(0,(0b0100010011111111));
/\*
alpha16.writeDigitAscii(1,'1');
alpha16.writeDigitAscii(2,'2');
alpha16.writeDigitAscii(3,'3');
alpha16.writeDigitAscii(4,'4');
alpha16.writeDigitAscii(5,'5');
alpha16.writeDigitAscii(6,'6');
alpha16.writeDigitAscii(1,'7');\*/
alpha16.writeDisplay();
}


void loop() {

alpha16.writeDisplay();
delay(200);
for(int i = 0;i < 10;i++){
alpha16.clear();
alpha16.writeDisplay();
for(int j = 0;j < 8;j++){
alpha16.writeDigitAscii(j,i + '0');
}
alpha16.writeDisplay();
delay(300);
}
for(int i = 0;i < 26;i++){
alpha16.clear();
alpha16.writeDisplay();

for(int j = 0;j < 8;j++){
alpha16.writeDigitAscii(j,i + 'A');
}
alpha16.writeDisplay();
delay(300);
}
}

3、仿真结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0yZ4JZ8-1636331104880)(images/52-3.gif)]

4、附16段数码管字体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const uint16\_t PROGMEM SixteenSegmentASCII[] = {
0b0000000000000001, 0b0000000000000010, 0b0000000000000100,
0b0000000000001000, 0b0000000000010000, 0b0000000000100000,
0b0000000001000000, 0b0000000010000000, 0b0000000100000000,
0b0000001000000000, 0b0000010000000000, 0b0000100000000000,
0b0001000000000000, 0b0010000000000000, 0b0100000000000000,
0b1000000000000000, 0b0000000000000000, 0b0000000000000000,
0b0000000000000000, 0b0000000000000000, 0b0000000000000000,
0b0000000000000000, 0b0000000000000000, 0b0000000000000000,
0b0001001011001001, 0b0001010111000000, 0b0001001011111001,
0b0000000011100011, 0b0000010100110000, 0b0001001011001000,
0b0011101000000000, 0b0001011100000000,
0b0000000000000000, /\* (space) \*/
0b0000000000001100, /\* ! \*/
0b0000001000000100, /\* " \*/
0b1010101000111100, /\* # \*/
0b1010101010111011, /\* $ \*/
0b1110111010011001, /\* % \*/
0b1001001101110001, /\* & \*/
0b0000001000000000, /\* ' \*/
0b0001010000000000, /\* ( \*/
0b0100000100000000, /\* ) \*/
0b1111111100000000, /\* \* \*/
0b1010101000000000, /\* + \*/
0b0100000000000000, /\* , \*/
0b1000100000000000, /\* - \*/
0b0001000000000000, /\* . \*/
0b0100010000000000, /\* / \*/
0b0100010011111111, /\* 0 \*/
0b0000010000001100, /\* 1 \*/
0b1000100001110111, /\* 2 \*/
0b0000100000111111, /\* 3 \*/
0b1000100010001100, /\* 4 \*/
0b1001000010110011, /\* 5 \*/
0b1000100011111011, /\* 6 \*/
0b0000000000001111, /\* 7 \*/
0b1000100011111111, /\* 8 \*/
0b1000100010111111, /\* 9 \*/
0b0010001000000000, /\* : \*/
0b0100001000000000, /\* ; \*/
0b1001010000000000, /\* < \*/
0b1000100000110000, /\* = \*/
0b0100100100000000, /\* > \*/
0b0010100000000111, /\* ? \*/
0b0000101011110111, /\* @ \*/
0b1000100011001111, /\* A \*/
0b0010101000111111, /\* B \*/
0b0000000011110011, /\* C \*/
0b0010001000111111, /\* D \*/
0b1000000011110011, /\* E \*/
0b1000000011000011, /\* F \*/
0b0000100011111011, /\* G \*/
0b1000100011001100, /\* H \*/
0b0010001000110011, /\* I \*/
0b0000000001111100, /\* J \*/
0b1001010011000000, /\* K \*/
0b0000000011110000, /\* L \*/
0b0000010111001100, /\* M \*/
0b0001000111001100, /\* N \*/
0b0000000011111111, /\* O \*/
0b1000100011000111, /\* P \*/
0b0001000011111111, /\* Q \*/
0b1001100011000111, /\* R \*/
0b1000100010111011, /\* S \*/
0b0010001000000011, /\* T \*/
0b0000000011111100, /\* U \*/
0b0100010011000000, /\* V \*/
0b0101000011001100, /\* W \*/
0b0101010100000000, /\* X \*/
0b1000100010111100, /\* Y \*/
0b0100010000110011, /\* Z \*/
0b0010001000010010, /\* [ \*/
0b0001000100000000, /\* \ \*/
0b0010001000100001, /\* ] \*/
0b0101000000000000, /\* ^ \*/
0b0000000000110000, /\* \_ \*/
0b0000000100000000, /\* ` \*/
0b1010000001110000, /\* a \*/
0b1010000011100000, /\* b \*/
0b1000000001100000, /\* c \*/
0b0010100000011100, /\* d \*/
0b1100000001100000, /\* e \*/
0b1010101000000010, /\* f \*/
0b1010001010100001, /\* g \*/
0b1010000011000000, /\* h \*/
0b0010000000000000, /\* i \*/
0b0010001001100000, /\* j \*/
0b0011011000000000, /\* k \*/
0b0000000011000000, /\* l \*/
0b1010100001001000, /\* m \*/
0b1010000001000000, /\* n \*/
0b1010000001100000, /\* o \*/
0b1000001011000001, /\* p \*/
0b1010001010000001, /\* q \*/
0b1000000001000000, /\* r \*/
0b1010000010100001, /\* s \*/
0b1000000011100000, /\* t \*/
0b0010000001100000, /\* u \*/
0b0100000001000000, /\* v \*/
0b0101000001001000, /\* w \*/
0b0101010100000000, /\* x \*/
0b0000101000011100, /\* y \*/
0b1100000000100000, /\* z \*/
0b1010001000010010, /\* { \*/
0b0010001000000000, /\* | \*/
0b0010101000100001, /\* } \*/
0b1100110000000000, /\* ~ \*/
0b0000000000000000, /\* (del) \*/
};

文章来源: https://iotsmart.blog.csdn.net/article/details/121200810