2019-2-19 17:12:52 [显示全部楼层]
6619浏览
查看: 6619|回复: 1

[入门] Arduino学习(八) 数码管

[复制链接]
本帖最后由 tyjjr 于 2019-2-19 17:14 编辑

一、了解数码管(Digitron)

Arduino学习(八) 数码管图1

数码管, 又称LED数码管, 是由八段发光二极管(LED)封装在一起组成“8”字型的器件,外加一个小数点。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一

数码管就是八个LED的并联,各LED阳极或阴极共用一个管脚。根据共用管脚的不同,分为按共阳极数码管和共阴极数码管二种。

Arduino学习(八) 数码管图2

如上图中的外形图, 数码管有8个显示笔划"a,b,c,d,e,f,g,h" (h是小数点,有时也称为dp), 上下共10个引脚,上方中间的脚是公共极,如图分别是a,b,c,d,e,f,g,h脚。

对于共阴极数码管,公共极是阴极。对于共阳极数码管,公共极是阳极。

共阳极数码管和共阴极数码管从外型上无法区分。判别方法是用万用表量一下。

数码管的显示机制与LED完全一样,比如:  在 a脚 与 公共脚 之间加一个正向电压、电流3-10mA, 则 a段 将亮。其它段道理一样。

让不同的段亮起,显示为不同的数字。当b, c 段亮时,显示为1.   abcdef段亮,显示为0. 等等。

数码管基本型显示一位数字,也有两位、三位、四位数字的数码管。

由于本人没有数码管的模块,以下直接用数码管搭电路进行实验学习。

二、数码管实验(使用数码管元器件自已搭电路)

1, 准备元器件和器材

     共阴极数码管(1位)  一个

     面包板一块

     1K 电阻一个

      杜邦线若干

2, 电路原理图

Arduino学习(八) 数码管图3

把共阴极数码管的公共脚接GND, 串接一个限流电阻
abcdefgh 各脚接 Arduino的数字脚(D2-D9)

Arduino学习(八) 数码管图4

说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在abcdefgh各脚中均接一个限流电阻,如下:

3, 用面包板接线

把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线

将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)

公共极接1K电阻后接GND

4, 在Arduino IDE中写个Arduino程序控制数码管显示

[mw_shl_code=applescript,true]
int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h



void setup() {

for(int x=0; x<8; x++)

pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态

}



//在数码管中显示数字的函数

void displayDigit(unsigned char digit) {

//定义一个数组表:不同数字的abcdefgh各段的取值

unsigned char abcdefgh[][8] = {

{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,0}, //A

{0,0,1,1,1,1,1,0}, //b

{1,0,0,1,1,1,0,0}, //C

{0,1,1,1,1,0,1,0}, //d

{1,0,0,1,1,1,1,0}, //E

{1,0,0,0,1,1,1,0}, //F

};

  

if ( digit >= 16 ) return;

for (unsigned char x=0; x<8; x++)

digitalWrite( pinDigitron + x, abcdefgh[digit][x] );

}



void loop() {

//在数码管中显示0-9,A-F各个数字

for (int x=0; x<16; x++) {

displayDigit(x); //调用displayDigit()子函数,显示数字

delay(1000); //等待1000毫秒

}

}[/mw_shl_code]
运行效果: 数码管每隔一秒显示一个数字, 从0到9, 再从A到F

四、四位数码管实验(使用数码管元器件自已搭电路)

四位数码管把四个数码管集成在一起的,可以显示四位数字

Arduino学习(八) 数码管图5
1, 准备元器件和器材

     四位共阴极数码管  一个

     面包板一块

     1K 电阻一个

      杜邦线若干

1, 准备元器件和器材

     共阴极数码管  一个

     面包板一块

     1K 电阻一个

      杜邦线若干


2, 四位数码管的管脚和显示原理

四位数码管共12个脚,管脚如下图:

Arduino学习(八) 数码管图6

其中:  1, 2, 3, 4 脚用于选择处理哪一位数字(对于共阴型,低电平有效),也是这一位数字的公共极。比如选择数字1,则对1脚送低电平。

选好数字后,对abcdefgh的操作与一位数码管相同

3, 电路原理图

Arduino学习(八) 数码管图7

abcdefgh 各脚接 Arduino的数字脚(D2-D9)

