极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 101036|回复: 31

Arduino入门教程--第二十四课--数码管显示器,使用电位器控制数字

[复制链接]
发表于 2013-1-15 15:33:42 | 显示全部楼层 |阅读模式
好久没写教程了,在网上找到一个好用的数码管的驱动库,这样就能比较轻松惬意的玩数码管了,所以将数码管翻出来玩一玩,简单介绍数码管的库,和在语法手册里学会的一个新函数 map()

首先介绍下库文件,需要解压缩后放到arduinoIDE目录的libraries内,然后重启arduinoIDE就能加载这个库了
库作者的发布页面:https://docs.google.com/file/d/0Bwrp4uluZCpNN1Q4dmFZX1MzWVE/edit



简单介绍一下,这个库,可以驱动四位数码管,支持显示数字与小数点,使用简单方便。具体请自己参悟研究

我们用这个库驱动我们的一位共阳数码管电路图如下:




连线很简单,所以我们来插接出电路,以下就是我接的电路照片




然后我写了一个小程序,主要用到了map()函数将A0口的0-1023数值映射到数码管的0-9这十个数字上,起到的效果就是我转动电位器,数码管显示对应位置的数字。

  1. /*  
  2. 作者:极客工坊-迷你强
  3. 时间:2013年1月11日
  4. IDE版本号:1.0.1
  5. 发布地址:www.geek-workshop.com
  6. 作用:arduino驱动数码管使用电位器旋转调整数值



  7. 7段数码管具体表现方法如下
  8.       
  9.            A
  10.           ____
  11.          |    |
  12.       F  |____|  B
  13.          | G  |
  14.       E  |____|  C
  15.                 o DP
  16.            D
  17.            
  18.       引脚分布情况是这样滴
  19.       
  20.       10 9 8 7 6
  21.        ________
  22.       |   __   |
  23.       |  |__|  |
  24.       |  |__|o |
  25.       |________|
  26.       
  27.       1 2 3 4 5  
  28.       
  29.       * 怎么接到arduino上呢?
  30.       * 首先看3和8这两个管脚,一般是共级,套件是共阳数码管,所以这两个是+极,两个引脚其实是接在一起的,所以我们使用其中一个即可
  31.       * 1 (E) 接到arduino的 10号引脚
  32.       * 2 (D) 接到arduino的 9号引脚
  33.       * 3 因为我们只使用1位数码管,所以请将本引脚或者8号引脚的任意一个接到arduino的5号数字口即可
  34.       * 4 (C) 接到arduino的 8号引脚
  35.       * 5 (DP) 接到arduino的13号引脚
  36.       * 6 (B) 接到arduino的7号引脚
  37.       * 7 (A) 接到arduino的6号引脚
  38.       * 8 因为我们只使用1位数码管,所以请将本引脚或者3号引脚的任意一个接到arduino的5号数字口即可
  39.       * 9 (F) 接到arduino的11号引脚
  40.       * 10 (G) 接到arduino的12号引脚
  41.       
  42. */

  43. #include "SevSeg.h"
  44. SevSeg sevseg;
  45. void setup() {
  46. //定义需要使用的引脚
  47.   sevseg.Begin(1,2,3,4,5,6,7,8,9,10,11,12,13);

  48. }

  49. void loop() {
  50.   //激活输出功能
  51.   sevseg.PrintOutput();
  52. int val = analogRead(A0);
  53. val = map(val,0,1023,0,9);    //使用map函数来做数值映射
  54.    
  55.     sevseg.NewNum(val, 4);     //数码管函数输出数字,其中数值为小数点所在位置,我放在第四格所以效果就是不显示小数点
  56.   }
复制代码

简单的介绍一下MAP函数
语法:
map(value, fromLow, fromHigh, toLow, toHigh)
参数:
value:需要映射的值
fromLow:当前范围值的下限
fromHigh:当前范围值的上限
toLow:目标范围值的下限
toHigh:目标范围值的上限
返回结果:
返回:被映射的值。

在程序中我们使用了map(val,0,1023,0,9),这段代码代表的是。判断val值在0-1023内的范围,然后输出0-9范围内对应的数值。

例如val为200,0-9为十等分,所以每一份为102.4。200刚好没有超出204.8的范围,所以输出数值是1.


最后老规矩,附上演示视频

本帖子中包含更多资源

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

x

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 的确好久没更新教程了

查看全部评分

回复

使用道具 举报

发表于 2013-1-15 17:56:41 | 显示全部楼层
4位数码管放很久没玩了,准备用最小版做时钟的,感谢LZ分享
回复 支持 反对

使用道具 举报

发表于 2013-1-16 13:04:46 | 显示全部楼层
那个map函数是arduino原先库里的还是那个数码管库里的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-16 17:14:01 | 显示全部楼层
7。 发表于 2013-1-16 13:04
那个map函数是arduino原先库里的还是那个数码管库里的呢?

