jjzjj

Arduino:实现四位LED共阴极数码管显示——从认识、连接、程序到实现功能

勇闯世界硕师傅 2025-02-10 原文

一.认识四位共阴极数码管

(1)一位八段共阴极数码管

       在认识四位共阴极数码管之前我先介绍一下一位八段共阴极数码管。如左图所示为以为数码管的实物图,其中它共有10个引脚,且上下各五个。小数点位于右下时为数码管正面,在四位共阴极数码管中也是如此,在连接组装时尤为重要。

 

       右图所示为一位数码管示意图,将数码管引脚连接在Arduino上,由图所示我认为你可以对为什么是八段及共阴极有了自己一定的理解。其中,共阴极顾名思义是这些LED小灯公用一个阴极。对于如何在一位数码管上显示0-9,也就是指点亮数码管上位置不同的LED小灯。例如:显示0,点亮a,b,c,d,e,f,也就是将其对应的引脚2,3,6,7,8,4设置为HIGH。

void setup() {
  for(int i=2;i<=9;i++)
{
  pinMode(i,OUTPUT);
}

void loop() {
for(int i=2;i<=9;i++)
{
  digitalWrite(i,LOW);
}
//显示0
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);  
digitalWrite(4,HIGH);
digitalWrite(6,HIGH); 
digitalWrite(7,HIGH);
digitalWrite(8,HIGH); 
delay(500);
}

以上展示使得一位数码管显示数字0的代码

        同理我们就可以先写出1-9数字的显示代码。这是完成代码显示0-9的其中之一的方法,简单好理解但是代码写起来冗长比较麻烦。文章的后面我将会继续介绍两种较为简单的方法完成0-9数字显示。

(2)四位共阴极数码管

      简单介绍完一位八段数码管,回归正题,四位共阴极数码管的原理也是如此:

 

      引用百度词条对共阴极数码管的介绍,“共阴极数码管是把所有led的阴极连接到共同接点COM,而每个led的阳极分别为a、b、c、d、e、f、g及dp(小数点)。其中8个led分别与概述图中的a~dp各段相对应,通过控制各个led的亮灭来显示数字。”结合上图了解四位共阴极数码管各个引脚的作用。

二.连接四级共阴极数码管

       a,b,c,d,e,f,g,dp八个引脚分别连接Arduino2-9引脚,COM1、2、3、4分别连接10、11、12、13引脚。如下图模拟连接图所示。因为其中LED的额定电压大约为3伏左右,而Arduino提供电压为5伏所以使用了8个小电阻。

 实现0000为例,0-9显示为上方一位数码管所用方法。

void setup() {
  for(int i=2;i<=13;i++)
  {
    pinMode(i,OUTPUT);
  }

}

void loop() {
//实现0000
  for(int i=2;i<=13;i++)
  {
    digitalWrite(i,LOW);
  }
  digitalWrite(2,HIGH);
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(6,HIGH);
  digitalWrite(7,HIGH);
  digitalWrite(5,HIGH);

}

      其中COM,输出为高电压时不显示,例如上述程序,初始将所有引脚设置为低电压,所以才显示其四个零。

三.四位阴极数码管程序

1)

上面已经展示了一种方法,接下来用另一种较为简单的方式,代码如下:

#define SEG_A 2;
#define SEG_B 3;
#define SEG_C 4;
#define SEG_D 5;
#define SEG_E 6;
#define SEG_F 7;
#define SEG_G 8;
#define SEG_H 9;

#define COM1 10;
#define COM2 11;
#define COM3 12;
#define COM4 13;
unsigned char f[10][7]={//其中没有包括小数点,可根据需求编写相关程序
  {1,1,1,1,1,1,0},//0
  {0,1,1,0,0,0,0},//1
  {1,1,0,1,1,0,1},//2
  {1,1,1,1,0,0,1},//3
  {0,1,1,0,0,1,1},//4
  {1,0,1,1,0,1,1},//5
  {1,0,1,1,1,1,1},//6
  {1,1,1,0,0,0,0},//7
  {1,1,1,1,1,1,1},//8
  {1,1,1,1,0,1,1}//9
};

void setup(){
  Serial.begin(9600);
  for(int i=2;i<=13;i++)
  {pinMode(i,OUTPUT);}
}
void loop{
 for(int time=0;time<=1000;time++)//显示1234
  {Display(1,1);
  delay(3);
  Display(2,2);
  delay(3);
  Display(3,3;
  delay(3);
  Display(4,4);
  delay(3);
  }
void Display(int x,int y)//显示数字
{
  
  for(int i=2;i<=9;i++)
  {
    digitalWrite(i,LOW);
  }
  switch(x)
  {
    case 1:
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    digitalWrite(12,HIGH);
    digitalWrite(13,HIGH);
    break;
    case 2:
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    digitalWrite(12,HIGH);
    digitalWrite(13,HIGH);
    break;
    case 3:
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    digitalWrite(12,LOW);
    digitalWrite(13,HIGH);
    break;
    case 4:
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    digitalWrite(12,HIGH);
    digitalWrite(13,LOW);
    break;
    default:break;
  }
   digitalWrite(2,f[y][0]);
   digitalWrite(3,f[y][1]);
   digitalWrite(4,f[y][2]);
   digitalWrite(5,f[y][3]);
   digitalWrite(6,f[y][4]);
   digitalWrite(7,f[y][5]);
   digitalWrite(8,f[y][6]);
   }

以上程序结合函数与二维数组相关的知识编写出可以实现四位数码管显示数字的程序,若要显示B、C、D、E、F等字母也可用写成二维数组的方式同理可得。

2)

接下来用Arduino自带的七段数码管(8 个段引脚 - 七个段中的每一个加上小数点一个)的库函数,实现数码管显示数字的功能。

 点击项目,从中选择包含库中的管理库,在管理库中搜索SevSeg选择安装。

 想要使用SevSeg中的功能,首先使用编译预处理命令#include "SevSeg.h"

#include "SevSeg.h"
SevSeg sevseg;//给数码管命名
byte set=COMMON_CATHODE;//若为共阳极数码管则为COMMON_ANODE 
byte number=4;//四位
byte COM[]={10,11,12,13};
byte pins[]={2,3,4,5,6,7,8,9};



void setup() {
  sevseg.begin(set,number,COM,pins);
  

}
void loop() {
   sevseg.setNumberF(36.777,2);//浮点型,小数位数为2
   sevseg.refreshDisplay();//刷新显示
    

 其中,此库函数想要做到延时引用delay函数可能会导致数码管不正常显示。对于此库函数还有更多的功能,大家可以在Arduino界面的库管理中点击更多信息了解更多的功能。

我对四位共阴极数码管的介绍就到此为止了,如有错误,敬请指正。

有关Arduino:实现四位LED共阴极数码管显示——从认识、连接、程序到实现功能的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  4. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  5. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  8. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

  9. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  10. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

随机推荐