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

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

3天内不再提示

使用Arduino和7段显示的两位数定时器的制作

454398 来源:wv 2019-10-25 10:40 次阅读

步骤1:将组件放置在面包板上

使用Arduino和7段显示的两位数定时器的制作

找到位于IC的一个角上的点,该标记标记IC的第一个引脚1,其他引脚沿逆时针方向计数。

通过电阻将按钮的一个端子连接至5V,并通过电阻将另一端子连接至地面。

步骤2:将BCD连接至7段逻辑

BCD代表二进制编码的十进制,其中十进制数字表示为4位二进制。

我们使用BCD到7段解码器,因为它将减少使用的Arduino数字引脚分配的数量连接单个7段显示器。一个7段显示器至少需要7个arduino引脚,其中两个至少需要14个,而我们在Arduino Uno上只有13个数字引脚。

一个BCD至7段解码器将只需要4个Arduino引脚和2个他们将只使用8个数字引脚。

BCD到十进制映射如下。

BCD ---- DECIMAL

0000 ---- 0

0001 ---- 1

0010 ---- 2

0011 ---- 3

0100- -4

0101 ---- 5

0110 ---- 6

0111 ---- 7

1000- --- 8

1001 ---- 9

BCD到十进制转换一直到15,但我将它列出到9,因为它是单个可以显示的最大数量7-段显示

步骤3:将Arduino引脚分配连接到BCD输入。

在这里,我们使用的是IC CD4511 7段解码器,

引脚1,2,6,7是IC CD4511的BCD输入引脚。

其中,

引脚7 =位0

Pin 1 = Bit 1

Pin 2 = Bit 2

Pin 6 = Bit 3

只连接两个IC之一首先是Arduino,现在是第一个解码器IC,即显示在显示器右侧的那个

现在是第一个解码器IC,即显示在显示器右侧的那个。。

CD4511(1 ) Arduino

Pin 7 -----》 Pin 4

Pin 1 -----》 Pin 5

Pin 2 -----》 Pin 6

Pin 6 -----》 Pin 7

步骤4:连接7段显示器并为IC供电

IC上的引脚9至15是对应于7段显示器的引脚。

映射到7段显示器的IC引脚分配如下。

CD4511 ----》 7段显示

13 ----》 a

12 ----》 b

11 ----》 c

10 ----》 d

9 ----》 e

15 ----》 f

14 ----》 g

按照说明将右侧显示屏连接到左侧的解码器1

如图所示,通过电阻将两个显示器的公共端接地。

要为IC供电,您需要进行CD4511的以下连接

CD4511

Pin 3 ---》 Vcc(+ 5v)

Pin 4 ---》 Vcc(+ 5v)

Pin 5 ---》 GND

Pin 8 ---》 GND

Pin 16 ---》 Vcc(+ 5V)

现在,我们进入下一步,

步骤5:用于测试第一显示的Arduino Sketch

Arduino Sketch如下,编写并上传到Arduino。在这里,我们显示数字8来检查所有线段是否正常工作,但是应使用0以外的任何数字,因为如果我们的草图不工作,它将始终显示0。

如果不起作用检查您的连接。进行正确的连接,尤其是对于Vcc和地线,因为电源输入错误的引脚可能会损坏IC。

您可以在图像中看到输出。

------ -------------------------------------------------- --------

//BCD 1

int a1 = 4;

int a2 = 5;

int a3 = 6;

int a4 = 7;

void setup()

{

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

}

void loop()

{

disp1(8);

}

void disp1(int num)

{

if(num == 8)

{

digitalWrite(a1, LOW);

digitalWrite(a2, LOW);

digitalWrite(a3, LOW);

digitalWrite(a4, HIGH);

}

}

步骤6:连接其他显示器并对其进行测试。

Arduino到CD4511(2)的引脚分配,即第二个解码器,即左侧的解码器,如下所示。

CD4511(2)-----》 Arduino

Pin 7 -----》 8

Pin 1 -----》 9

Pin 2 -----》 10

Pin 6 -----》 11

按步骤4所示,将IC的7段引脚连接到另一个显示器,并进行电源连接。

将以下草图运行到

//BCD 1

int a1 = 4;

int a2 = 5;

int a3 = 6;

int a4 = 7;

//BCD 2

int b1 = 8;

int b2 = 9;

int b3 = 10;

int b4 = 11;

void setup()

{

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(11,OUTPUT);

}

void loop()

{

disp1(8);

}

void disp1(int num)

{

if(num == 8)

{

digitalWrite(a1, LOW);

digitalWrite(a2, LOW);

digitalWrite(a3, LOW);

digitalWrite(a4, HIGH);

}

}