是arduino标准库的语法。具体使用参考语法手册
回复 支持 反对

使用道具 举报

发表于 2013-3-22 15:52:51 | 显示全部楼层
sevseg.h
是什么库文件啊
回复 支持 反对

使用道具 举报

发表于 2013-4-10 12:21:55 | 显示全部楼层
问下,这个库怎么连接四位数码管,有没有具体说明的文件
回复 支持 反对

使用道具 举报

发表于 2013-4-16 09:44:26 | 显示全部楼层
想咨询一下,看到把那个变位器拿下来后。数字递减的。我想知道map()这个函数是怎么读取的 。一秒读一次。。还是怎么的。不涉及到原子操作么。。我本来想拿下来后直接是0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-16 21:15:03 | 显示全部楼层
玄冰之神 发表于 2013-4-16 09:44
想咨询一下,看到把那个变位器拿下来后。数字递减的。我想知道map()这个函数是怎么读取的 。一秒读一次。。 ...

模拟口悬空后会有干扰信号的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-16 21:16:00 | 显示全部楼层
Safari◢ 发表于 2013-4-10 12:21
问下,这个库怎么连接四位数码管,有没有具体说明的文件

库具体使用方法,请参考作者页面
回复 支持 反对

使用道具 举报

发表于 2013-6-8 13:14:50 | 显示全部楼层
本帖最后由 zhiqing 于 2013-6-8 13:20 编辑

楼主使用了数码管驱动的库:SevSeg,我帮楼主介绍她的使用方法吧。
/*  
 作者:极客工坊-zhiqing
 时间:2013年6月7日
 IDE版本号:1.0.5
 发布地址:www.geek-workshop.com

  
*/
 


#include "SevSeg.h"
SevSeg sevseg;
char ch;
void setup()
{
  sevseg.Begin(0,2,3,4,5,6,7,8,9,10,11,12,13);
 Serial.begin(9600);
}
 
void loop()
{
 while(Serial.available()>0)
   {
       ch =Serial.read();
       sevseg.NewNum(ch, 0);     

    }
     sevseg.PrintOutput();
}

这是我的代码,接收PC端的数据,显示出来,当然显示的是字符的ASCII码。
使用方法:①包含数码管驱动库:#include "SevSeg.h"
②生成实例对象:SevSeg sevseg;
③在setup中设置接线方式:sevseg.Begin(type,digit pins1-4,segment pins a-g,dp);
第1位type:0表示使用的是共阴数码管;1表示共阳数码管。作者使用的是共阴数码管。
第2到5位:digit pins1-4:从左到右,4个数码管的公共端所连arduino板子的引脚号。如果使用数码管不到4个,则左侧的引脚号没有意义。作者使用了3位数码管,分别接在3、4、5号引脚上,左侧的2没有意义。
第6到13位:segment pins a-g,dp:数码管a-g,dp依次连接在arduino上的引脚号。
④在loop中,printoutput函数用于循环扫描显示,调用一次,显示一次。
⑤要显示的数字,NewNum(val,dec),如果是4位数码管,则val的范围-999~9999,超出此范围将显示”----“,dec表示小数点位置(0-3),如果要显示3.141,那么val=3141,dec=3.
NewNum()函数使用在任何位置都行,程序运行过NewNum之后,下次运行printoutput()显示才更新。
编者注:把SevSeg库拷贝到library文件夹下之后,要重启arduino软件或者在sketch中使用Import Library命令。不然编译会出错,提示找不到SevSeg库。

评分

参与人数 1 +3 收起 理由
迷你强 + 3 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-6-27 09:30:56 | 显示全部楼层
好贴,楼主写得了好,zhiqing 补充得也好!
回复 支持 反对

使用道具 举报

发表于 2013-6-29 17:32:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-29 21:45:12 | 显示全部楼层
really_ashamed 发表于 2013-6-29 17:32

回复 支持 反对

使用道具 举报

发表于 2013-7-26 10:57:56 | 显示全部楼层
zhiqing 发表于 2013-6-8 13:14
楼主使用了数码管驱动的库:SevSeg,我帮楼主介绍她的使用方法吧。

这是我的代码,接收PC端的数据,显示 ...

sketch_jul26b:2: error: 'SevSeg' does not name a type出现这样报警是什么意思?
回复 支持 反对

使用道具 举报

发表于 2013-10-21 22:04:40 | 显示全部楼层
zhiqing 发表于 2013-6-8 13:14
楼主使用了数码管驱动的库:SevSeg,我帮楼主介绍她的使用方法吧。

这是我的代码,接收PC端的数据,显示 ...

感谢,非常感谢。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 18:23 , Processed in 0.048006 second(s), 35 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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