数码管显示原理:通过a.b.c.d.e.f.g.h灯点亮组合成所要显示的数字即可,如下1-6控制a-h,9-12控制第一到第四个数字,理解为总开关:当9.1.2.3输出,即显示数字7
数码管为共阴或共阳类,无论那种,都是部分连接一个引脚,如上四个数字管的a-h都是连接到一个引脚,当需要不同位数上显示不同数字时,需要动态显示。
动态显示即让不同位数的数码管间歇显示,达到最终目的。下图示个十百千位各显示1ms为一循环,250循环为1秒,数字num+1,因为循环显示时间间隔短,所以看到的时同时显示的假象
数码管引脚根据连接需要自行定义
完整代码
int G=2;
int C=3;
int H=4;
int A=5;
int F=6;
int B=7;
int E=8;
int D=9;
int COM1=10;//ge-10
int COM2=13;//shi-13
int COM3=12;//bai-12
int COM4=11;//qian-11
int num;int i=0;
unsigned char table[10][8] =
{ // a b c d e f g h
{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
{1, 1, 1, 1, 0, 0, 1, 0},//3
{0, 1, 1, 0, 0, 1, 1, 0},//4
{1, 0, 1, 1, 0, 1, 1, 0},//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 setup()
{Serial.begin(9600);
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);
}
void loop()
{
Display(num);
num++;
Serial.println(num);
}
void Display(int num)
{ for(int z=0;z<229.5;z++)//根据实际输出调整为229达到1秒
{Display(4,num/1000%10);
delay(1);
Display(3,num/100%10);
delay(1);
Display(2,num/10%10);
delay(1);
Display(1,num/1%10);
delay(1);
}
}
void Display(unsigned char com,unsigned char num)
{
digitalWrite(A,LOW); //去除余晖
digitalWrite(B,LOW);
digitalWrite(C,LOW);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
digitalWrite(G,LOW);
digitalWrite(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(A,table[num][0]); //a查询码值表
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]);
}