arduino教程系列5-数码管实验 arduino入门,arduino教程

数码管介绍



数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数数码管和八段数数码管,八段数数码管比七段数数码管多一个发光二极管单元(多一个小数点显示)

发光二极管单元连接方式分为共阳数码管和共阴数码管。共阳数码管是指将所有发光二极管的阳极连接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极PWR接到电源输入PWR上,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管则更好相反,阴极连接到一起形成了公共阴极,阳极是独立分开的。



先来看一下本次实验使用的数码管。


IMGP0069_调整大小.jpg

2011-8-6 20:57 上传
(120.58 KB)





通过查询型号LG5011BSR得知其为0.5"单联共阳数码管,下面是其引脚图。


LG5011BSR管脚图.jpg

2011-7-21 20:18 上传
(69.75 KB)





查看其背后,四个角分别有2个原点和5,10两个标记。分别表示了1,6,5,10针脚。




IMGP0071_调整大小.jpg

2011-8-6 20:57 上传
(74.21 KB)





数码管和发光二极管一样,需要添加限流电阻,因为网上没有查到资料说明该数码管的击穿电压是多大。所以供给电源电压宁可小不可大,所以选择220Ω限流电阻,和3.3V供电。



线路连接图如下


Snap1.jpg

IMGP9887_调整大小.JPG



把下面的代码编译后下载到控制板上,看看效果~ARDUINO 代码复制打印


//设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。

int a=7;

int b=6;

int c=5;

int d=11;

int e=10;

int f=8;

int g=9;

int dp=4;



//显示数字1

void digital_1(void)

{

unsigned char j;

digitalWrite(c,LOW);//给数字5引脚低电平,点亮c段

digitalWrite(b,LOW);//点亮b段

for(j=7;j<=11;j++)//熄灭其余段

digitalWrite(j,HIGH);

digitalWrite(dp,HIGH);//熄灭小数点DP段

}

//显示数字2

void digital_2(void)

{

unsigned char j;

digitalWrite(b,LOW);

digitalWrite(a,LOW);

for(j=9;j<=11;j++)

digitalWrite(j,LOW);

digitalWrite(dp,HIGH);

digitalWrite(c,HIGH);

digitalWrite(f,HIGH);

}

//显示数字3

void digital_3(void)

{

unsigned char j;

digitalWrite(g,LOW);

digitalWrite(d,LOW);

for(j=5;j<=7;j++)

digitalWrite(j,LOW);

digitalWrite(dp,HIGH);

digitalWrite(f,HIGH);

digitalWrite(e,HIGH);

}

//显示数字4

void digital_4(void)

{

digitalWrite(c,LOW);

digitalWrite(b,LOW);

digitalWrite(f,LOW);

digitalWrite(g,LOW);

digitalWrite(dp,HIGH);

digitalWrite(a,HIGH);

digitalWrite(e,HIGH);

digitalWrite(d,HIGH);

}

//显示数字5

void digital_5(void)

{

unsigned char j;

for(j=7;j<=9;j++)

digitalWrite(j,LOW);

digitalWrite(c,LOW);

digitalWrite(d,LOW);

digitalWrite(dp,HIGH);

digitalWrite(b,HIGH);

digitalWrite(e,HIGH);

}

//显示数字6

void digital_6(void)

{

unsigned char j;

for(j=7;j<=11;j++)

digitalWrite(j,LOW);

digitalWrite(c,LOW);

digitalWrite(dp,HIGH);

digitalWrite(b,HIGH);

}

//显示数字7

void digital_7(void)

{

unsigned char j;

for(j=5;j<=7;j++)

digitalWrite(j,LOW);

digitalWrite(dp,HIGH);

for(j=8;j<=11;j++)

digitalWrite(j,HIGH);

}

//显示数字8

void digital_8(void)

{

unsigned char j;

for(j=5;j<=11;j++)

digitalWrite(j,LOW);

digitalWrite(dp,HIGH);

}

void setup()

{

int i;//定义变量

for(i=4;i<=11;i++)

pinMode(i,OUTPUT);//设置4~11引脚为输出模式

}

void loop()

{

while(1)

{

digital_1();//数字1

delay(2000);//延时2s

digital_2();

delay(2000);

digital_3();

delay(2000);

digital_4();

delay(2000);

digital_5();

delay(2000);

digital_6();

delay(2000);

digital_7();

delay(2000);

digital_8();

delay(2000);

}

}

本次试验的效果为数码管1,2,3,4,5,6,7,8这样子循环显示。


上面的代码使用的是传统的方法来显示1,2,3,4。如果遇到工程量比较大的时候,这种方法就不合适了。这时我们需要使用数组的方法来进行控制。使用数组前,需要先对显示0,1,2,3等情况下,各个端口的开关情况进行统计,统计结果如下图。

数组引脚开关表.jpg

2011-7-29 21:49 上传
(46.51 KB)





请大家把下面的代码输入控制板,看看实验效果,然后对两种代码表达方式进行研究~~看看异同。
ARDUINO 代码复制打印
byte seven_seg_digits[10][8] = { //设置每个数字所对应的开关数组

{ 1,0,0,0,0,1,0,0 },// = 0

{ 1,0,0,1,1,1,1,1 },// = 1

{ 1,1,0,0,1,0,0,0 },// = 2

{ 1,0,0,0,1,0,1,0 },// = 3

{ 1,0,0,1,0,0,1,1 },// = 4

{ 1,0,1,0,0,0,1,0 },// = 5

{ 1,0,1,0,0,0,0,0 },// = 6

{ 1,0,0,0,1,1,1,1 },// = 7

{ 1,0,0,0,0,0,0,0 },// = 8

{ 1,0,0,0,0,0,1,0 } // = 9

};



void setup() { //4-11号端口设定为输出模式

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

}



void sevenSegWrite(byte digit) {//设置通过数组控制引脚开关,顺序为4-11号端口

byte pin = 4;

for (byte segCount = 0; segCount < 8; ++segCount) {

digitalWrite(pin, seven_seg_digits[digit][segCount]);

++pin;

}

}



void loop() { //设置显示效果为从9开始倒数

for (byte count = 10; count > 0; --count) {

delay(1000);

sevenSegWrite(count - 1);

}

delay(2000);

}

视频效果如下



via - 极客工坊

标签: Arduino教程