arduino数码管不亮(Arduino驱动四位数码管)
arduino数码管不亮(Arduino驱动四位数码管)
前面介绍了 Arduino 驱动1位数码管的方法,这次我们进行的实验是使用arduino驱动一块共阳四位数码管。驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。
4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1 其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。
下图为数码管的说明手册
下面是硬件连接图
源代码如下:
#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 table[10][8] =
{
{0 0 1 1 1 1 1 1} //0
{0 0 0 0 0 1 1 0} //1
{0 1 0 1 1 0 1 1} //2
{0 1 0 0 1 1 1 1} //3
{0 1 1 0 0 1 1 0} //4
{0 1 1 0 1 1 0 1} //5
{0 1 1 1 1 1 0 1} //6
{0 0 0 0 0 1 1 1} //7
{0 1 1 1 1 1 1 1} //8
{0 1 1 0 1 1 1 1} //9
};
void setup()
{
pinMode(SEG_A OUTPUT); //设置为输出引脚
pinMode(SEG_B OUTPUT);
pinMode(SEG_C OUTPUT);
pinMode(SEG_D OUTPUT);
pinMode(SEG_E OUTPUT);
pinMode(SEG_F OUTPUT);
pinMode(SEG_G OUTPUT);
pinMode(SEG_H OUTPUT);
pinMode(COM1 OUTPUT);
pinMode(COM2 OUTPUT);
pinMode(COM3 OUTPUT);
pinMode(COM4 OUTPUT);
}
void loop()
{
Display(1 1); //第1位显示1
delay(500);
Display(2 2); //第2位显示2
delay(500);
Display(3 3); //第3位显示3
delay(500);
Display(4 4); //第4位显示4
delay(500);
}
void Display(unsigned char com unsigned char num)
{
digitalWrite(SEG_A LOW); //去除余晖
digitalWrite(SEG_B LOW);
digitalWrite(SEG_C LOW);
digitalWrite(SEG_D LOW);
digitalWrite(SEG_E LOW);
digitalWrite(SEG_F LOW);
digitalWrite(SEG_G LOW);
digitalWrite(SEG_H LOW);
switch(com) //选通位选
{
case 1:
digitalWrite(COM1 LOW); //选择位1
digitalWrite(COM2 HIGH);
digitalWrite(COM3 HIGH);
digitalWrite(COM4 HIGH);
break;
case 2:
digitalWrite(COM1 HIGH);
digitalWrite(COM2 LOW); //选择位2
digitalWrite(COM3 HIGH);
digitalWrite(COM4 HIGH);
break;
case 3:
digitalWrite(COM1 HIGH);
digitalWrite(COM2 HIGH);
digitalWrite(COM3 LOW); //选择位3
digitalWrite(COM4 HIGH);
break;
case 4:
digitalWrite(COM1 HIGH);
digitalWrite(COM2 HIGH);
digitalWrite(COM3 HIGH);
digitalWrite(COM4 LOW); //选择位4
break;
default:break;
}
digitalWrite(SEG_A table[num][7]); //a查询码值表
digitalWrite(SEG_B table[num][6]);
digitalWrite(SEG_C table[num][5]);
digitalWrite(SEG_D table[num][4]);
digitalWrite(SEG_E table[num][3]);
digitalWrite(SEG_F table[num][2]);
digitalWrite(SEG_G table[num][1]);
digitalWrite(SEG_H table[num][0]);
}