void disp2(int num)

{

if(num == 8)

{

digitalWrite(b1, LOW);

digitalWrite(b2, LOW);

digitalWrite(b3, LOW);

digitalWrite(b4, HIGH);

}

}

步骤7:完成用于显示数字0到9的显示功能。

在显示功能中disp1(),进行以下更改

void disp1(int num){

if(num == 0)//0000

{

digitalWrite(a1, LOW);

digitalWrite(a2, LOW);

digitalWrite(a3, LOW);

digitalWrite(a4, LOW);

}

if(num == 1)//0001

{

digitalWrite(a1, HIGH);

digitalWrite(a2, LOW);

digitalWrite(a3, LOW);

digitalWrite(a4, LOW);

}

if(num == 2)//0010

{

digitalWrite(a1, LOW);//0

digitalWrite(a2, HIGH);//1

digitalWrite(a3, LOW);//0

digitalWrite(a4, LOW);//0

}

if(num == 3)//0011

{

digitalWrite(a1, HIGH);//1

digitalWrite(a2, HIGH);//1

digitalWrite(a3, LOW);//0

digitalWrite(a4, LOW);//0

}

if(num == 4)//0100

{

digitalWrite(a1, LOW);//0

digitalWrite(a2, LOW);//0

digitalWrite(a3, HIGH);//1

digitalWrite(a4, LOW);//0

}

if(num == 5)//0101

{

digitalWrite(a1, HIGH);//1

digitalWrite(a2, LOW);//0

digitalWrite(a3, HIGH);//1

digitalWrite(a4, LOW);//0

}

if(num == 6)//0110

{

digitalWrite(a1, LOW);//0

digitalWrite(a2, HIGH);//1

digitalWrite(a3, HIGH);//1

digitalWrite(a4, LOW);//0

}

if(num == 7) //0111

{

digitalWrite(a1, HIGH);//1

digitalWrite(a2, HIGH);//1

digitalWrite(a3, HIGH);//1

digitalWrite(a4, LOW);//0

}

if(num == 8) //1000

{

digitalWrite(a1, LOW);//0

digitalWrite(a2, LOW);//0

digitalWrite(a3, LOW);//0

digitalWrite(a4, HIGH);//1

}

if(num == 9)//1001

{

digitalWrite(a1, HIGH);//1

digitalWrite(a2, LOW);//0

digitalWrite(a3, LOW);//0

digitalWrite(a4, HIGH);//1

}

}

以类似的方式,编辑函数disp2()

void disp2(int num){

if(num == 0)//0000

{

digitalWrite(b1, LOW);//

digitalWrite(b2, LOW);//0

digitalWrite(b3, LOW);//0

digitalWrite(b4, LOW);//0

}

if(num == 1)//0001

{

digitalWrite(b1, HIGH);//1

digitalWrite(b2, LOW);//0

digitalWrite(b3, LOW);//0

digitalWrite(b4, LOW);//0

}

if(num == 2)//0010

{

digitalWrite(b1, LOW);//0

digitalWrite(b2, HIGH);//1

digitalWrite(b3, LOW);//0

digitalWrite(b4, LOW);//0

}

if(num == 3)//0011

{

digitalWrite(b1, HIGH);//1

digitalWrite(b2, HIGH);//1

digitalWrite(b3, LOW);//0

digitalWrite(b4, LOW);//0

}

if(num == 4)//0100

{

digitalWrite(b1, LOW);//0

digitalWrite(b2, LOW);//0

digitalWrite(b3, HIGH);//1

digitalWrite(b4, LOW);//0

}

if(num == 5) //0101

{

digitalWrite(b1, HIGH);//1

digitalWrite(b2, LOW);//0

digitalWrite(b3, HIGH);//1

digitalWrite(b4, LOW);//0

}

if(num == 6) //0110

{

digitalWrite(b1, LOW);//0

digitalWrite(b2, HIGH);//1

digitalWrite(b3, HIGH);//1

digitalWrite(b4, LOW);//0

}

if(num == 7) //0111

{

digitalWrite(b1, HIGH);//1

digitalWrite(b2, HIGH);//1

digitalWrite(b3, HIGH);//1

digitalWrite(b4, LOW);//0

}

if(num == 8) //1000

{

digitalWrite(b1, LOW);//0

digitalWrite(b2, LOW);//0

digitalWrite(b3, LOW);//0

digitalWrite(b4, HIGH);//1

}

if(num == 9)//1001

{

digitalWrite(b1, HIGH);//1

digitalWrite(b2, LOW);//0

digitalWrite(b3, LOW);//0

digitalWrite(b4, HIGH);//1

}

}

