前面我们用arduino控制一位数码管,知道了控制数码管的原理。这里我们增加了一位,其显示的原理基本一样。只不过本质上不是两位同时点亮,而是轮换点亮。下面是原理图:
我们来看看代码的实现:
int PIN_A=2;
int PIN_B=3;
int PIN_C=4;
int PIN_D=5;
int PIN_E=6;
int PIN_F=7;
int PIN_G=8;
int POW1=13;
int POW2=12;
int i=0;
int j=0;
int n=0;
int Arduino_Pins[7]={PIN_A, PIN_B, PIN_C, PIN_D, PIN_E, PIN_F, PIN_G};
int Segment_Pins[10] [7]={
{0,1,1,1,1,1,1},//0
{0, 0,0,0, 1, 1,0},//1
{1,0,1,1,0,1,1},//2
{1,0, 0, 1,1,1,1},//3
{1,1,0,0, 1, 1,0},//4
{1,1,0, 1,1, 0, 1},//5
{1,1,1,1,1,0,1},//6
{0,0,0,0,1,1, 1},//7
{1,1, 1,1,1,1,1},//8
{1,1,0,1,1,1,1},//9
};
void setup () {
// TODO: put your setup code here, to run once:
for(int i=2;i<14;i++)
pinMode(i,OUTPUT);
}
void loop() {
// TODO: put your main code here, to run repeatedly:
for (i=0;i<10;i++)
{
digitalWrite (POW1, 0) ;
digitalWrite (POW2,1);
for(j=0;j<7;j++)
digitalWrite (Arduino_Pins[j], Segment_Pins[n%10] [j]);
delay (50);
digitalWrite (POW1,1);
digitalWrite (POW2, 0);
for (j=0;j<7;j++)
digitalWrite(Arduino_Pins[j], Segment_Pins[i][j]);
delay (50);
}
n++;
}
运行效果如下:
从代码中我们很容易看出,两位数码管是轮换点亮的,快速的切换,利用我们的视觉停留感让我们觉得他们是同时点亮的。如果我们将代码中的delay(50)修改为更大的数值,我们就会看到两位数码管乱换点亮。
用arduino板直接控制两位数码管的缺点就在于端口占用太多,至少需要10个端口,那么我们是可以仿照前面的控制一位数码管的方法来操作的,用一片595来控制,有兴趣可以参看我后面的博文《protues用一片74hc595控制两位数码管》。