极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十八课--Arduino驱动数码管

  [复制链接]
发表于 2013-5-18 13:56:15 | 显示全部楼层
本帖最后由 arduino_ykk 于 2013-5-18 14:13 编辑

交作业咯。 数组没有必要定义在loop里面,否则每次循环都要重新开一点内存来放数组。可以放在整个方法外面啦,做全局变量用。

针脚插在 2-8口,按照A-G的顺序插入。因为0,1口是数据接收和发送,所以不用。 +极接在13口上面,可以随意选上下两个+极中任一个接上。 下载到arduino运行良好。

数组设计成n[10][9] , 10的意思是显示0-9 共十个数字;9的意思是,其实针脚只有7个,但是因为从第二针脚插起,所以为循环的时候方便,设9个,0-1是空值,随意设为0.


  1.   int n[10][9] = {
  2.                   0,0,0,0,0,0,0,0,1, //0
  3.                   0,0,1,0,0,1,1,1,1, //1
  4.                   0,0,0,0,1,0,0,1,0, //2
  5.                   0,0,0,0,0,0,1,1,0, //3
  6.                   0,0,1,0,0,1,1,0,0, //4
  7.                   0,0,0,1,0,0,1,0,0, //5
  8.                   0,0,0,1,0,0,0,0,0, //6
  9.                   0,0,0,0,0,1,1,1,1, //7
  10.                   0,0,0,0,0,0,0,0,0, //8
  11.                   0,0,0,0,0,0,1,0,0  //9
  12.                   };
  13.                   
  14. void setup()
  15. {
  16.   pinMode( 13, OUTPUT );
  17.   
  18.   for ( int i = 2; i <= 8; i++ )
  19.     pinMode( i, OUTPUT );
  20.   
  21. }

  22. void loop()
  23. {
  24.   digitalWrite( 13, HIGH );
  25.   
  26.   for ( int i= 0; i < 10; i++ )
  27.   {
  28.     for ( int j = 2; j < 9; j++ )
  29.       digitalWrite( j, n[i][j] );
  30.    
  31.     delay( 1000 );
  32.   }

  33. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-6-11 02:03:31 | 显示全部楼层
楼上的解说真是透彻啊,好好的指引,谢谢
回复 支持 反对

使用道具 举报

发表于 2013-6-22 23:17:56 | 显示全部楼层
//显示5201314 浪漫啊!!

void setup() {  
         

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


void loop()
{
   digitalWrite(2,0);
   digitalWrite(3,1);
   digitalWrite(4,0);
   digitalWrite(5,0);
   digitalWrite(6,1);
   digitalWrite(7,0);
   digitalWrite(8,0);
   digitalWrite(9,0);
   delay(1000);
   
   digitalWrite(2,0);
   digitalWrite(3,0);
   digitalWrite(4,1);
   digitalWrite(5,0);
   digitalWrite(6,0);
   digitalWrite(7,1);
   digitalWrite(8,0);
   digitalWrite(9,0);
   delay(1000);
   
   
   digitalWrite(2,0);
   digitalWrite(3,0);
   digitalWrite(4,0);
   digitalWrite(5,0);
   digitalWrite(6,0);
   digitalWrite(7,0);
   digitalWrite(8,1);
   digitalWrite(9,1);
   delay(1000);
   
   
   
   digitalWrite(2,1);
   digitalWrite(3,0);
   digitalWrite(4,0);
   digitalWrite(5,1);
   digitalWrite(6,1);
   digitalWrite(7,1);
   digitalWrite(8,1);
   digitalWrite(9,1);
   delay(1000);
   
   
   digitalWrite(2,0);
   digitalWrite(3,0);
   digitalWrite(4,0);
   digitalWrite(5,0);
   digitalWrite(6,1);
   digitalWrite(7,1);
   digitalWrite(8,0);
   digitalWrite(9,1);
   delay(1000);
   
    digitalWrite(2,1);
   digitalWrite(3,0);
   digitalWrite(4,0);
   digitalWrite(5,1);
   digitalWrite(6,1);
   digitalWrite(7,1);
   digitalWrite(8,1);
   digitalWrite(9,1);
   delay(1000);
   
   digitalWrite(2,1);
   digitalWrite(3,0);
   digitalWrite(4,0);
   digitalWrite(5,1);
   digitalWrite(6,1);
   digitalWrite(7,0);
   digitalWrite(8,0);
   digitalWrite(9,1);
   delay(1000);
   

}
回复 支持 反对

使用道具 举报

发表于 2013-6-26 19:15:03 | 显示全部楼层
16楼指导的好,收藏,多发这样的好贴
回复 支持 反对

使用道具 举报

发表于 2013-6-26 20:48:24 | 显示全部楼层
本帖最后由 really_ashamed 于 2013-6-30 17:40 编辑

         
/*         
                       G  F +  A  B
                        |  |  |  |  |                     
                           __A__

                     F |             | B
                           __G__  
                                    
                     E |             | C
                           __D__      
               
                        |  |  |  |  |
                       E  D +  C  dp   
*/              
//因为是“共阳”所以下面矩阵中“0”表示“亮”,“1”表示“灭”

//  (对应的段)     A,B,C,D,E,F,G  
int n[10][9] = { 0,0,0,0,0,0,0,0,1,   //0
                      0,0,1,0,0,1,1,1,1,   //1
                      0,0,0,0,1,0,0,1,0,   //2
                      0,0,0,0,0,0,1,1,0,   //3
                      0,0,1,0,0,1,1,0,0,   //4
                      0,0,0,1,0,0,1,0,0,   //5
                      0,0,0,1,0,0,0,0,0,   //6
                      0,0,0,0,0,1,1,1,1,   //7
                      0,0,0,0,0,0,0,0,0,   //8
                      0,0,0,0,0,0,1,0,0    //9
                    };
void setup()
{
    pinMode( 13, OUTPUT );
    for ( int i = 2; i <= 8; i++ )
    pinMode( i, OUTPUT );
}
void loop()
{
    digitalWrite( 13, HIGH );
    for ( int i= 0; i < 10; i++ )
    {
         for ( int j = 2; j < 9; j++ )

              digitalWrite( j,n[j] );

              delay( 1000 );
    }
}






回复 支持 反对

使用道具 举报

发表于 2013-6-26 20:51:06 | 显示全部楼层
本来在程序里对的很齐的,但粘贴过来后自动变了,大家粘贴到程序里后再适当用空格键调整齐,这样再理解程序的时候,直观一些,复制的16楼的程序,很简洁明了
回复 支持 反对

使用道具 举报

发表于 2013-6-26 20:54:19 | 显示全部楼层
因为是注释,写的再多,编译完后也不会下载到芯片中去的,不会占用内存,只是大家在打开程序看的时候方便一些。
回复 支持 反对

使用道具 举报

发表于 2013-6-30 17:42:37 | 显示全部楼层
digitalWrite( j,n[i][j] );
这一句,只要一保存就变成digitalWrite( j,n[j] );了,真郁闷!
还有下一行,一保存就自动变成斜体了,唉!没办法
回复 支持 反对

使用道具 举报

发表于 2013-7-28 00:37:38 | 显示全部楼层
我的数码管是共阴极的,也贴一个实验结果:
  1. void setup() {
  2.   pinMode(13, OUTPUT);
  3.   for(int n=1;n<=7;n++) {
  4.     pinMode(n,OUTPUT);
  5.   }
  6. }
  7. void loop() {
  8.   digitalWrite(13, LOW);
  9.   
  10.   int array[10][7] = {
  11.     {1, 1, 1, 1, 1, 1, 0},
  12.     {0, 1, 1, 0, 0, 0, 0},
  13.     {1, 1, 0, 1, 1, 0, 1},
  14.     {1, 1, 1, 1, 0, 0, 1},
  15.     {0, 1, 1, 0, 0, 1, 1},
  16.     {1, 0, 1, 1, 0, 1, 1},
  17.     {1, 0, 1, 1, 1, 1, 1},
  18.     {1, 1, 1, 0, 0, 0, 0},
  19.     {1, 1, 1, 1, 1, 1, 1},
  20.     {1, 1, 1, 1, 0, 1, 1},
  21.   };
  22.   
  23.   for (int i = 0; i < 10; i++) {
  24.     for (int j = 0; j < 7; j++) {
  25.       digitalWrite(j + 1, array[i][j]);
  26.     }
  27.     delay(1000);
  28.   }
  29. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-28 07:12:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-8-12 15:23:42 | 显示全部楼层
我用的数码管是5101BS,共阳。其实跟5011B完全一样的,不过也贴个原理图吧:

16楼说数组应该放在循环外,完全赞同,减少CPU负担嘛。不过数组搞成[10][9]就多余了,读数的时候-2更方面,也减少内存浪费。而且别忘了还有个小数点DP呢。我也重新贴下程序:
  1. /* 程序功能:用arduino驱动数码管循环显示数字0~9 */

  2. // 建立数字显示数组,对应引脚A~G、DP
  3. int shownum[10][8] = {0,0,0,0,0,0,1,0,  //0
  4.                       1,0,0,1,1,1,1,1,  //1
  5.                       0,0,1,0,0,1,0,1,  //2
  6.                       0,0,0,0,1,1,0,1,  //3
  7.                       1,0,0,1,1,0,0,1,  //4
  8.                       0,1,0,0,1,0,0,1,  //5
  9.                       0,1,0,0,0,0,0,1,  //6
  10.                       0,0,0,1,1,1,1,1,  //7
  11.                       0,0,0,0,0,0,0,1,  //8
  12.                       0,0,0,0,1,0,0,1}; //9

  13. void setup() { for(int pin=2; pin<=13; pin++) pinMode(pin, OUTPUT);}

  14. void loop() {
  15.   digitalWrite(13,1);                  //13号引脚高电平,给数码管供电
  16.   for(int num=0; num<=9; num++) {
  17.     for(int pin=2; pin<=9; pin++) {    //循环点亮LED。LED电平高的不亮低的亮
  18.       digitalWrite(pin, shownum[num][pin-2]);
  19.     }
  20.     delay(500);                        //每个数字显示半秒
  21.   }
  22. }
复制代码

谈到代码易读性,变量名称也很重要哦。此外,建议弟兄们贴代码的时候使用回复窗口右上角的“添加代码文字”图标,就是那个“<>”符号的,这样有语法高亮,读起来比较轻松。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-12 18:29:20 | 显示全部楼层
chaoser 发表于 2013-8-12 15:23
我用的数码管是5101BS,共阳。其实跟5011B完全一样的,不过也贴个原理图吧:

16楼说数组应该放在循环外, ...

高手没事连载点教程啥的
回复 支持 反对

使用道具 举报

发表于 2013-8-12 23:39:15 | 显示全部楼层
迷你强 发表于 2013-8-12 18:29
高手没事连载点教程啥的

电子电路这一块,真心连低手都算不上,曾靠码程序混过饭吃而已。arduino上手还没两周,每天抽点时间看看你的教程,做做实验,然后上网妄言一番,蛮开心。大家一起玩嘛。

若偶尔有了好点子,还要大神给点建议呢。总之,折腾得开心最要紧,哈哈
回复 支持 反对

使用道具 举报

发表于 2013-8-20 21:36:17 | 显示全部楼层
楼主能不能传给我Fritzing软件下的数码管元件库啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-20 22:10:22 | 显示全部楼层
本帖最后由 迷你强 于 2013-8-20 22:13 编辑
qinkaiabc 发表于 2013-8-20 21:36
楼主能不能传给我Fritzing软件下的数码管元件库啊?


fritzing内置。。。数码管下面可以调整参数。。调整下形状就对了(额....新版本貌似取消了。。囧)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 02:59 , Processed in 0.044361 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表