数码管介绍:
如图,本次使用的数码管为共阴极,四个数码管有 12 个引脚, 可以分为位选脚和段选脚。
段选脚:8个引脚a,b,c,d,e,f,g
位选脚:4 个引脚 D1, D2, D3, D4
哪个数码管显示由片选脚决定,片选脚为高电平,则该数码管点亮,为低电平则该数码管熄灭。
数码管显示什么数值由段选脚决定,譬如要显示数字8,则a,b,c,d,e,f,g为高电平,h为低电平;要显示数字1,则b,c为高电平,a,d,e,f,g,h为低电平。
显示原理:四个数码管的显示原理是不断扫描 D1, D2, D3, D4,然后相应的八段管将依次点亮。 由于点亮速度很快,人眼不会看到(人眼能够识别的刷新频率是30HZ),所以它看起来像四个数码管同时显示。
软件代码:
#include "SegmentDisplay.h"
#define LED_A 13 // define Arduino GPIO1 for led a
#define LED_B 2 // define Arduino GPIO2 for led b
#define LED_C 3 // define Arduino GPIO3 for led c
#define LED_D 4 // define Arduino GPIO4 for led d
#define LED_E 5 // define Arduino GPIO5 for led e
#define LED_F 6 // define Arduino GPIO6 for led f
#define LED_G 7 // define Arduino GPIO7 for led g
#define LED_H 8 // define Arduino GPIO8 for led h
#define LED_D1 9
#define LED_D2 10
#define LED_D3 11
#define LED_D4 12
SegmentDisplay _4Bit_7SegmentDisplay(LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G, LED_H, LED_D1, LED_D2, LED_D3, LED_D4);
int ShowTime = 60, count = 0;
void setup()
{
Serial.begin(9600);
_4Bit_7SegmentDisplay.TurnOffAllLed();
}
void loop()
{
if (count++ > 50 )
{
ShowTime-- ;
count = 0 ;
Serial.println(ShowTime);
}
_4Bit_7SegmentDisplay.DisplayChar((int)ShowTime);
delay(5);
if (ShowTime == 0) {
_4Bit_7SegmentDisplay.TurnOffAllLed();
while(1);
}
}
原理图+实验连接图: