极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 63219|回复: 83

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

  [复制链接]
发表于 2012-9-26 19:41:17 | 显示全部楼层 |阅读模式
   今天我们来玩数码管,这个东西就是一堆led通过共阳并联在一起的小方块,用来显示数字和几个字母,是非常简单常见的显示器件。和学习笔记中的数码管代码不同,这次使用的代码单位时间只亮一个数码管上的灯,肉眼看到的1,2,3是因为高刷新率,大于肉眼分辨速度,使得肉眼看到1,2,3等。这样的好处是亮度高,而且亮度均匀。

所以准备一下材料

一位共阳数码管   1枚
arduino控制板     1个
面包板                1快
面包板专用跳线盒  1盒
数据线                 1根
220欧姆电阻       1个


我们先来看数码管的原理图


可以看到数码管的链接方式,驱动的原理就是,阳极供电后,其他引脚如果是低电平就能点亮。来看电路图

arduino教程 入门教程

arduino教程 入门教程

进过大家的指正,我终于知道哪里画错了,现已修正



我们可以看到,电路按照上面的原理图依据abcdefg的顺序排布了接口,这样写程序会方便很多

然后我们搭建出电路


IMGP9241_调整大小.JPG




将程序下载进去

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

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

  11.     for(int n=2;n<=9;n++)
  12.    {
  13.    pinMode(n,OUTPUT);
  14.    }
  15. }


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


  20.   /*==========显示0=============*/  
  21. int n0[8]={0,0,0,0,0,0,1,1};       //定义数组 通过0,1定义各数码管的明灭,
  22.   int z=0;
  23.   for(int x=2;x<=9;x++)          //采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led
  24.   {
  25.     digitalWrite(x,n0[z]);         //点亮led语句  X为引脚数  n0[z]为数组z为0-8的变量,来依次读取数组中的值
  26.     z++;
  27.     if (z>=9)                    //防止变量z累加超过了8
  28.     z=0;
  29.   }
  30.   delay(1000);
  31. /*==========显示1=============*/  
  32. int n1[8]={1,0,0,1,1,1,1,1};
  33.   z=0;
  34.   for(int x=2;x<=9;x++)
  35.   {
  36.     digitalWrite(x,n1[z]);
  37.     z++;
  38.     if (z>=9)
  39.     z=0;
  40.   }
  41.   delay(1000);
  42. /*==========显示2=============*/  
  43. int n2[8]={0,0,1,0,0,1,0,1};
  44.   z=0;
  45.   for(int x=2;x<=9;x++)
  46.   {
  47.     digitalWrite(x,n2[z]);
  48.     z++;
  49.     if (z>=9)
  50.     z=0;
  51.   }
  52. delay(1000);  
  53. /*==========显示3=============*/  
  54. int n3[8]={0,0,0,0,1,1,0,1};
  55.   z=0;
  56.   for(int x=2;x<=9;x++)
  57.   {
  58.     digitalWrite(x,n3[z]);
  59.     z++;
  60.     if (z>=9)
  61.     z=0;
  62.   }
  63. delay(1000);  
  64. /*==========显示4=============*/  
  65. int n4[8]={1,0,0,1,1,0,0,1};
  66. z=0;
  67.   for(int x=2;x<=9;x++)
  68.   {
  69.     digitalWrite(x,n4[z]);
  70.     z++;
  71.     if (z>=9)
  72.     z=0;
  73.   }
  74. delay(1000);
  75. }
复制代码


实验视频
回复

使用道具 举报

发表于 2013-5-18 12:54:48 | 显示全部楼层
看不懂数码管的引脚图... = =

从网上搜了一下,然后画了如下图。希望对小白有帮助。

=============以下出自百度知道 =================
用万用表测一下就可以了。数码管分为共阴极和共阳极。一般情况下有10个引脚。上面5个下面5个,每排的中间一个一般情况下是接低电平或者高电平。先用万用表的正极放在中间一个,另外一个依次去测。如果是共阳极就有亮,否则共阴极,根据发光位置就可以判断引脚了
==========================================

用万用表,打到测电阻的200欧 量程,然后红表笔(+) 接到数码管任意上下引脚的中间那个,黑表笔(-)依次测量每个引脚,对应数码管上面的每一段会变亮。图上面的DP表示那个显示的小数点。


digital.png

点评

nice!  发表于 2014-11-28 18:24
回复 支持 2 反对 0

使用道具 举报

