四位数码管和三位数码管原理类似,只不过四位数码管有4个共用的COM口。
根一共有4个公共端和8个接口,共12个引脚。
先设置所有引脚为输出状态,通过数组的形式,确定每个数字的0\1状态。
我使用的是共阳极接法。
运用视觉暂留效果,使看到的一个数码管上的四个数字同时亮起。
另外通过switch选择相应的公共极COM口。
#include<Arduino.h>
int A= 2;
int B= 3;
int C =4;
int D= 5;
int E= 6;
int F= 7;
int G =8;
int H =9;
int COM1= 10;
int COM2= 11;
int COM3= 12;
int COM4= 13;
void setup()
{
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(F,OUTPUT);
pinMode(G,OUTPUT);
pinMode(H,OUTPUT);
pinMode(COM1,OUTPUT);
pinMode(COM2,OUTPUT);
pinMode(COM3,OUTPUT);
pinMode(COM4,OUTPUT);
}
unsigned char table[10][8]=
{
{1,1,1,1,1,1,0,0},//0
{0,1,1,0,0,0,0,0},//1
{1,1,0,1,1,0,1,0},//2
{0,0,0,0,1,1,0,1},//3
{0,1,1,0,0,1,1,0},//4
{0,1,0,0,1,0,0,1},//5
{1,0,1,1,1,1,1,0},//6
{1,1,1,0,0,0,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0},//9
};
void loop()
{
for(int i=0;i<300;i++)
{
Display(1,1);
delay(5);
Display(2,9);
delay(5);
Display(3,4);
delay(5);
Display(4,9);
delay(5);
}
for(int i=0;i<300;i++)
{
Display(1,1);
delay(5);
Display(2,9);
delay(5);
Display(3,6);
delay(5);
Display(4,4);
delay(5);
}
for(int i=0;i<300;i++)
{
Display(1,1);
delay(5);
Display(2,9);
delay(5);
Display(3,8);
delay(5);
Display(4,4);
delay(5);
}
for(int i=0; i<300; i++)
{
Display(1,1);
delay(5);
Display(2,9);
delay(5);
Display(3,9);
delay(5);
Display(4,7);
delay(5);
}
for(int i=0;i<300;i++)
{
Display(1,2);
delay(5);
Display(2,0);
delay(5);
Display(3,0);
delay(5);
Display(4,8);
delay(5);
}
for(int i=0;i<300;i++)
{
Display(1,2);
delay(5);
Display(2,0);
delay(5);
Display(3,1);
delay(5);
Display(4,6);
delay(5);
}
for(int i=0;i<300;i++)
{
Display(1,2);
delay(5);
Display(2,0);
delay(5);
Display(3,1);
delay(5);
Display(4,9);
delay(5);
}
}
void Display(unsigned char com, unsigned char num){
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(H,HIGH);
switch(com)
{
case 1:
digitalWrite(COM1,LOW);
digitalWrite(COM2,HIGH);
digitalWrite(COM3,HIGH);
digitalWrite(COM4,HIGH);
break;
case 2:
digitalWrite(COM1,HIGH);
digitalWrite(COM2,LOW);
digitalWrite(COM3,HIGH);
digitalWrite(COM4,HIGH);
break;
case 3:
digitalWrite(COM1,HIGH);
digitalWrite(COM2,HIGH);
digitalWrite(COM3,LOW);
digitalWrite(COM4,HIGH);
break;
case 4:
digitalWrite(COM1,HIGH);
digitalWrite(COM2,HIGH);
digitalWrite(COM3,HIGH);
digitalWrite(COM4,LOW);
break;
defult:break;
}
digitalWrite(A,table[num][0]);
digitalWrite(B,table[num][1]);
digitalWrite(C,table[num][2]);
digitalWrite(D,table[num][3]);
digitalWrite(E,table[num][4]);
digitalWrite(F,table[num][5]);
digitalWrite(G,table[num][6]);
digitalWrite(H,table[num][7]);
}
这里实现的是1949到2019的输出。例如显示“1949”时,通过一个for循环,i值的设定可以控制“1949”的停留时间,“1”和“9”之间通过delay 5毫秒,短暂的视觉暂留效果,因此看到的是1949同时显示。
四个公共极控制四个数码块,还是拿“1949"举例子,当第一个数码块显示”1“,因此display(1,1), com=1, num=1,因此程序走case1,此时COM1为LOW,其余三个COM口都为HIGH(因为我是共阳极接法),只允许COM1控制的第一个数码块亮起。
实现效果如下:


后面的
本文介绍如何使用Arduino控制四位数码管同时显示数字。通过共阳极接法,利用视觉暂留效果,使得数码管能同时显示1949至2019之间的数字。在程序中,通过switch选择不同的公共端COM,并使用for循环和delay函数控制数字的停留时间和切换间隔,从而实现连续滚动显示的效果。
1万+

被折叠的 条评论
为什么被折叠?



