0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用三个4位7段显示制作学校倒计时日历

454398 来源:wv 2019-09-03 15:19 次阅读

步骤1:4位7段显示

明显的出发点是熟悉4位7段显示器。这些单元来自我们为教室使用而购买的一些Elegoo stater套件,但最有可能与您在上图中看到的部件一起购买。除了上面的物理设备图像,您还可以看到该设备的引脚和原理图。将Arduino编程为单独的显示字符非常简单,但是要同时显示整个单词或数字是有趣的。与任何7段显示一样,可以通过打开字母段的不同组合来显示数字和一些字符;使用4位7段单元的扭曲是每个数字的所有单个段都连接在一起,每个数字只有它自己的共用阴极或阳极单独控制。实际上,使这些单元显示单词或数字的唯一方法仍然是一次一位数;然而,数字的开启和关闭速度都很快,以至于人眼看起来一直都在。

第2步:理解(和使用)Arduino端口

为了避免使用数以千计的“digitalWrite”命令打开和关闭我需要的所有组合,我决定熟悉Arduino上端口的使用平台。使用此命令(例如:PORTA = B01110101;)可以同时打开和关闭8个数字I/O引脚,其中1表示等于向该引脚写入“高电平”,0表示与写入“低电平”相同到针。每个端口对应Arduino上的8个引脚,可以用二进制(我使用的)或十六进制写入。一个简单的例子是上面的引脚输出中显示的Arduino Mega上的端口F和K,PORTF对应于模拟引脚A0-A7和PORTK,对应于模拟引脚A8-A15。非常感谢Adafruit社区在这个壮观的引脚上的工作!

第3步:全力以赴

虽然上面的图片很难看,但我决定未来编程的最合理布局是将每个4位7段分成上半部分和下半部分,然后将每一半分配给特定端口。这将允许我轻松查看我需要的数字,然后使用二进制输出打开相应的段到相关端口。使用port命令的十六进制版本会使每个命令(实际上是命令调用的2D数组)更短但在布局代码时看起来更容易看到高/低组合而不是必须以十六进制转换那些相同的组合,即使代码从长远来看会更紧凑。为了帮助完成这个过程,我创建了一个图表来显示哪些数字/段与哪个端口分配相关联。您还可以在上图中看到,通过每个数字的共阴极引脚实现限流,而不是限制每个单独的电流

步骤4:代码 - CountUpDownTimer

在几次尝试运行一系列嵌套for循环以控制时序和显示失败后,我开始研究适用于Arduino的并行处理。最后我遇到了一个名为“CountUpDownTimer”的预先存在的库,可以在这里找到Arduino Playgound。该库在后台为您执行计时,允许您在需要时拨打小时,分钟和秒。然后将这些值作为参数传递给一个数组,该数组打开适当的段以显示相应的数字。唯一的复杂因素(除了创建数组 - 下一步更多)是我必须修改库以添加“ShowDays”方法,该方法不是原始代码的一部分。

#include

CountUpDownTimer T(DOWN, HIGH); //Create the timer object void setup(){

//Setting all digital pins as outputs

for (int i=3; i《=53; i++)

pinMode(i, OUTPUT);

//Setting all analog pins as outputs

for (int a=A0; a《=A15; a++)

pinMode(a, OUTPUT);

T.SetTimer(52,07,17,00); // (days, hours, minutes, seconds)

T.StartTimer();

} void loop() {

T.Timer();

int stepDelay = 50;

long sm = T.ShowMinutes();

long sh = T.ShowHours();

long sd = T.ShowDays();

for(int c = 0; c 《 4; c++){

PORTB = upperArray[sm][c];

PORTL = lowerArray[sm][c];

PORTA = upperArray[sh][c];

PORTC = lowerArray[sh][c];

PORTF = upperArray[sd][c];

PORTK = lowerArray[sd][c];

delayMicroseconds(stepDelay);

}

}

步骤5:代码 - 2D数组

