YFROBOT创客社区

标题: Arduino入门教程—拓展实验篇十三 驱动4位数码管 [打印本页]

作者: AllBlue    时间: 2013-7-23 20:42
标题: Arduino入门教程—拓展实验篇十三 驱动4位数码管
本帖最后由 AllBlue 于 2013-9-2 08:30 编辑

驱动4位数码管

之前教大家使用过数码管显示0~9数字,今天我们要使用一个4位数码管做个实验。

所使用的实验元件:

       UNO控制板    一块
              4位数码管      一个      

       限流电阻 220欧姆 八个
              导线若干

首先,我们要认识一下4位数码管,我手中的数码管标的是XD3641BS,可以参照一下下面的引脚含义图(图为佳美光电电子有限公司数码管命名规则,适用于大部分数码管,但是由于厂商太多命名规则也相对杂乱。):

[attach]460[/attach]

由上图可知,我手中的数码管为4位共阳极数码管的,其他参数对我们来说不太重要,大家有兴趣可以看下。

下面我们就了解下数码管的引脚功能,我们看下图:

[attach]461[/attach]

图中我们可以知道,将数码管正对着我们,左下角为第一脚,逆时针分别为1~12引脚,其中12、9、8、6为公共脚。

为了更方便的控制4位数码管,我们从网上找到了数码管的库文件:

[attach]462[/attach]

连接示意图:

[attach]491[/attach]

连接方法我列出了如下表格:

公共极:
Arduino引脚号 数码管引脚号
5 6(个位)
4 8(十位)
3 9(百位)
2 12(千位)
其他引脚(要使用限流电阻)
Arduino引脚号 数码管引脚号
6 A (11)
7 B (7)
8 C (4)
9 D (2)
10 E (1)
11 F (10)
12 G (5)
13 DP (3)

将电路连接好之后,运行如下程序:

  1. #include "SevSeg.h"

  2. //Create an instance of the object.
  3. SevSeg sevseg;

  4. //Create global variables
  5. unsigned long timer;
  6. int CentSec=0;

  7. void setup() {
  8.   //I am using a common anode display, with the digit pins connected
  9.   //from 2-5 and the segment pins connected from 6-13
  10.   sevseg.Begin(1,2,3,4,5,6,7,8,9,10,11,12,13);
  11.   timer=millis();
  12. }

  13. void loop() {
  14.   //Produce an output on the display
  15.   sevseg.PrintOutput();

  16.   //Check if 10ms has elapsed
  17.   unsigned long mils=millis();
  18.   if (mils-timer>=10) {
  19.     timer=mils;
  20.     CentSec++;
  21.     if (CentSec==10000) { // Reset to 0 after counting for 100 seconds.
  22.       CentSec=0;
  23.     }
  24.     //Update the number to be displayed, with a decimal
  25.     //place in the correct position.
  26.     sevseg.NewNum(CentSec,(byte) 2);
  27.   }
  28. }
复制代码

运行程序后,显示效果为秒表,能计数99秒!!!用户还可以使用按钮来控制秒表~~~



作者: tiantianyouyou    时间: 2019-5-5 07:50
学习学习,谢谢分享
作者: xfsss    时间: 2019-10-3 18:14
学习学习,谢谢分享




欢迎光临 YFROBOT创客社区 (http://82.157.198.105/) Powered by Discuz! X3.1