快捷搜索:  汽车  科技

arduino数码管不亮(Arduino驱动四位数码管)

arduino数码管不亮(Arduino驱动四位数码管)

arduino数码管不亮(Arduino驱动四位数码管)(1)

前面介绍了 Arduino 驱动1位数码管的方法,这次我们进行的实验是使用arduino驱动一块共阳四位数码管。驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。

4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1 其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。

arduino数码管不亮(Arduino驱动四位数码管)(2)


下图为数码管的说明手册

arduino数码管不亮(Arduino驱动四位数码管)(3)

下面是硬件连接图

arduino数码管不亮(Arduino驱动四位数码管)(4)

arduino数码管不亮(Arduino驱动四位数码管)(5)

源代码如下:

#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]); }

猜您喜欢: