Arduino学习(八) 数码管




一、了解数码管(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程序控制数码管显示

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, 分别串接一个限流电阻


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

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, 电路原理图


把共阴极数码管的公共脚接GND, 串接一个限流电阻

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, 分别串接一个限流电阻


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

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"


猜你喜欢

转载自blog.csdn.net/c80486/article/details/52622042