hk386 发表于 2012-10-8 17:53:59

我试过模拟口当数字用,可是好象不能用,电压好象才2.几伏而已, 是要加上拉电阻吗

弘毅 发表于 2012-10-8 18:33:30

hk386 发表于 2012-10-8 17:53 static/image/common/back.gif
我试过模拟口当数字用,可是好象不能用,电压好象才2.几伏而已, 是要加上拉电阻吗

{:soso_e103:} 你是怎么使用的?我试过驱动其他传感器。。。貌似和D口没区别。直接一样用。

hk386 发表于 2012-10-9 09:31:43

解决了模拟当数字使用了,都快忘记AVR的使用了,谢谢了啊

tgyfish 发表于 2012-12-20 13:03:27

我一直觉得数码管的动态显示是个奇葩~知道什么意思从来不会写

chyy-geek 发表于 2013-2-9 21:43:54

非常用心,程式撰寫非常清楚

Mei_Ling 发表于 2013-3-27 15:57:13

根据硬件连接图接了,怎么登不亮? 是不是需要接GND? 谁可以帮忙解决我的问题....

弘毅 发表于 2013-3-27 21:29:02

Mei_Ling 发表于 2013-3-27 15:57 static/image/common/back.gif
根据硬件连接图接了,怎么登不亮? 是不是需要接GND? 谁可以帮忙解决我的问题....

4位数码管的管脚定义有好几种。。如果买到的刚好是和帖子里不一样引脚定义的,那就按照帖子接线就没法驱动了。

Mei_Ling 发表于 2013-3-28 13:29:45

谢谢!
我的数位数码管型号是CAI5461AH, 外观和帖子的一样,不知帖子里的是不是和我的型号一样?

弘毅 发表于 2013-3-28 15:00:06

Mei_Ling 发表于 2013-3-28 13:29 static/image/common/back.gif
谢谢!
我的数位数码管型号是CAI5461AH, 外观和帖子的一样,不知帖子里的是不是和我的型号一样?

这个需要看引脚定义,你如果有你管子的引脚定义图,可以发上来。。大家看看

Mei_Ling 发表于 2013-3-28 22:12:15

没有管子的引脚定义图 :L
我在试试看, 谢谢你了!

玄冰之神 发表于 2013-4-16 16:31:27

:P:P:P这样回复 能到高级会员不。。

庚影! 发表于 2013-7-6 21:45:26

本帖最后由 庚影! 于 2013-7-6 21:56 编辑

用楼主的秒表代码出现一个问题 就是所有数值显示为0无法变化
稍微修改了下 能运行了 时间也不用去调整了
不过我也是新人 不知道如何DEBUG所以也没找到是哪的问题。。{:soso_e142:}

//设置阴极接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int p = 8;
//设置阳极接口
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;
//设置变量
long n = 0;
long n10 = 0;
long n100 = 0;
long n1000 = 0;
int x = 100;
int del = 55;//此处数值对时钟进行微调

byte segs = { a, b, c, d, e, f, g };

byte seven_seg_digits = { { 0,0,0,0,0,0,1 },// = 0
                                 { 1,0,0,1,1,1,1 },// = 1
                                 { 0,0,1,0,0,1,0 },// = 2
                                 { 0,0,0,0,1,1,0 },// = 3
                                 { 1,0,0,1,1,0,0 },// = 4
                                 { 0,1,0,0,1,0,0 },// = 5
                                 { 0,1,0,0,0,0,0 },// = 6
                                 { 0,0,0,1,1,1,1 },// = 7
                                 { 0,0,0,0,0,0,0 },// = 8
                                 { 0,0,0,0,1,0,0 }   // = 9
                           };

void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}

void loop()
{
      
      long w = millis()/100;
//这个是调用时间的函数
        shownum(w);
}

void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);

switch(x)
{
case 1:
    digitalWrite(d1, HIGH);
    break;
case 2:
    digitalWrite(d2, HIGH);
    break;
case 3:
    digitalWrite(d3, HIGH);
    break;
default:
    digitalWrite(d4, HIGH);
    break;
}
}

void dispDec(int x)//设定开启小数点
{
digitalWrite(p, LOW);
}

void clearLEDs()//清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}


// 点亮对应数字的数码管
void lightSegments(int x) {
for (int i = 0; i < 7; i++) {
    digitalWrite(segs, seven_seg_digits);
}
}


