转帖:跟珜羽一起学Arduino NO.2.3 数码管控制
kc20382013/09/05电子技术 IP:广西
跟珜羽一起学Arduino NO.2.3 数码管控制

XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXml
照例,先是演示视频:

点击此处查看视频
XXXXXXXXXXXXXXXXXX/v_show/id_XXXXXXXXXXXXXXXXml?firsttime=15
一:硬件准备
数码管的实质是多个LED并联起来,一端映出,另一端接电源或者地供电。即共阳(正极接在一起)共阴(负极接在一起)。
这次要用的数码管如下图:
001.gif

可以清楚的看到这是一个共阳的数码管。红色的数码管压降大概2.2V左右。接在5v上需要接电阻保护。
为了简化电路,在1号脚接一个220Ω电阻,再连到5V上,好处是不用8个引脚全部接电阻,坏处就是只点一段和八段的时候,亮度会有区别。(但是差别也不是很大)
如下表连接硬件。

Arduino引脚

连接方式

数码管引脚

VCC

<=220Ω电阻=>

1(VCC)

13

<===========>

2(F)

12

<===========>

3(G)

11

<===========>

4(E)

10

<===========>

5(D)


不连接NC

6(VCC)

9

<===========>

7(Dp)

8

<===========>

8©

7

<===========>

9(B)

6

<===========>

10(A)

示意图:

002.jpg     
实物图:
003.jpg

硬件准备工作到此结束:

二:打开arduinoIDE,输入以下代码,编译下载:
代码:
const unsigned char LED8Pin[]={
  6,7,8,10,11,13,12,9};//A B C D E F G Dp
const unsigned char LED8Code[]={
  0xC0,    // 0
  0xF9,    // 1
  0xA4,    // 2
  0xB0,    // 3
  0x99,    // 4
  0x92,    // 5
  0x82,    // 6
  0xF8,    // 7
  0x80,    // 8
  0x90,    // 9
  0x88,    // A
  0x83,    // B
  0xC6,    // C
  0xA1,    // D
  0x86,    // E
  0x8E     // F
};
void setup() {
  char i;
  for(i=0;i<8;i++)
  {
    pinMode(LED8Pin, OUTPUT);     [i]
    digitalWrite(LED8Pin, HIGH);  
  }
}
char a;
void loop() {
  for(a=0;a<16;a++)
  {
    LED8Show(a);
    delay(1000);
  }
}
voidLED8Show(char data){
  char i;
  char j;
  char hc;
  if(0<=data<16)
  {
    hc = LED8Code[data];
    for(i=0;i<8;i++)
    {
      j = bitRead(hc,i);
      digitalWrite(LED8Pin, j);
    }
  }
}

也可以从这里下载。

LED.zip
attachment icon LED.zip 0.63KB ZIP 21次下载 (646 Bytes)


如果你的联线没有错误的话,你就能看到跟视频一样的效果。(PS:数码管取模软件在最后)

三:
最开始的一个数组,是用来保存连接到数码管ABCDEFGDp段的引脚,你用不同的连接方式的花,来修改这个数组即可。
第二个数组是用来保存让数码管显示数字的编码方式,例如共阳的数码管要显示1,就要吧B,C段拉低,其他的段置高,数码管就能显示出1来。如果用一个字节保存数码管每个段的状态,第一个位表示A段,第二个位表示B段,一次类推,显示1的表就是:

字节位序

7

6

5

4

3

2

1

0

数码管段

Dp

G

F

E

D

C

B

A

状态

1

1

1

1

1

0

0

1

依次保存0~9,数码管还能显示ABCDEF,也保存下来,这样这个表就组成了上面程序中的第二个数组。

下面程序中用到了一个j =bitRead(hc,i);
bitRead的作用是从hc中读取第i位的数据。hc的数据类型只能是char型,i的取值范围是0~7

void LED8Show(char data)是将显示的操作封包成函数,以后要显示一个数字的时候带一个参数调用即可。参数范围为0~15

PS:大家想一下,如果要显示3位,甚至4位数码管要怎么做?arduino只有20IO哦,一个数码管要8IO呢。


以下是对数码管的一些介绍:
004.jpg   
照能显示数字的数量分成了一位,两位,三位,四位,六位等。



还有特殊的带冒号,或者前置1的数码管。
按照尺寸来分(多为高度).28英寸,0.3英寸,0.36英寸,0.390.40.43等等,具体的尺寸见附件1
根据一个位的段数分日字型和米字型,日字型是7段,带小数点是8段。米字型又分两种,大米小米,小米的上下各只有一段,14段。大米的上下又细分成两个,共有16段。
005.jpg

每个段的位置如下图所示:
006.jpg

还有按照颜色区分的,蓝色,绿色,红色等等。。。。

还有8个段驱动的,还有只有四个引脚,内部带芯片解BCD码等等。。。。

数码管尺寸.pdf
attachment icon 数码管尺寸.pdf 130.62KB PDF 641次下载 预览 (130.62 KB)

数码管的取模软件如图所示:
007.png


attachment icon 七段数码管取模软件.zip 15.08KB ZIP 33次下载
(15.08 KB,)




[/b]
来自:电子信息 / 电子技术
0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
kc2038
学者 机友 笔友
文章
37
回复
268
学术分
1
2009/01/06注册,6年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}