驱动端口的值被放置在一个单独的2D阵列中,该阵列分成两半,一个用于显示器的上半部分,另一个用于下半部分。部分。端口分配基于显示器的引脚,每列代表相应的数字。这里的关键是将高点和低点的适当组合应用于每个连续数字的各个段和适当的共阴极。 2D阵列长270行,占整个学年,四列宽,每个显示四位数。尽管小时和分钟从不调用阵列的大多数,但使用相同的结构来驱动这些显示器而不是每个部分的自定义阵列似乎更容易。上半部分和下半部分的前几行如下所示。我还创建了您在上面看到的图表,显示哪些端口输出与哪些段相对应,以最大限度地减少错误并保持理智。

byte upperArray[270][4]

{B00011111,B00111011,B00111101,B00111111}, //00u

{B00011111,B00111011,B00111101,B00100111}, //01u

{B00011111,B00111011,B00111101,B00110111}, //02u

{B00011111,B00111011,B00111101,B00110111}, //03u

{B00011111,B00111011,B00111101,B00101111}, //04u

{B00011111,B00111011,B00111101,B00111110}, //05u

{B00011111,B00111011,B00111101,B00111110}, //06u

{B00011111,B00111011,B00111101,B00110111}, //07u

{B00011111,B00111011,B00111101,B00111111}, //08u

{B00011111,B00111011,B00111101,B00111111}, //09u

{B00011111,B00111011,B00100101,B00111111}, //10u byte lowerArray[270][4]{

{B00110101,B00110101,B00110101,B00110100}, //00

{B00110101,B00110101,B00110101,B00000100}, //01

{B00110101,B00110101,B00110101,B00110010}, //02

{B00110101,B00110101,B00110101,B00010110}, //03

{B00110101,B00110101,B00110101,B00000110}, //04

{B00110101,B00110101,B00110101,B00010110}, //05

{B00110101,B00110101,B00110101,B00110110}, //06

{B00110101,B00110101,B00110101,B00000100}, //07

{B00110101,B00110101,B00110101,B00110110}, //08

{B00110101,B00110101,B00110101,B00010110}, //09

{B00110101,B00110101,B00000101,B00110100}, //10

步骤6:LCD屏幕 - 后想法

我最初并不想包括静态显示倒计时的日期/时间结束的LCD屏幕;然而,当我为该项目购买BASE时,有一个大小与小面包板大小相当的开放空间,因此它似乎是该项目的合理添加。该显示器是标准的16x2单色白色蓝色显示屏,也来自Elegoo套件。除了数据和控制线的附加布线外,代码修改也很简单;我添加了预处理器功能,包括库和定义用于每个所需连接的引脚,以及在void设置中显示静态消息的代码,这样只运行一次而不影响时序计数器。两种修改如下所示:

#include

const int rs = 17, en = 16, d4 = 21, d5 = 20, d6 = 19, d7 = 18;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7); lcd.begin(16, 2);

lcd.setCursor(0, 0);

lcd.print(“Countdown Ends:”);

lcd.setCursor(0, 1);

lcd.print(“5/30/19 @ 3:10pm”);

第7步:结论 - 问题和教训

这个项目中有问题的部分是迄今为止繁琐的部分。首先,在硬件方面,使得所需的40多条数据线的布线看起来很整洁;接下来是2D阵列的创建,它包含显示正确数字所需的高低组合。我必须做的一个小的硬件修改是调整我在每个显示器的第四个数字上使用的限流电阻的大小;由于时间(并假设视觉的持续性),数字总是比其他数字亮一点,所以我增加该值,直到所有四位数的外观看起来均匀。我确信通过某种时间共享或多路复用可能有一种更优雅的方式来实现这一目标,但我从经验中学到了很多东西,并意识到我刚刚开始划清我们所说的这个神奇工具的表面“ Arduino“能够完成。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时序设计
    +关注

    关注

    0

    文章

    21

    浏览量

    43899
  • Arduino
    +关注

    关注

    184

    文章

    6426

    浏览量

    184800
