6477| 1
|
[入门] Arduino学习(八) 数码管 |
本帖最后由 tyjjr 于 2019-2-19 17:14 编辑 一、了解数码管(Digitron) 数码管, 又称LED数码管, 是由八段发光二极管(LED)封装在一起组成“8”字型的器件,外加一个小数点。 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一 数码管就是八个LED的并联,各LED阳极或阴极共用一个管脚。根据共用管脚的不同,分为按共阳极数码管和共阴极数码管二种。 如上图中的外形图, 数码管有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, 电路原理图 把共阴极数码管的公共脚接GND, 串接一个限流电阻 abcdefgh 各脚接 Arduino的数字脚(D2-D9) 说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在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 四、四位数码管实验(使用数码管元器件自已搭电路) 四位数码管把四个数码管集成在一起的,可以显示四位数字 1, 准备元器件和器材 四位共阴极数码管 一个 面包板一块 1K 电阻一个 杜邦线若干 1, 准备元器件和器材 共阴极数码管 一个 面包板一块 1K 电阻一个 杜邦线若干 2, 四位数码管的管脚和显示原理 四位数码管共12个脚,管脚如下图: 其中: 1, 2, 3, 4 脚用于选择处理哪一位数字(对于共阴型,低电平有效),也是这一位数字的公共极。比如选择数字1,则对1脚送低电平。 选好数字后,对abcdefgh的操作与一位数码管相同 3, 电路原理图 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) 数码管, 又称LED数码管, 是由八段发光二极管(LED)封装在一起组成“8”字型的器件,外加一个小数点。 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一 数码管就是八个LED的并联,各LED阳极或阴极共用一个管脚。根据共用管脚的不同,分为按共阳极数码管和共阴极数码管二种。 如上图中的外形图, 数码管有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, 电路原理图 把共阴极数码管的公共脚接GND, 串接一个限流电阻 abcdefgh 各脚接 Arduino的数字脚(D2-D9) 说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在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 四、四位数码管实验(使用数码管元器件自已搭电路) 四位数码管把四个数码管集成在一起的,可以显示四位数字 1, 准备元器件和器材 四位共阴极数码管 一个 面包板一块 1K 电阻一个 杜邦线若干 1, 准备元器件和器材 共阴极数码管 一个 面包板一块 1K 电阻一个 杜邦线若干 2, 四位数码管的管脚和显示原理 四位数码管共12个脚,管脚如下图: 其中: 1, 2, 3, 4 脚用于选择处理哪一位数字(对于共阴型,低电平有效),也是这一位数字的公共极。比如选择数字1,则对1脚送低电平。 选好数字后,对abcdefgh的操作与一位数码管相同 3, 电路原理图 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 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed