一、了解数码管(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, 电路原理图
abcdefgh 各脚接 Arduino的数字脚(D2-D9)
说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在abcdefgh各脚中均接一个限流电阻,如下:
3, 用面包板接线
把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线
将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)
公共极接1K电阻后接GND
4, 在Arduino IDE中写个Arduino程序控制数码管显示
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毫秒
}
}
运行效果: 数码管每隔一秒显示一个数字, 从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, 分别串接一个限流电阻
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
}
运行效果: 四位数码管显示 "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, 电路原理图
abcdefgh 各脚接 Arduino的数字脚(D2-D9)
说明一下:由于本人没有买排阻,上图是个简化接法。一般的接法是在abcdefgh各脚中均接一个限流电阻,如下:
3, 用面包板接线
把数码管, 电阻插入面包板, 按上述电路原理图,用杜邦线接好线
将abcdefgh脚 分别接到D2-D9脚 (注意管脚顺序)
公共极接1K电阻后接GND
4, 在Arduino IDE中写个Arduino程序控制数码管显示
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毫秒
}
}
运行效果: 数码管每隔一秒显示一个数字, 从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, 分别串接一个限流电阻
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
}
运行效果: 四位数码管显示 "32bF"