Arduino Uno 倒数吧!单位数码管


版权声明:本文为博主原创文章,未经博主允许不得转载。

发布

实例效果

如图:
单位数码管从9倒数到0,如此往复。

资源下载:

本实例程序打包下载地址:
https://u16460183.ctfile.com/fs/16460183-295924077

元件说明

单位数码管 , 又叫辉光管,其实就是把8个LED集成在一起,可以点亮不同LED,组合成不同的字符或数字。
本文章先弄懂单位的数码管,
实际应用一般会使用2位4位或者更多位的数码管,
之后会再贴文章,敬请期待!

数码管有分共阳共阴两种,接线也会有一点不一样。
注意你买的是共阳的还是共阴的?
(本文使用的是共阴的单位数码管)

引脚说明

单位数码管,
有10个引脚,每个引脚代表一个对应位置的led灯

共阴单位数码管,那么共极就接GND
共阳单位数码管,那么共极就接VCC(电源端)

BOM表

Arduino UNO x 1
单位数码管 x 1
1kΩ 电阻 x 1
面包板 x 1
USB数据线 x 1
跳线 若干

接线

程序代码

#define D_a 2  //数码管a 接引脚 2
#define D_b 3
#define D_c 4
#define D_d 5
#define D_e 6
#define D_f 7
#define D_g 8
#define D_h 9

//数码管0-F数字码值
unsigned char num[17][8] =
{
 //1为点亮,0为关闭,a表示数码管a的led灯,其他类似
 //a  b  c  d  e  f  g  h 
  {1, 1, 1, 1, 1, 1, 0, 0},         //0
  {0, 1, 1, 0, 0, 0, 0, 0},         //1
  {1, 1, 0, 1, 1, 0, 1, 0},         //2
  {1, 1, 1, 1, 0, 0, 1, 0},         //3
  {0, 1, 1, 0, 0, 1, 1, 0},         //4
  {1, 0, 1, 1, 0, 1, 1, 0},         //5
  {1, 0, 1, 1, 1, 1, 1, 0},         //6
  {1, 1, 1, 0, 0, 0, 0, 0},         //7
  {1, 1, 1, 1, 1, 1, 1, 0},         //8
  {1, 1, 1, 1, 0, 1, 1, 0},         //9
  {1, 1, 1, 0, 1, 1, 1, 1},     //A
  {1, 1, 1, 1, 1, 1, 1, 1},     //B
  {1, 0, 0, 1, 1, 1, 0, 1},     //C
  {1, 1, 1, 1, 1, 1, 0, 1},     //D
  {1, 0, 0, 1, 1, 1, 1, 1},     //E
  {1, 0, 0, 0, 1, 1, 1, 1},     //F
  {0, 0, 0, 0, 0, 0, 0, 1},     //.
};

void setup()
{
  pinMode(D_a,OUTPUT);              //设置引脚为输出
  pinMode(D_b,OUTPUT);        //设置引脚为输出
  pinMode(D_c,OUTPUT);        //设置引脚为输出
  pinMode(D_d,OUTPUT);        //设置引脚为输出
  pinMode(D_e,OUTPUT);        //设置引脚为输出
  pinMode(D_f,OUTPUT);        //设置引脚为输出
  pinMode(D_g,OUTPUT);        //设置引脚为输出
  pinMode(D_h,OUTPUT);        //设置引脚为输出
}

void loop()
{
  //倒数,从9-0,不断循环
  for( int i = 9 ; i > -1 ; i--)                //循环显示9-0
  {
    digitalWrite(D_a,num[i][0]);    //设置a 引脚的电平
    digitalWrite(D_b,num[i][1]);  //设置b 引脚的电平
    digitalWrite(D_c,num[i][2]);  //设置c 引脚的电平
    digitalWrite(D_d,num[i][3]);  //设置d 引脚的电平
    digitalWrite(D_e,num[i][4]);  //设置e 引脚的电平
    digitalWrite(D_f,num[i][5]);  //设置f 引脚的电平
    digitalWrite(D_g,num[i][6]);  //设置g 引脚的电平
    digitalWrite(D_h,num[i][7]);  //设置h 引脚的电平

    delay(1000);                        //延迟1秒
  }
}

程序说明

第一步:定义管脚

定义每一个管脚对应连接上的引脚
例:#define D_a 2 //数码管a 接引脚 2

使用#define 我们就可以直接调用定义的名称就可以了,
例如上面语句,我们调用这个引脚只需要使用D_a,就代表使用的是引脚2

这么做的好处是如果我需要修改接线的引脚,我只需要在开头定义的这个语句去修改一下就可以了。
而不用找到每个使用引脚2的语句,一句一句地去修改

第二步:创建一个多维数组

创建一个多维数组,
关键字unsigned 代表无符号
关键字 char 代表数据类型为char型
num 为数组变量的名词
num后的[17]为第一维数量,[8]为第二维数量,生成一个17行8列的二维数组
例:
//数码管0-F数字码值
unsigned char num[17][8] = { … }

第三步:设置每个引脚为输出模式

在setup()函数的{}里,进行设置
例如:pinMode(D_a,OUTPUT); //设置引脚为输出

第四步:遍历所需要显示的字符

在本例子中使用了for语句,进行遍历显示9-0的组合

for (表达式1;表达式2;表达式3){
……
}

语句;

功能描述:
开始时,
先求解表达式1,
然后求解表达式2,如果成立,则执行语句,
执行完后再求解表达式3。

然后继续求解表达式2,如果成立则执行语句,执行完后再求解表达式3…….
一直循环执行。

如果求解表达式2不成立,则终止循环,结束for语句。