发表于 2013-3-4 16:51:19 | 显示全部楼层
本帖最后由 <一一巛 于 2013-3-4 16:54 编辑
  1. void setup() {   
  2.    for(int n=1;n<=7;n++) //abcdefg对应管脚1234567
  3.      pinMode(n,OUTPUT);
  4. }
  5. void loop() {
  6.   /*==========显示=============*/  
  7.   int n[10][7]={0,0,0,0,0,0,1, //0
  8.                 1,0,0,1,1,1,1, //1
  9.                 0,0,1,0,0,1,0, //2
  10.                 0,0,0,0,1,1,0, //3
  11.                 1,0,0,1,1,0,0, //4
  12.                 0,1,0,0,1,0,0, //5
  13.                 0,1,0,0,0,0,0, //6
  14.                 0,0,0,1,1,1,1, //7
  15.                 0,0,0,0,0,0,0, //8
  16.                 0,0,0,1,1,0,0};//9
  17.   for(int i=0;i<=9;i++){
  18.     for(int j=1;j<=7;j++)
  19.       digitalWrite(j,n[i][j-1]);
  20.     delay(1000);
  21.     }  
  22. }
复制代码
交作业
精炼代码循环显示0~9

点评

你好这个程序无法在adrunio里面编译呀  发表于 2017-1-21 00:12
这个才像个样子,原来那个程序太麻烦了!!!  发表于 2014-10-11 10:49
我深深的崇拜你!  发表于 2013-8-29 09:26
回复 支持 2 反对 0

使用道具 举报

发表于 2012-10-10 13:28:19 | 显示全部楼层
那什么,图错了,电阻左边那根线
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-10 13:44:44 | 显示全部楼层
普通人 发表于 2012-10-10 13:28
那什么,图错了,电阻左边那根线


没错吧。。。。
回复 支持 反对

使用道具 举报

发表于 2012-10-11 11:36:49 | 显示全部楼层
第二个脚 未命名.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-11 11:45:22 | 显示全部楼层
普通人 发表于 2012-10-11 11:36
第二个脚


求红圈圈标注。。。
回复 支持 反对

使用道具 举报

发表于 2012-10-11 12:05:57 | 显示全部楼层
嘿嘿,我已经把字母也试出来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-14 08:16:46 | 显示全部楼层
感谢热心指正。。。
回复 支持 反对

使用道具 举报

发表于 2013-2-23 21:56:54 | 显示全部楼层
咋一看代码这么多,没必要再定义个辅助变量z,代码重复太多啦,编码一大忌呀。虽然代码可读性重要,但也要注意形象呀~~
回复 支持 反对

使用道具 举报

发表于 2013-4-4 18:20:19 | 显示全部楼层
<一一巛 发表于 2013-3-4 16:51
void setup() {   
   for(int n=1;n
  1. void setup()
  2. {
  3.   pinMode(13,OUTPUT);
  4.   for(int n=2; n<=9; n++)
  5.   {
  6.     pinMode(n,OUTPUT);
  7.   }
  8. }

  9. void loop()
  10. {
  11.   digitalWrite(13,HIGH);
  12.   
  13.   int n[10][8] = { 0,0,0,0,0,0,1,0,
  14.                    1,0,0,1,1,1,1,0,
  15.                    0,0,1,0,0,1,0,0,  // 2
  16.                    0,0,0,0,1,1,0,0,  // 3
  17.                    1,0,0,1,1,0,0,0,  // 4
  18.                    0,1,0,0,1,0,0,0,  // 5
  19.                    0,1,0,0,0,0,0,0,  // 6
  20.                    0,0,0,1,1,1,1,0,  // 7
  21.                    0,0,0,0,0,0,0,0,  // 8
  22.                    0,0,0,0,1,0,0,0   // 9
  23.                  };
  24.                  
  25.   for(int i = 0; i<=9; i++){
  26.     for(int j = 2; j<=9;j++)
  27.          digitalWrite(j,n[i][j-2]);
  28.          delay(1000);
  29.   }
  30. }
复制代码


针对楼主的程序,对9楼牛人的程序稍加修改,可原封不动使用!

点评

定义13针脚干嘛,直接从VCC上引电流,代码不是更简单!  发表于 2013-8-29 09:27
回复 支持 反对

使用道具 举报

发表于 2013-4-6 14:15:25 | 显示全部楼层
都是牛人,我 一直努力学习中
回复 支持 反对

使用道具 举报

发表于 2013-4-6 16:24:21 | 显示全部楼层
gxdiy 发表于 2013-4-6 14:15
都是牛人,我 一直努力学习中

我也一直努力中 一起学吧 更有动力
回复 支持 反对

使用道具 举报

发表于 2013-4-15 16:34:37 | 显示全部楼层
学习 学习。。
回复 支持 反对

使用道具 举报

发表于 2013-4-20 22:49:33 | 显示全部楼层
<一一巛 发表于 2013-3-4 16:51
void setup() {   
   for(int n=1;n

好东西················
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2018-12-16 16:21 , Processed in 0.062080 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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