binggdudu 发表于 2015-4-28 10:44:03

学习学习啊

zhaoshuancheng 发表于 2015-6-8 07:33:25

各位高手讲的太详细了,才自学不久努力中,多谢各位,,,,,,,还要输入验证码,发帖太麻烦了:Q

chen950928 发表于 2015-7-2 10:42:44

/*
数码管显示
数码管连续循环显示0~9
*/

byte DIGITAL_DISPLAY = { //设置0-9数字所对应数组
{ 0,0,0,0,0,1,0,0 }, // = 0
{ 0,0,0,1,1,1,1,1 }, // = 1
{ 0,1,0,0,1,0,0,0 }, // = 2
{ 0,0,0,0,1,0,1,0 }, // = 3
{ 0,0,0,1,0,0,1,1 }, // = 4
{ 0,0,1,0,0,0,1,0 }, // = 5
{ 0,0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,0,0,1,0 } // = 9
};
byte DIGITAL = { //设置0-9数字所对应数组
{ 1,1,1,1,1,1,1,1 }, // = 0
{ 1,1,1,1,1,1,1,1 }, // = 1
{ 1,1,1,1,1,1,1,1 }, // = 2
{ 1,1,1,1,1,1,1,1 }, // = 3
{ 1,1,1,1,1,1,1,1 }, // = 4
{ 1,1,1,1,1,1,1,1 }, // = 5
{ 1,1,1,1,1,1,1,1 }, // = 6
{ 1,1,1,1,1,1,1,1 }, // = 7
{ 1,1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,1,1,1,1,1 } // = 9
};

void setup() { //设定4-11号数字端口为输出
for(int i=4;i<=11;i++){
pinMode(i, OUTPUT);
}
}

void loop() {
//0-9数字显示
for (int k = 0; k < 10; k++) {
int pin = 4;
for (int s = 0; s < 8; s++)
{
digitalWrite(pin, DIGITAL_DISPLAY);
delay(100);
pin++;
}
delay(1000);
for (int h = 0; h < 8; h++)
{
digitalWrite(pin, DIGITAL);
delay(100);
pin--;
}
delay(1000);
}

}

这个代码能看到依次点亮的那一个灯。

ximocnc 发表于 2015-9-4 20:37:24

本帖最后由 ximocnc 于 2015-9-4 20:59 编辑

谢谢 学习了

XIEDQGEWELL 发表于 2015-10-12 10:22:06


    [我用4片595级联4个数码管 然后用4个数字IO 接4个按键,在按下当按键的时候 数码管 显示一组数字   ,功能正常 ]
    能给接线图和程序吗,先行感谢了。

xuweizh 发表于 2016-3-24 10:20:23

共阴数码管试验成功,但是这里为何要减去3,才能正常显示?
void setup() {   
   for(int pin=3;pin<=10;pin++) //a,b,c,d,e,f,g,Dp对应引脚3,4,5,6,7,8,9,10
   pinMode(pin,OUTPUT);       //定义引脚为输出
}
void loop() {
/*==========显示=============*/
//定义数组
int n={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
                };
for(int num=0;num<=9;num++)
{
    for(int pin=3;pin<=10;pin++)
      digitalWrite(pin,n);//为何要-3,请大神指教。
    delay(500);
    }
}

xuweizh 发表于 2016-3-24 11:26:01

使用16进制,为何数字不进行循环?求解。
int nums[]=
{ 0xFC,       //    1111,1100,0
    0x60,       //    0110,0000,1
    0xDA,       //    1101,1010,2
    0xF2,       //    1111,0010,3
    0x66,       //    0110,0110,4
    0xB6,       //    1011,0110,5
    0xBE,       //    1011,1110,6
    0xE0,       //    1110,0000,7
    0xFE,       //    1111,1110,8
    0xF6,       //    1111,0110,9
} ;
void setup()
{
for(int pin=3;pin<=10;pin++)
   pinMode(pin,OUTPUT);
}

void loop()
{
/*==========显示=============*/
      
for(int num=0; num<=9;num++)            
{
    for(int pin=1; pin<=8; pin++)   //采用循环方式依次点亮指定的数码管led(数组中1为点亮),单位时间只点亮1个led
      digitalWrite(pin,nums);
   }
delay(1000);
}

fullmous 发表于 2016-3-24 22:05:12

本帖最后由 fullmous 于 2016-3-24 22:06 编辑

给大家介绍一种新的处理方式。

//一个数码管连续显示0~F,十六个字符的程序
//数码管的位选引脚接端口C的0引脚,
//其他8个字段引脚接端口B的0~7引脚
//在本人的AVR单片机最小系统通过,Arduino的引脚不够使

//数码管字符定义数组,共阳的。
uint8_t CA_digit_8[]=
{
        0xC0,//"0"
        0xF9,//"1"
        0xA4,//"2"
        0xB0,//"3"
        0x99,//"4"
        0x92,//"5"
        0x82,//"6"
        0xF8,//"7"
        0x80,//"8"
        0x98,//"9"
        0x88,//"A"
        0x83,//"B"
        0xC6,//"C"
        0xA1,//"D"
        0x86,//"E"
        0x8E,//"F"
        0x00//"8."
};

//数码管字符定义数组,共阴的。
/*
uint8_t CC_digit_8[]=
{
        0x3F,//"0"
        0x06,//"1"
        0x5B,//"2"
        0x4F,//"3"
        0x66,//"4"
        0x6D,//"5"
        0x7D,//"6"
        0x07,//"7"
        0x7F,//"8"
        0x67,//"9"
        0x77,//"A"
        0x7C,//"B"
        0x39,//"C"
        0x5E,//"D"
        0x79,//"E"
        0x71,//"F"
        0xFF//"8."
};
*/