1,2,3,4脚接D10-D13, 分别串接一个限流电阻


4,用面包板接线

把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线

将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)

1,2,3,4脚接D10-D13, 分别串接一个限流电阻


5, 在Arduino IDE中写个Arduino程序控制四位数码管显示
[mw_shl_code=applescript,true]
int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h

int pinWei = 10;



void setup() {

for(int x=0; x<4; x++) {

pinMode(pinWei+x, OUTPUT); //设置各脚为输出状态

digitalWrite(pinWei+x, HIGH);//

}

     

for(int x=0; x<8; x++) {

pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态

}

}



//在数码管中显示数字的函数

void displayDigit(unsigned char digit) {

//定义一个数组表:不同数字的abcdefgh各段的取值

unsigned char abcdefgh[][8] = {

{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,0}, //A

{0,0,1,1,1,1,1,0}, //b

{1,0,0,1,1,1,0,0}, //C

{0,1,1,1,1,0,1,0}, //d

{1,0,0,1,1,1,1,0}, //E

{1,0,0,0,1,1,1,0}, //F

{0,0,0,0,0,0,0,1}, //DOT = 16

{0,0,0,0,0,0,0,0}, //BLANK = 17

{0,0,0,0,0,0,1,0}, //MINUS= 18

};

  

if ( digit > 18 ) return;

for (unsigned char x=0; x<8; x++)

digitalWrite( pinDigitron + x, abcdefgh[digit][x] );

}



//在指定的位,显示指定的数字

void display(unsigned char wei, unsigned char digit) {

#define BLANK 17

  

for(int x=0; x<4; x++) {

if ( x != wei- 1)

digitalWrite(pinWei + x, HIGH);

}

  

displayDigit(BLANK);//擦除

digitalWrite(pinWei + wei- 1 , LOW);//位选

delay(1);



displayDigit(digit);//显示数字

delay(5);

}



void loop() {

display(1, 3);//在第1位显示数字3

display(2, 2);//在第2位显示数字2

display(3, 0xB);//在第3位显示数字 b

display(4, 0xF);//在第4位显示数字 F

}[/mw_shl_code]

运行效果: 四位数码管显示 "32bF"


一、了解数码管(Digitron)

Arduino学习(八) 数码管图8

数码管, 又称LED数码管, 是由八段发光二极管(LED)封装在一起组成“8”字型的器件,外加一个小数点。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一

数码管就是八个LED的并联,各LED阳极或阴极共用一个管脚。根据共用管脚的不同,分为按共阳极数码管和共阴极数码管二种。

Arduino学习(八) 数码管图9

如上图中的外形图, 数码管有8个显示笔划"a,b,c,d,e,f,g,h" (h是小数点,有时也称为dp), 上下共10个引脚,上方中间的脚是公共极,如图分别是a,b,c,d,e,f,g,h脚。

对于共阴极数码管,公共极是阴极。对于共阳极数码管,公共极是阳极。

共阳极数码管和共阴极数码管从外型上无法区分。判别方法是用万用表量一下。

数码管的显示机制与LED完全一样,比如:  在 a脚 与 公共脚 之间加一个正向电压、电流3-10mA, 则 a段 将亮。其它段道理一样。

让不同的段亮起,显示为不同的数字。当b, c 段亮时,显示为1.   abcdef段亮,显示为0. 等等。

数码管基本型显示一位数字,也有两位、三位、四位数字的数码管。

由于本人没有数码管的模块,以下直接用数码管搭电路进行实验学习。

二、数码管实验(使用数码管元器件自已搭电路)

1, 准备元器件和器材

     共阴极数码管(1位)  一个

     面包板一块

     1K 电阻一个

      杜邦线若干


2, 电路原理图

Arduino学习(八) 数码管图10

把共阴极数码管的公共脚接GND, 串接一个限流电阻
abcdefgh 各脚接 Arduino的数字脚(D2-D9)

说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在abcdefgh各脚中均接一个限流电阻,如下:
Arduino学习(八) 数码管图11

3, 用面包板接线

把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线

将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)

公共极接1K电阻后接GND

4, 在Arduino IDE中写个Arduino程序控制数码管显示

[mw_shl_code=applescript,true]
int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h



void setup() {

for(int x=0; x<8; x++)

pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态

}



//在数码管中显示数字的函数