收藏 人收藏

    评论

    相关推荐

    揭秘 “红绿灯倒计时” 原理

    如今,高德“红绿灯倒计时”功能已服务遍布全国范围内近240个城市的8万多个红绿灯路口,未来还将进一步拓展至更高数量级。
    的头像 发表于 02-21 17:19 730次阅读

    鸿蒙原生应用/元服务开发-代理提醒说明(一)

    后台或进程终止后,系统会代理应用做相应的提醒。当前支持的提醒类型包括:倒计时日历和闹钟。 倒计时类:基于倒计时的提醒功能。 日历类:基于
    发表于 01-12 09:49

    怎么在倒计时器里应用定时器?

    怎么在倒计时器里应用定时器
    发表于 10-30 06:02

    OpenHarmony创新赛丨报名倒计时30天!

    “OpenHarmony创新赛”) 报名进入倒计时 最后30天 啦! 一个月能做什么? 把武力值练到MAX! 还在犹豫是否上车? 戳下方了解所有参赛福利↓↓↓ 你无法拒绝参赛的N个理由 如何在一个月将武力值练到MAX
    的头像 发表于 10-21 16:45 357次阅读
    OpenHarmony创新赛丨报名<b class='flag-5'>倒计时</b>30天!

    基于51单片机lcd1602怎么显示倒计时秒表?

    基于51单片机,lcd1602怎么显示倒计时秒表?
    发表于 10-18 07:11

    倒计时 5 天,Next ’23 精彩待发!

    以下文章来源于谷歌云服务,作者 Google Cloud   点击屏末   |  阅 读 原 文  |   了解更多 Next ’23 详情!页面持续更新中~ 原文标题:倒计时 5 天,Next ’23 精彩待发! 文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 08-24 17:40 397次阅读
    <b class='flag-5'>倒计时</b> 5 天,Next ’23 精彩待发!

    求助,根据给定的条件设计一9秒倒计时装置

    提供的材料有:ne555p定时器、74ls48芯片、74ls192芯片,蜂鸣器,数码管,按键,电阻电容若干。利用给定的材料,制作一款9秒倒计时闹钟。 倒计时闹钟包含一数码管
    发表于 08-10 14:40

    倒计时3天丨软通动力&鸿湖万联与您相约华为开发者大会2023

    原文标题:倒计时3天丨软通动力&鸿湖万联与您相约华为开发者大会2023 文章出处:【微信公众号:软通动力】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 08-01 15:35 331次阅读

    公交车LED屏显示红绿灯倒计时

    介绍一种在公交车LED屏上显示红绿灯倒计时数的方案,本方案的核心是在公交车上增加一台根据公交车行驶位置数据从百度红绿灯API接口获取红绿灯倒计时数据并转化为控制车载LED屏显示的设备,
    的头像 发表于 06-30 12:21 997次阅读
    公交车LED屏<b class='flag-5'>显示</b>红绿灯<b class='flag-5'>倒计时</b>数

    红绿灯倒计时API开发文档

    百度红绿灯倒计时API开发文档
    发表于 06-30 11:53 3次下载

    健身房倒计时的时钟开源设计

    电子发烧友网站提供《健身房倒计时的时钟开源设计.zip》资料免费下载
    发表于 06-19 15:09 0次下载
    健身房<b class='flag-5'>倒计时</b>的时钟开源设计

    为新年倒计时制作的实时时钟

    电子发烧友网站提供《为新年倒计时制作的实时时钟.zip》资料免费下载
    发表于 06-19 10:19 0次下载
    为新年<b class='flag-5'>倒计时</b><b class='flag-5'>制作</b>的实时时钟

    SpaceX发射倒计时显示

    电子发烧友网站提供《SpaceX发射倒计时显示.zip》资料免费下载
    发表于 06-15 15:00 0次下载
    SpaceX发射<b class='flag-5'>倒计时</b><b class='flag-5'>显示</b>

    基于89C51单片机的实用99分钟倒计时器源程序

    基于89C51单片机的实用99分钟倒计时器源程序
    发表于 05-15 10:34 17次下载

    基于51单片机的分钟倒计时源代码

    基于51单片机的一分钟倒计时例程源代码
    发表于 05-12 16:30 18次下载