keen 发表于 2012-4-15 14:12:36

请教一下,如果是共阴的数码管,是不是需要在除共阴外每个管脚上都串限流电阻?

弘毅 发表于 2012-4-15 14:31:21

keen 发表于 2012-4-15 14:12 static/image/common/back.gif
请教一下,如果是共阴的数码管,是不是需要在除共阴外每个管脚上都串限流电阻?

在共阴端串联也可以,只不过这种方法会导致不同数字因为亮的led数量不同,电流大小有区别,所以亮度不均匀。

除共阴以外其他管脚都串联电阻,这种方法虽然看的用的电阻多。但是不会产生不同数值因为亮的led多少不一样,亮度不均匀问题,推荐这种方法。

keen 发表于 2012-4-16 00:06:49

弘毅 发表于 2012-4-15 14:31 static/image/common/back.gif
在共阴端串联也可以,只不过这种方法会导致不同数字,因为亮的led不同,电流大小有区别,所以亮度不军用。 ...

非常感谢!!

Uduse 发表于 2012-7-27 01:36:41

手里只有共阴的,找到的资料又不匹配...控制变量法调试了好久才搞定...

话说阴极共阻的话对亮度影响不仔细看的话基本看不出来,我共的是100欧的

Uduse 发表于 2012-7-27 02:24:54

纯小白贴段代码,共阴,型号d5611

觉得楼主关数码管的方式有点麻烦,还要加循环...导致像我这类的小白各种混乱....

我直接新定义一个通用的clearall 来关掉全部的数码管,之前定义各个数字就可以只顾亮的了,然后在loop里每次调用亮某个数字延时之后跟一个clearall就可以了。int a=7;
int b=6;
int c=4;
int d=11;
int e=12;
int f=9;
int g=10;
int dp=5;

void d_1 (void)   
{
char j;
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
}

void d_2 (void)
{
char j;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( e, HIGH);
digitalWrite ( g, HIGH);
}

void d_3 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( g, HIGH);
}

void d_4 (void)
{
char j ;
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( f, HIGH);
digitalWrite ( g, HIGH);
}

void d_5 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( f, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( g, HIGH);
}

void d_6 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( e, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( g, HIGH);
digitalWrite ( f, HIGH);
}

void d_7 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
}

void d_8 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( e, HIGH);
digitalWrite ( f, HIGH);
digitalWrite ( g, HIGH);
}

void d_9 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( g, HIGH);
digitalWrite ( f, HIGH);
}

void d_0 (void)
{
char j ;
digitalWrite ( a, HIGH);
digitalWrite ( b, HIGH);
digitalWrite ( c, HIGH);
digitalWrite ( d, HIGH);
digitalWrite ( e, HIGH);
digitalWrite ( f, HIGH);
}

void clearall()//关闭全部的管子
{
for ( int k = 4; k <= 12; k++)
    digitalWrite( k, LOW);
}

void setup ()
{
for ( int i = 4; i <= 12; i++)
    pinMode ( i, OUTPUT);
pinMode ( 8, INPUT);
}

void loop ()
{
clearall();//先确保都是关着的
delay(50);//延迟可要可不要

d_1();
delay(500);
clearall();
delay(50);

d_2();
delay(500);
clearall();
delay(50);

d_3();
delay(500);
clearall();
delay(50);

d_4();
delay(500);
clearall();
delay(50);

d_5();
delay(500);
clearall();
delay(50);

d_6();
delay(500);
clearall();
delay(50);

d_7();
delay(500);
clearall();
delay(50);

d_8();
delay(500);
clearall();
delay(50);

d_9();
delay(500);
clearall();
delay(50);

d_0();
delay(500);
clearall();
delay(50);
}

弘毅 发表于 2012-7-27 08:56:24

Uduse 发表于 2012-7-27 02:24 static/image/common/back.gif
纯小白贴段代码,共阴,型号d5611

觉得楼主关数码管的方式有点麻烦,还要加循环...导致像我这类的小白各 ...

:lol这个代码比我那个好多了

ttyp 发表于 2012-9-28 20:53:27

不知道怎么回事,我把程序里的HIGH和LOW互换后才正确显示,是因为数码管是共阴?

另附一张数码管的A-G的图

弘毅 发表于 2012-9-29 18:46:50

ttyp 发表于 2012-9-28 20:53 static/image/common/back.gif
不知道怎么回事,我把程序里的HIGH和LOW互换后才正确显示,是因为数码管是共阴?

另附一张数码管的A-G的 ...

嗯,共阴的原因。

dckency 发表于 2012-12-5 16:43:52

byte code[]= {0x84,0x9F,0xC8,0x8A,0x93,0xA2,0xA0,0x8F,0x80,0x82};

void setup()
{
for(byte j=4;j<12;j++)
{
pinMode(j, OUTPUT);   
}
}
   
void sevenSegWrite(byte digit)
{
byte pin = 11;
for (byte i=0;i<8;i++)
{
    digitalWrite(pin, bitRead(code,i));
    pin--;
}
}

void loop() {   //设置显示效果为从9开始倒数


for (byte count = 0; count < 10; count++) {
   delay(500);
   sevenSegWrite(count);
}
delay(1000);
}

我用proteus仿真,为什么从0到9能循环计数,但是把循环体改成从9到0就只能循环一次然后停止

dckency 发表于 2012-12-5 17:05:41

void loop() {   //设置显示效果为从9开始倒数


for (byte count = 9; count >= 0;count--) {
   delay(500);
   sevenSegWrite(count);
}
}
就是这样

玄冰之神 发表于 2013-4-16 11:03:24

:(我学的Linux 下X86.的C 弄得我看什么C都是略懂。。有些细节弄不明白啊 怎么办

之之风 发表于 2013-5-29 00:46:08

陈冬冬 发表于 2012-1-17 18:04 static/image/common/back.gif
void sevenSegWrite(byte digit) {//设置通过数组控制引脚开关,顺序为4-11号端口
byte pin = 4;
f ...

void sevenSegWrite(int digit) {//设置通过数组控制引脚开关,顺序为4-11号端口
int pin = 4;
for (int segCount = 0; segCount <=7; segCount++) {
    digitalWrite(pin, seven_seg_digits);
    ++pin;
}
}

void loop() {   //设置显示效果为从9开始倒数
for (int count =9; count >=0; count--) {
   delay(1000);
   sevenSegWrite(count);
}
delay(2000);
}这个比较符合我的思维习惯

之之风 发表于 2013-5-29 00:49:12

之之风 发表于 2013-5-29 00:46 static/image/common/back.gif
void sevenSegWrite(int digit) {//设置通过数组控制引脚开关,顺序为4-11号端口
int pin = 4;
f ...

就是不知道用byte比起int有何优势
用byte的话0--就死机了

伯德 发表于 2013-5-29 01:25:39

玄冰之神 发表于 2013-4-16 11:03 static/image/common/back.gif
我学的Linux 下X86.的C 弄得我看什么C都是略懂。。有些细节弄不明白啊 怎么办

找本 C程序设计语言学一遍.http://book.douban.com/subject/1139336/

玄冰之神 发表于 2013-5-29 09:03:33

伯德 发表于 2013-5-29 01:25 static/image/common/back.gif
找本 C程序设计语言学一遍.http://book.douban.com/subject/1139336/

这本书我有实体书。。现在想学C++有好书介绍么?
页: 1 [2] 3
查看完整版本: arduino学习笔记5 - 数码管实验