void setup()
{
DDRC = 0x3F;    //初始化端口C输出,用于位选
DDRB = 0xFF;    //初始化端口B输出,用于数码管段
PORTC = 0x00;
PORTB = 0x00;
}

void loop()
{
int i;
PORTC = 0x01;    //选择端口C的引脚0
while(1)
{
    for (i = 0;i < 16; i++)    //循环
    {
      PORTB = CA_digit_8;//0 ~ F 字符码
      delay(1000);            //延时1秒   
}
}
}

是不是比Arduino 的引脚方式简单的多。感兴趣的话,我有更多的例程可介绍给大家。

leo18 发表于 2016-3-25 18:04:09

arduino_ykk 发表于 2013-5-18 13:56 static/image/common/back.gif
交作业咯。 数组没有必要定义在loop里面,否则每次循环都要重新开一点内存来放数组。可以放在整个方法外面啦 ...

讲得真好!谢谢!

原野动力 发表于 2016-5-9 17:20:54

不错,好评,下次再来

magpro 发表于 2016-6-27 22:40:03


unsigned char number[]={252,96,2,3,4,5,6,7,8,9};

void setup() {
int i;
for(i=2;i<10;i++)
{
    pinMode(i,OUTPUT);
    digitalWrite(i,1);
}
}
//-------------主程序--------------------
void loop() {
int i;
for(i=0;i<10;i++) disLED(i);
}
//------------------------------------------
void disLED(char Num)
{
int i;
unsigned char j=number;
for(i=2;i<10;i++)
{
    Serial.println(j);
    if(j/128==1)
    {
      digitalWrite(i,0);
    }
    j=j<<1;
}
delay(1000);
for(i=2;i<10;i++) digitalWrite(i,1);
}
//是不是这样的代码更少

周杰伦 发表于 2016-8-2 16:02:27

我也搞不懂那个PIN为什么要减3??求大神指教啊,我知道是很简单的问题,但就是不理解啊!!:(
void setup() {   
   for(int pin=3;pin<=10;pin++) //a,b,c,d,e,f,g,Dp对应引脚3,4,5,6,7,8,9,10
   pinMode(pin,OUTPUT);       //定义引脚为输出
}
void loop() {
/*==========显示=============*/
//定义数组   a,b,c,d,e,f,g,dp
int n={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
                };
for(int num=0;num<=9;num++)
{
    for(int pin=3;pin<=10;pin++)
      digitalWrite(pin,n);//为何要-3,请大神指教。
    delay(500);
    }
}

zlucas 发表于 2016-8-2 16:20:18

小白路过。:)
写的时候为了把pin(3~10)映射到数组n所以每个值对应减了3.(这种写法不太好理解,值得改进)
即:pin 3         4            5 6 7 8 9 10
↓ n n ...
↓   n    n   ...

逆天者 发表于 2016-12-20 21:29:32

厉害了   自己试着写56789abc

.js 发表于 2016-12-25 17:55:01

本帖最后由 .js 于 2016-12-25 17:56 编辑

代码应该可以设置高亮吧

/*
* 作者:极客工坊-迷你强
* 时间:2012年10月2日
* IDE版本号:1.0.1
* 发布地址:www.geek-workshop.com
* 作用:arduino驱动数码管循环显示0,1,2,3,4几个数字
*/

void setup()
{
        pinMode( 13, OUTPUT ); /* 激活13号引脚,我们需要用它供电 */

        for ( int n = 2; n <= 9; n++ )
        {
                pinMode( n, OUTPUT );
        }
}


void loop()
{
        digitalWrite( 13, 1 );                        /* 这个就是HIGH和LOW 的另一种写法0代表LOW   1代表HIGH */


        /*==========显示0=============*/
        int        n0        = { 0, 0, 0, 0, 0, 0, 1, 1 };   /* 定义数组 通过0,1定义各数码管的明灭, */
        int        z        = 0;
        for ( int x = 2; x <= 9; x++ )                  /* 采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led */
        {
                digitalWrite( x, n0 );               /* 点亮led语句X为引脚数n0为数组z为0-8的变量,来依次读取数组中的值 */
                z++;
                if ( z >= 9 )                           /* 防止变量z累加超过了8 */
                        z = 0;
        }
        delay( 1000 );
/*==========显示1=============*/
        int n1 = { 1, 0, 0, 1, 1, 1, 1, 1 };
        z = 0;
        for ( int x = 2; x <= 9; x++ )
        {
                digitalWrite( x, n1 );
                z++;
                if ( z >= 9 )
                        z = 0;
        }
        delay( 1000 );
/*==========显示2=============*/
        int n2 = { 0, 0, 1, 0, 0, 1, 0, 1 };
        z = 0;
        for ( int x = 2; x <= 9; x++ )
        {
                digitalWrite( x, n2 );
                z++;
                if ( z >= 9 )
                        z = 0;
        }
        delay( 1000 );
/*==========显示3=============*/
        int n3 = { 0, 0, 0, 0, 1, 1, 0, 1 };
        z = 0;
        for ( int x = 2; x <= 9; x++ )
        {
                digitalWrite( x, n3 );
                z++;
                if ( z >= 9 )
                        z = 0;
        }
        delay( 1000 );
/*==========显示4=============*/
        int n4 = { 1, 0, 0, 1, 1, 0, 0, 1 };
        z = 0;
        for ( int x = 2; x <= 9; x++ )
        {
                digitalWrite( x, n4 );
                z++;
                if ( z >= 9 )
                        z = 0;
        }
        delay( 1000 );
}
页: 1 2 3 4 [5] 6
查看完整版本: Arduino入门教程--第十八课--Arduino驱动数码管