Arduino入门教程--第十八课--Arduino驱动数码管
今天我们来玩数码管,这个东西就是一堆led通过共阳并联在一起的小方块,用来显示数字和几个字母,是非常简单常见的显示器件。和学习笔记中的数码管代码不同,这次使用的代码单位时间只亮一个数码管上的灯,肉眼看到的1,2,3是因为高刷新率,大于肉眼分辨速度,使得肉眼看到1,2,3等。这样的好处是亮度高,而且亮度均匀。所以准备一下材料
一位共阳数码管 1枚
arduino控制板 1个
面包板 1快
面包板专用跳线盒1盒
数据线 1根
220欧姆电阻 1个
我们先来看数码管的原理图
http://image.geek-workshop.com/forum/201107/21/201833d2e6uvphchm65xr8.jpg
可以看到数码管的链接方式,驱动的原理就是,阳极供电后,其他引脚如果是低电平就能点亮。来看电路图
进过大家的指正,我终于知道哪里画错了,现已修正
我们可以看到,电路按照上面的原理图依据abcdefg的顺序排布了接口,这样写程序会方便很多
然后我们搭建出电路
将程序下载进去
/*
作者:极客工坊-迷你强
时间: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);
}
实验视频
http://player.youku.com/player.php/sid/XNDU1MDQzNTE2/v.swf 看不懂数码管的引脚图... = =
从网上搜了一下,然后画了如下图。希望对小白有帮助。
=============以下出自百度知道 =================
用万用表测一下就可以了。数码管分为共阴极和共阳极。一般情况下有10个引脚。上面5个下面5个,每排的中间一个一般情况下是接低电平或者高电平。先用万用表的正极放在中间一个,另外一个依次去测。如果是共阳极就有亮,否则共阴极,根据发光位置就可以判断引脚了
==========================================
用万用表,打到测电阻的200欧 量程,然后红表笔(+) 接到数码管任意上下引脚的中间那个,黑表笔(-)依次测量每个引脚,对应数码管上面的每一段会变亮。图上面的DP表示那个显示的小数点。
本帖最后由 <一一巛 于 2013-3-4 16:54 编辑
void setup() {
for(int n=1;n<=7;n++) //abcdefg对应管脚1234567
pinMode(n,OUTPUT);
}
void loop() {
/*==========显示=============*/
int n={0,0,0,0,0,0,1, //0
1,0,0,1,1,1,1, //1
0,0,1,0,0,1,0, //2
0,0,0,0,1,1,0, //3
1,0,0,1,1,0,0, //4
0,1,0,0,1,0,0, //5
0,1,0,0,0,0,0, //6
0,0,0,1,1,1,1, //7
0,0,0,0,0,0,0, //8
0,0,0,1,1,0,0};//9
for(int i=0;i<=9;i++){
for(int j=1;j<=7;j++)
digitalWrite(j,n);
delay(1000);
}
}交作业:$
精炼代码循环显示0~9 那什么,图错了,电阻左边那根线 普通人 发表于 2012-10-10 13:28 static/image/common/back.gif
那什么,图错了,电阻左边那根线
没错吧。。。。 第二个脚 普通人 发表于 2012-10-11 11:36 static/image/common/back.gif
第二个脚
:L求红圈圈标注。。。 嘿嘿,我已经把字母也试出来了
感谢热心指正。。。 :L咋一看代码这么多,没必要再定义个辅助变量z,代码重复太多啦,编码一大忌呀。虽然代码可读性重要,但也要注意形象呀~~ <一一巛 发表于 2013-3-4 16:51 static/image/common/back.gif
void setup() {
for(int n=1;n
void setup()
{
pinMode(13,OUTPUT);
for(int n=2; n<=9; n++)
{
pinMode(n,OUTPUT);
}
}
void loop()
{
digitalWrite(13,HIGH);
int n = { 0,0,0,0,0,0,1,0,
1,0,0,1,1,1,1,0,
0,0,1,0,0,1,0,0,// 2
0,0,0,0,1,1,0,0,// 3
1,0,0,1,1,0,0,0,// 4
0,1,0,0,1,0,0,0,// 5
0,1,0,0,0,0,0,0,// 6
0,0,0,1,1,1,1,0,// 7
0,0,0,0,0,0,0,0,// 8
0,0,0,0,1,0,0,0 // 9
};
for(int i = 0; i<=9; i++){
for(int j = 2; j<=9;j++)
digitalWrite(j,n);
delay(1000);
}
}
针对楼主的程序,对9楼牛人的程序稍加修改,可原封不动使用! 都是牛人,我 一直努力学习中 gxdiy 发表于 2013-4-6 14:15 static/image/common/back.gif
都是牛人,我 一直努力学习中
我也一直努力中 一起学吧 更有动力 :lol学习 学习。。 <一一巛 发表于 2013-3-4 16:51 static/image/common/back.gif
void setup() {
for(int n=1;n
好东西················