tianlongk 发表于 2016-1-11 22:35:37

今天用ARDUINO驱动4位数码管遇到了问题求高手解答

本帖最后由 tianlongk 于 2016-1-11 22:37 编辑

我用ARDUINO驱动4位数码管,本来打算输出1到1000玩,结果发现输出十位以上就不会了,先输出前两位,发现数字闪烁,不知道为什么,视频不太明显,但是确实闪烁,代码如下:
//设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。
int a=6;
int b=9;
int c=8;
int d=7;
int e=10;
int f=11;
int g=12;
int dp=13;

//显示数字1
void digital_1(void)
{

digitalWrite(a,HIGH);
digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
digitalWrite(dp,HIGH);
}
//显示数字2
void digital_2(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
    digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
//显示数字3
void digital_3(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
    digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
//显示数字4
void digital_4(void)
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);   
}
//显示数字5
void digital_5(void)
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
    digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
//显示数字6
void digital_6(void)
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
    digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
//显示数字7
void digital_7(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
digitalWrite(dp,HIGH);
}
//显示数字8
void digital_8(void)
{
unsigned char j;
for(j=6;j<=13;j++)
    digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
}
//显示数字9
void digital_9(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
    digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
//显示数字0
void digital_0(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
    digitalWrite(c,LOW);
    digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
digitalWrite(dp,HIGH);
}
void setNum(int n){
switch(n){
    case 1:
    digital_1();
    break;
    case 2:
    digital_2();
    break;
    case 3:
    digital_3();
    break;
    case 4:
    digital_4();
    break;
    case 5:
    digital_5();
    break;
    case 6:
    digital_6();
    break;
    case 7:
    digital_7();
    break;
    case 8:
    digital_8();
    break;
    case 9:
    digital_9();
    break;
    case 0:
    digital_0();
    break;
    };
}
void setup()
{
int i;//定义变量
for(i=6;i<=13;i++)
    pinMode(i,OUTPUT);//设置4~11引脚为输出模式
}
void loop()
{
while(1)
{
    int i=0;
    for(i=0;i<=1000;i++){
      if(i<10){
    digitalWrite(5,HIGH);
    setNum(i);
    delay(100);
    }
    else if(i<100){
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);
    setNum(i%10);
    delay(30);
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);
    setNum(i/10);
//    delay(2);
    delay(100);
      }
      }
//    digital_1();//数字1
//    delay(2000);//延时2s
//    digital_2();
//    delay(2000);
//    digital_3();
//    delay(2000);
//    digital_4();
//    delay(2000);
//    digital_5();
//    delay(2000);
//    digital_6();
//    delay(2000);
//    digital_7();
//    delay(2000);
//    digital_8();
//    delay(2000);   
//    digital_9();
//    delay(2000);   
//    digital_0();
//    delay(2000);   
}
}

http://player.youku.com/player.php/Type/Folder/Fid/26521251/Ob/1/sid/XMTQ0MjQ4NjI1Ng==/v.swf
上面是我试验视频效果,求高手解答疑惑。

164335413 发表于 2016-1-12 09:07:01

数码管刷新频率和持续时间都必须合适。但你这种情况属于驱动电流不够。7段同时亮亮度会低,只亮2段亮度会高。

tianlongk 发表于 2016-1-12 16:11:53

164335413 发表于 2016-1-12 09:07 static/image/common/back.gif
数码管刷新频率和持续时间都必须合适。但你这种情况属于驱动电流不够。7段同时亮亮度会低,只亮2段亮度会高 ...

我加了220的电阻,因为看购买的原件资料里就这么加的,具体这个还不太懂,刚开始玩这东西,怕烧元器件,我们这边不好配,所以我想问的是,不加电子可以么?直接连,如果可以的话,我就把电阻去掉,再设置一下代码看看

164335413 发表于 2016-1-12 21:28:43

最好用驱动芯片驱动,Arduino毕竟不能驱动这么多二极管正常亮。
你可以四位串电阻,而不是8段串电阻。
页: [1]
查看完整版本: 今天用ARDUINO驱动4位数码管遇到了问题求高手解答