arduino+四位数码管从0到9999爬升

本文介绍了数码管的工作原理,通过控制数码管的a-h段来组合显示数字,并详细阐述了动态显示的方法,即通过快速切换不同位数码管的显示实现同时显示的效果。此外,提供了一段使用Arduino实现的代码示例,展示了如何控制四位数码管依次显示数字,以达到每秒更新一次的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数码管显示原理:通过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]);

}

好的,你可以参考以下代码实现: ```C++ int pinA = 2; // 数码管引脚A连接的Arduino引脚 int pinB = 3; // 数码管引脚B连接的Arduino引脚 int pinC = 4; // 数码管引脚C连接的Arduino引脚 int pinD = 5; // 数码管引脚D连接的Arduino引脚 int pinE = 6; // 数码管引脚E连接的Arduino引脚 int pinF = 7; // 数码管引脚F连接的Arduino引脚 int pinG = 8; // 数码管引脚G连接的Arduino引脚 int pinDP = 9; // 数码管引脚DP连接的Arduino引脚 void setup() { // 设置引脚为输出模式 pinMode(pinA, OUTPUT); pinMode(pinB, OUTPUT); pinMode(pinC, OUTPUT); pinMode(pinD, OUTPUT); pinMode(pinE, OUTPUT); pinMode(pinF, OUTPUT); pinMode(pinG, OUTPUT); pinMode(pinDP, OUTPUT); } void loop() { // 读取电压值并转换为字符串 float voltage = analogRead(A0) * 0.00488; // A0为连接电压传感器的Arduino引脚 String voltageStr = String(voltage, 2); // 保留两位小数 // 显示电压值 display(voltageStr); delay(1000); } void display(String str) { int len = str.length(); for (int i = 0; i < len; i++) { // 显示当前数字 showDigit(str.charAt(i)); // 点亮小数点 if (i == len - 3) { digitalWrite(pinDP, HIGH); } delay(5); // 延时一段时间 // 关闭数码管 digitalWrite(pinA, LOW); digitalWrite(pinB, LOW); digitalWrite(pinC, LOW); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); digitalWrite(pinDP, LOW); } } void showDigit(char c) { switch (c) { case '0': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, LOW); break; case '1': digitalWrite(pinA, LOW); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); break; case '2': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, LOW); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, LOW); digitalWrite(pinG, HIGH); break; case '3': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, HIGH); break; case '4': digitalWrite(pinA, LOW); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); break; case '5': digitalWrite(pinA, HIGH); digitalWrite(pinB, LOW); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); break; case '6': digitalWrite(pinA, HIGH); digitalWrite(pinB, LOW); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); break; case '7': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); break; case '8': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); break; case '9': digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); break; case '.': digitalWrite(pinA, LOW); digitalWrite(pinB, LOW); digitalWrite(pinC, LOW); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, HIGH); break; } } ``` 注意,以上代码中的数码管引脚连接顺序可能与你实际连接的顺序不同,需要根据实际情况进行修改。另外,电压传感器的输出电压范围可能不同,需要根据具体型号进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值