arduino库之:sevseg库说明文档

        该库将您的 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 型晶体管。请注意,使用高电平有效、高侧开关不会对所选配置产生影响。通常称为高边开关。

配置(hardwareConfig)

#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; // 电阻器位于数字管脚上。
  byte hardwareConfig = COMMON_ANODE; // 硬件模式
  bool updateWithDelays = false; // 保持缺省false。
  bool leadingZeros = false; // 不保留前导0.
  bool disableDecPoint = false; // 如果小数点不存在或未连接,请使用“true”。那么,你只需要指定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()的调用都会干扰显示。 其他功能引入的任何延迟都会对显示产生不良影响。如果需要延迟可以参看下方实例2.

要清空显示屏,请调用:

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模型、使用的电阻以及程序中执行其他操作所花费的时间。

实例1(显示数字):

​​​​​​​接线图:

代码:

#include <SevSeg.h>

SevSeg sevseg;

void setup() {

  byte numDigits = 4;

  byte digitPins[] = {2, 3, 4, 5};

  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};

  bool resistorsOnSegments = false; // 电阻器位于数字管脚上。

  byte hardwareConfig = COMMON_ANODE; // 硬件模式

  bool updateWithDelays = false; // 保持缺省false。

  bool leadingZeros = false; // 不保留前导0.

  bool disableDecPoint = false; // 带小数点,如果小数点不存在或未连接,请使用“true”。那么,你只需要指定7个管脚在segmentPins[]中。

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,

  updateWithDelays, leadingZeros, disableDecPoint);//初始化

}

void loop() {

  // put your main code here, to run repeatedly:

sevseg.refreshDisplay();//注意必须有这一步

sevseg.setNumber(3141,3); //显示 3141

//sevseg.setChars("abcd");//显示字符

}

注意:数码管同时具有小数点和冒号的,不能同时使用,也就是说只能连接DP管脚或者是CLN管脚。

实例2(计数器)

代码:

接线图与实例1相同。

void loop() {

  static unsigned long timer = millis();

  static int deciSeconds = 0;

  if (millis() - timer >= 100) {

    timer += 100;

    deciSeconds++; // 100 milliSeconds is equal to 1 deciSecond

    if (deciSeconds == 5000) { // Reset to 0 after counting for 1000 seconds.

      deciSeconds=0;

    }

    sevseg.setNumber(deciSeconds, 1);

  }

  sevseg.refreshDisplay(); // Must run repeatedly

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值