void displayDigit(unsigned char digit) {

//定义一个数组表:不同数字的abcdefgh各段的取值

unsigned char abcdefgh[][8] = {

{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,0}, //A

{0,0,1,1,1,1,1,0}, //b

{1,0,0,1,1,1,0,0}, //C

{0,1,1,1,1,0,1,0}, //d

{1,0,0,1,1,1,1,0}, //E

{1,0,0,0,1,1,1,0}, //F

};

  

if ( digit >= 16 ) return;

for (unsigned char x=0; x<8; x++)

digitalWrite( pinDigitron + x, abcdefgh[digit][x] );

}



void loop() {

//在数码管中显示0-9,A-F各个数字

for (int x=0; x<16; x++) {

displayDigit(x); //调用displayDigit()子函数,显示数字

delay(1000); //等待1000毫秒

}

}[/mw_shl_code]
运行效果: 数码管每隔一秒显示一个数字, 从0到9, 再从A到F



四、四位数码管实验(使用数码管元器件自已搭电路)

四位数码管把四个数码管集成在一起的,可以显示四位数字

Arduino学习(八) 数码管图12
1, 准备元器件和器材

     四位共阴极数码管  一个

     面包板一块

     1K 电阻一个

      杜邦线若干

1, 准备元器件和器材

     共阴极数码管  一个

     面包板一块

     1K 电阻一个

      杜邦线若干


2, 四位数码管的管脚和显示原理

四位数码管共12个脚,管脚如下图:

Arduino学习(八) 数码管图13


其中:  1, 2, 3, 4 脚用于选择处理哪一位数字(对于共阴型,低电平有效),也是这一位数字的公共极。比如选择数字1,则对1脚送低电平。

选好数字后,对abcdefgh的操作与一位数码管相同

3, 电路原理图

Arduino学习(八) 数码管图14

abcdefgh 各脚接 Arduino的数字脚(D2-D9)

1,2,3,4脚接D10-D13, 分别串接一个限流电阻

4,用面包板接线

把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线

将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)

1,2,3,4脚接D10-D13, 分别串接一个限流电阻

5, 在Arduino IDE中写个Arduino程序控制四位数码管显示
[mw_shl_code=applescript,true]
int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h

int pinWei = 10;



void setup() {

for(int x=0; x<4; x++) {

pinMode(pinWei+x, OUTPUT); //设置各脚为输出状态

digitalWrite(pinWei+x, HIGH);//

}

     

for(int x=0; x<8; x++) {

pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态

}

}



//在数码管中显示数字的函数

void displayDigit(unsigned char digit) {

//定义一个数组表:不同数字的abcdefgh各段的取值

unsigned char abcdefgh[][8] = {

{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,0}, //A

{0,0,1,1,1,1,1,0}, //b

{1,0,0,1,1,1,0,0}, //C

{0,1,1,1,1,0,1,0}, //d

{1,0,0,1,1,1,1,0}, //E

{1,0,0,0,1,1,1,0}, //F

{0,0,0,0,0,0,0,1}, //DOT = 16

{0,0,0,0,0,0,0,0}, //BLANK = 17

{0,0,0,0,0,0,1,0}, //MINUS= 18

};

  

if ( digit > 18 ) return;

for (unsigned char x=0; x<8; x++)

digitalWrite( pinDigitron + x, abcdefgh[digit][x] );

}



//在指定的位,显示指定的数字

void display(unsigned char wei, unsigned char digit) {

#define BLANK 17

  

for(int x=0; x<4; x++) {

if ( x != wei- 1)

digitalWrite(pinWei + x, HIGH);

}

  

displayDigit(BLANK);//擦除

digitalWrite(pinWei + wei- 1 , LOW);//位选

delay(1);



displayDigit(digit);//显示数字

delay(5);

}



void loop() {

display(1, 3);//在第1位显示数字3

display(2, 2);//在第2位显示数字2

display(3, 0xB);//在第3位显示数字 b

display(4, 0xF);//在第4位显示数字 F

}

[/mw_shl_code]
运行效果: 四位数码管显示 "32bF"
---------------------
作者:JoStudio
来源:CSDN
原文:https://blog.csdn.net/c80486/article/details/52622042

gada888  版主

发表于 2019-2-21 18:54:04

非常详尽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail