proteus仿真arduino控制两位数码管

前面我们用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控制两位数码管》。

发布了116 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/haigear/article/details/103679677