Arduino:实现四位LED共阴极数码管显示——从认识、连接、程序到实现功能
一.认识四位共阴极数码管
(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界面的库管理中点击更多信息了解更多的功能。
我对四位共阴极数码管的介绍就到此为止了,如有错误,敬请指正。