数码管显示原理:通过a.b.c.d.e.f.g.h灯点亮组合成所要显示的数字即可,如下1-6控制a-h,9-12控制第一到第四个数字,理解为总开关:当9.1.2.3输出,即显示数字7

04c0be3253a545bb9ca5ef370d36aa64.jpg

 数码管为共阴或共阳类,无论那种,都是部分连接一个引脚,如上四个数字管的a-h都是连接到一个引脚,当需要不同位数上显示不同数字时,需要动态显示。

动态显示即让不同位数的数码管间歇显示,达到最终目的。下图示个十百千位各显示1ms为一循环,250循环为1秒,数字num+1,因为循环显示时间间隔短,所以看到的时同时显示的假象c243b1a7a59f4c348252907c37ab2574.jpg

 284fd8aa740a41809eb8a9b56a92b6b6.jpg

 数码管引脚根据连接需要自行定义c5b362a091384e05864e88ada5a39387.jpg

 完整代码

 

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]);

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