该库将您的 Arduino 变成一个七段显示控制器。使用它可以轻松地在七段显示器上显示数字,无需任何额外的控制器。该库不支持移位寄存器。
支持:
Arduino 连接
所有数字引脚都可以连接到Arduino的任何数字引脚,或具有数字支持的模拟引脚;大多数 Arduino 上的模拟引脚都具有数字支持,但 Arduino Nano 是一个例外。
限流电阻
不要忘记显示器使用的是LED,因此您应该在数字引脚上串联限流电阻。如果您不确定的话,330 欧姆是一个安全值。
硬件配置
您必须将库的硬件配置指定为 sevseg.begin 中的第一个参数。下面详细介绍了这些选项。
简单、低功耗的显示器
这些显示器直接通过 Arduino 输出引脚供电。(购买时要问清楚是共阳极还是共阴极)
带开关的显示器
一些显示器(大多数是较大的显示器)使用开关晶体管,但大多数人不必担心以下配置。
引脚排列示例
在下面的引脚排列中,数字编号为 1、2、3、4。段编号为 A 到 G 加上小数点 (DP) 。引脚按显示器正面的顺序排列。
- 1至8位数字显示
- 共阴极和共阳极显示器
- 开关晶体管
- 十六进制和十进制数字显示
- 小数位
- 输入整数或浮点数字
- 字母数字字符(尽可能准确)
硬件
七段显示引脚
您的显示器应该具有:
- 数字引脚- 每个数字一个。这些是"通用引脚"。它们将是共阴极显示器的阴极(负极引脚),或共阳极显示器的阳极(正极引脚)。
- 8 段引脚- 七个段中的每一段加上小数点。
- COMMON_CATHODE - 用于不带开关的共阴极显示器。这些显示器需要数字引脚处的低电压来照亮数字。
- COMMON_ANODE - 用于不带开关的共阳极显示器。这些显示器需要在数字引脚处施加高电压来照亮数字。
- N_TRANSISTORS - 如果使用 N 型晶体管吸收电流(或任何其他高电平有效、低侧开关)。
- P_TRANSISTORS - 如果您使用 P 型晶体管来提供电流(或任何其他低电平有效的高侧开关)。
- NP_COMMON_CATHODE - 如果您的设置使用带有共阴极显示器的 N 型和 P 型晶体管。
- NP_COMMON_ANODE - 如果您的设置使用带有共阳极显示器的 N 型和 P 型晶体管。请注意,使用高电平有效、高侧开关不会对所选配置产生影响。通常称为高边开关。
配置
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment object
void setup() {
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected. Then, you only need to specify 7 segmentPins[]
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
...
}
digitPins
是一个数组,存储数字所连接的 arduino 引脚号。从左到右对它们进行排序。
segmentPins
是一个数组,存储各段所连接的 arduino 引脚号。将它们从段 a 到 g 排序,然后是小数点位置(如果已连接)。
如果您希望使用超过 8 位数字,请增加 SevSeg.h 中的 MAXNUMDIGITS。
刷新显示
sevseg.refreshDisplay();
您的程序必须重复运行refreshDisplay()函数才能显示该数字。 警告:任何对delay()的调用都会干扰显示。 其他功能引入的任何延迟都会对显示产生不良影响。如果您需要帮助摆脱delay()语句,我推荐简单的Blink Without Delay arduino示例草图。
要清空显示屏,请调用:
sevseg.blank();
设置数字
整数
sevseg.setNumber(3141,3); // Displays '3.141'
第一个参数是要显示的数字。
第二个参数指示小数位应该在哪里,从最低有效数字开始计算。
例如,要显示整数,第二个参数为 0。
浮点数
sevseg.setNumberF(3.14159f,3); // Displays '3.141'
在这种情况下,第二个参数指示要显示多少位小数精度。
注意:
- 超出范围的数字显示为"----"。
- 如果第二个参数为 -1 或省略,则没有小数位。
- 输入"true"作为第三个参数,以十六进制表示形式(而不是十进制)显示数字
设置字符串
sevseg.setChars("abcd");
字符数组可以在七段显示器上尽可能准确地显示。请参阅 SevSeg.cpp digitalCodeMap[] 以了解每个字符的注释。仅限字母数字字符,加上" "、"-"、"_"和"." 都支持。字符数组应以 NULL 结尾。
自定义显示设置
// 设置显示屏上每个数字的分段
uint8_t segs[4] = {0, 0x5B, 0x6D, 0x63};
sevseg.setSegments(segs);
// 设置单个数字的段。将数字 3 设置为 0x63。
sevseg.setSegmentsDigit(3, 0x63);
如果需要,您可以操纵各个片段。每个字节代表一个数字的显示,每个位代表一个段。这些位代表顺序为.GFEDCBA 的段。
设置亮度
sevseg.setBrightness(90);
亮度可以使用 -200 到 200 之间的值进行调整。0 到 100 是标准范围。大于 100 且小于 -100 的数字可能会导致明显的闪烁。请注意,0 并不代表没有亮度,-200 也不代表没有亮度。如果您的显示器有明显的闪烁,将亮度修改为 0 可能会纠正它。每次实施的结果都会有所不同。看到的亮度取决于显示器特性、驱动它的arduino模型、使用的电阻以及程序中执行其他操作所花费的时间。