步骤8:显示一个两位数

哇下面是将使用两个7段显示器显示两位数字的代码。

但是我们知道7段显示器不能显示大于9的任何数字。

要显示一个两位数的数字,我们将编写代码以将两位数的数字分开,并将其值存储到d1和d2中,其中d1是一位数字,而d2是十位数。

然后,我们将使用disp1()和disp(2)函数将其写入两个显示。。其中,disp1()控制数据到7段解码器1的二进制输入(即右侧的一个),然后依次控制7段显示放在一个位置,并且disp2()将数据控制到7段解码器2的二进制输入(即左侧的一个),进而控制十段的7段显示。

首先全局声明以下整数变量

int n; //To Store the Number

int d1; //To Store the first Digit

int d2; // To Store the Second Digit

现在在 void循环()中输入以下代码行

void loop()

{

n=25; //I have taken 25 as an example. you may take any number you wish

d1= n%10;

d2= n/10;

/* d1 = n%10, will store to remainder of n/10 to d1 i.e 5 in this case,

it will be our digit at ones place.

d2 = n/10, will store the answer of n/10 to d2, ignoring the numbers after decimals,

here n = 25 so n/10 = 2.5 and 2 will be stored ignoring the 5 after the decimal point,

because int will store only whole number.

disp1(d1); //The value of d1 i.e the digit at ones place will be send to corresponding Display

disp2(d2); //The value of d2 i.e the digit at tens place will be send to corresponding Display

}

第9步:计时器的Arduino草图。

现在,我们将n的值从零延迟增加到99,然后将其重置为0,然后再次将其递增到99。

并在7段显示器上显示数字。

在全局声明中更改

int n=0;

保持d1和d2不变,

现在编辑 void loop()如下所示

void loop(){

delay(1000); // Delay of 1 Second

n++;

if(n==100)

{

n=0;

}

d1=n%10; // This will divide n by 10 and the remainder will be stored in d1

d2=n/10; // This will divide n by 10 and the value before decimal will be stored in d2

disp1(d1);

disp2(d2);

}

在此处使用延迟,否则初始值0将在执行循环后立即增加到1,

步骤10:连接按钮并为计数器编写草图

所有这些时候,您可能想知道按钮是否放置在

好,现在是时候连接它并用它做计数器了。

我们将修改草图,以便n的值仅在按下按钮时才会增加。

为此,我们首先如图所示连接按钮,其中一个端子通过电阻器连接到Vcc,另一端子通过电阻器连接到Vcc。一个通过电阻连接到GND。接地确保在接通电路时突然的峰值电压跨接在电阻上,否则将触发arduino上的按钮输入引脚为HIGH。

现在连接另一个端子

声明一个全局整数变量并将其分配给引脚2(让int button = 2;)和一个变量(int状态= 0);

然后在设置中,将按钮分配为INPUT

int n=0; //Setting initial value of n to 0

int d1;

int d2;

int button = 2;

int state = 0; void setup()

{

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(11,OUTPUT);

pinMode(button,INPUT);

}

在void loop()中,进行如下修改:

void loop()

{

state = digitalRead(button);

if(state == HIGH)

{

n++;

}

if(n==100)

{

n=0;

}

d1=n%10; // This will divide n by 10 and the remainder will be stored in d1

d2=n/10; // This will divide n by 10 and the value before decimal will be stored in d2

disp1(d1);

disp2(d2);

delay(100);//100 ms delay to debounce

}

可以根据您的方便更改反跳时间。

现在上传并运行最终草图,您的计数器就会工作。

使用我认为这是可指导的,我是我的第一个Intructable,我竭尽全力提供我要分享的知识,假定已经知道很多事情,并且这对于使解释尽可能短是必要的。如果我遗漏了任何解释,或者您有任何问题,请随时提出。随时准备为您提供帮助。

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

    关注

    23

    文章

    3237

    浏览量

    114444
  • Arduino
    +关注

    关注

    187

    文章

    6463

    浏览量

    186621
收藏 人收藏

    评论

    相关推荐

    东芝目标2030年在全球电源芯片市场份额达两位数

    东芝公司立志于2030年前在全球电源芯片市场中占据至少两位数的市场份额,以此扭转其相较于竞争对手的落后局面。东芝电子设备及存储业务总经理Noriyasu Kurihara透露,公司正考虑构建联盟
    的头像 发表于 10-29 14:05 301次阅读

    如何使用555定时器制作电压倍增电路

    电压倍增电路是电压倍增电路家族中的一种电路。在本文中,我们将学习如何使用555定时器以及其他重要组件及其简要说明制作电压倍增电路。
    的头像 发表于 08-12 18:21 601次阅读
    如何使用555<b class='flag-5'>定时器</b><b class='flag-5'>制作</b>电压倍增<b class='flag-5'>器</b>电路

    定时器的工作方式介绍

    定时器是计算机和嵌入式系统中常见的一种硬件模块,用于实现定时和计数功能。定时器的工作方式通常由一组寄存来控制,这些寄存定义了
    的头像 发表于 07-12 10:29 714次阅读

    使用Arduino的可变定时器继电器设计

    定时器继电器,也被称为时间继电器,是一种在设定的时间间隔后触发特定操作的电子元件。它在工业自动化、家庭生活、交通管理等领域具有广泛的应用。定时器继电器的主要功能是通过设定特定的时间间隔,来控制电路的通断,实现设备的自动化操作。
    的头像 发表于 06-24 16:52 960次阅读
    使用<b class='flag-5'>Arduino</b>的可变<b class='flag-5'>定时器</b>继电器设计

    三菱plc如何显示定时器时间

    菱PLC中,定时器显示和设置是非常重要的,下面将详细介绍如何显示和设置三菱PLC的定时器时间。 一、定时器的基本概念
    的头像 发表于 06-20 11:10 1699次阅读

    如何实现一个软件定时器

    在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断到,就对一个全局的时间标记加一,每个软件
    的头像 发表于 04-29 11:00 579次阅读

    联发科业绩表现持续向好,预计手机业务增长逾两位数

    根据最新消息,联发科技首席执行官蔡力行在近期的一次采访中透露,该公司计划在2023年实现所有产品类别的销售额增长,尤其是手机业务。他表示,由于旗舰手机市场份额的扩大和旗舰手机芯片价格的上涨,公司对全年手机销售额的增长抱有信心,预计增长率将超过两位数
    的头像 发表于 04-28 09:28 339次阅读

    定时器在STEP 7V5.x及STEP 7(TIA Portal)的不同处理步骤

    基于STEP 5的兼容性,仍然可以使用STEP7 S5定时器与计数定时器和计数是全局的且基于编号寻址,当启动
    的头像 发表于 04-07 11:35 1670次阅读
    <b class='flag-5'>定时器</b>在STEP <b class='flag-5'>7</b>V5.x及STEP <b class='flag-5'>7</b>(TIA Portal)的不同处理步骤

    使用555定时器的可调双定时器电路

    等。使用555定时器IC的可调双定时器电路项目也是555定时器IC的应用之一。通过使用这个项目,人们可以一个接一个地切换个不同的设备,以调整时间(1分钟到 10 分钟)。
    的头像 发表于 02-25 15:16 1997次阅读
    使用555<b class='flag-5'>定时器</b>的可调双<b class='flag-5'>定时器</b>电路

    有哪位能请教一下:光敏电阻 GL5537 5547 型号中后两位数字是什么 含义?

    的含义 GL:光敏 5: 元件外径 5: 可见光区 4?? 7?? 最关键的后两位数字 就是不知道怎样区别! GL5506 GL5516 GL5528 GL5537GL5539 GL5547 GL5549 后两位数字 是什么含义
    发表于 01-12 09:02

    AT32 定时器配置中pr和div的作用

    AT32定时器是51系列单片机中的一种定时器,可以实现多种定时功能。在AT32定时器中,pr和div是个相关的参数,用于配置
    的头像 发表于 01-08 10:12 1227次阅读

    单片机定时器的用法

    本章以CW32通用定时器为例介绍单片机定时器的用法。
    的头像 发表于 01-04 10:37 1340次阅读
    单片机<b class='flag-5'>定时器</b>的用法

    定时器会阻塞线程吗 定时器指令有哪几种

    定时器会阻塞线程吗 定时器指令有哪几种  定时器一般不会阻塞线程,但具体是否会阻塞取决于所使用的定时器实现方式和使用方式。 定时器指令可以分
    的头像 发表于 12-19 14:03 884次阅读

    西门子博途:SIMATIC定时器功能概述

    在控制工程中,以下经典定时器功能已经建立了很长一时间(SIMATIC定时器功能,也称为“S5定时器”)
    的头像 发表于 12-18 17:30 4478次阅读
    西门子博途:SIMATIC<b class='flag-5'>定时器</b>功能概述

    stm32一个定时器能同时控制个灯以不同频率闪烁吗?

    STM32的定时器功能强大,**STM32的定时器可以同时控制个灯以不同频率闪烁** 。
    的头像 发表于 12-13 10:43 1987次阅读