//这边是新加的函数 其实和楼主貌似差不多 但是为啥楼主的会出问题我也不知道
void shownum (int x)
{

long x1 = x/1000%10;
long x10 = x/100%10;
long x100 = x/10%10;
long x1000 = x/1%10;


clearLEDs();
pickDigit(1);
lightSegments(x1);
delayMicroseconds(del);

clearLEDs();
pickDigit(2);
lightSegments(x10);
delayMicroseconds(del);

clearLEDs();
pickDigit(3);
dispDec(3);
lightSegments(x100);
delayMicroseconds(del);

clearLEDs();
pickDigit(0);
lightSegments(x1000);
delayMicroseconds(del);
}

enzotim 发表于 2013-7-20 13:43:08

注意啦 有些是共阴的,把楼主代码HIGH 和LOW 调转就可以啦

enzotim 发表于 2013-7-20 13:45:10

本帖最后由 enzotim 于 2013-7-20 13:46 编辑

共阴代码。。。。。。。。。
//设置阴极接口

int a = 1;

int b = 2;

int c = 3;

int d = 4;

int e = 5;

int f = 6;

int g = 7;

int p = 8;

//设置阳极接口

int d4 = 9;

int d3 = 10;

int d2 = 11;

int d1 = 12;

//设置变量

long n = 0;

int x = 100;

int del = 55;//此处数值对时钟进行微调



void setup()

{

pinMode(d1, OUTPUT);

pinMode(d2, OUTPUT);

pinMode(d3, OUTPUT);

pinMode(d4, OUTPUT);

pinMode(a, OUTPUT);

pinMode(b, OUTPUT);

pinMode(c, OUTPUT);

pinMode(d, OUTPUT);

pinMode(e, OUTPUT);

pinMode(f, OUTPUT);

pinMode(g, OUTPUT);

pinMode(p, OUTPUT);

}



void loop()

{

clearLEDs();

pickDigit(1);

pickNumber((n/x/1000)%10);

delayMicroseconds(del);



clearLEDs();

pickDigit(2);

pickNumber((n/x/100)%10);

delayMicroseconds(del);



clearLEDs();

pickDigit(3);

dispDec(3);

pickNumber((n/x/10)%10);

delayMicroseconds(del);



clearLEDs();

pickDigit(4);

pickNumber(n/x%10);

delayMicroseconds(del);



n++;



if (digitalRead(13) == LOW)

{

    n = 0;

}

}



void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口

{

digitalWrite(d1, HIGH);

digitalWrite(d2, HIGH);

digitalWrite(d3, HIGH);

digitalWrite(d4, HIGH);



switch(x)

{

case 1:

    digitalWrite(d1, LOW);

    break;

case 2:

    digitalWrite(d2, LOW);

    break;

case 3:

    digitalWrite(d3, LOW);

    break;

default:

    digitalWrite(d4, LOW);

    break;

}

}



void pickNumber(int x)   //定义pickNumber(x),其作用是显示数字x

{

switch(x)

{

default:

    zero();

    break;

case 1:

    one();

    break;

case 2:

    two();

    break;

case 3:

    three();

    break;

case 4:

    four();

    break;

case 5:

    five();

    break;

case 6:

    six();

    break;

case 7:

    seven();

    break;

case 8:

    eight();

    break;

case 9:

    nine();

    break;

}

}



void dispDec(int x)//设定开启小数点

{

digitalWrite(p, HIGH);

}



void clearLEDs()//清屏

{

digitalWrite(a, LOW);

digitalWrite(b, LOW);

digitalWrite(c, LOW);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

digitalWrite(p, LOW);

}



void zero()//定义数字0时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, LOW);

}



void one()//定义数字1时阴极那些管脚开关

{

digitalWrite(a, LOW);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

}



void two()//定义数字2时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, LOW);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, LOW);

digitalWrite(g, HIGH);

}



void three()//定义数字3时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, HIGH);

}



void four()//定义数字4时阴极那些管脚开关

{

digitalWrite(a, LOW);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

}



void five()//定义数字5时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, LOW);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

}



void six()//定义数字6时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, LOW);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

}



void seven()//定义数字7时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

}



void eight()//定义数字8时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

}



void nine()//定义数字9时阴极那些管脚开关

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

}

火红枫叶 发表于 2013-8-10 18:15:37

enzotim 发表于 2013-7-20 13:45 static/image/common/back.gif
共阴代码。。。。。。。。。
//设置阴极接口



我的数码管就是共阴的,比如楼主的第一段代码,该亮的灭,该灭的亮!

感谢分享代码!
页: 1 [2] 3 4
查看完整版本: arduino学习笔记13 - 4位数码管实验