您现在的位置:数码 >> 数码资源 >> Arduino数码管实验
白癜风人民大会堂活动 http://baidianfeng.39.net/a_yqhg/150311/4588850.html

一、实验目的

⑴掌握1位数码管模块的功能;

⑵熟悉4位数码管模块的功能;

⑶4位数码计时显示功能编程

二、实验设备与环境

ArduinoUNO套件、ArduinoIDE、计算机、1位数码管、4位数码管、4个欧限流电阻、面包板、杜邦线等

三、实验重点

⑴实验电路连接;⑵编写数码显示控制程序;⑶功能调试

四、实验难点

⑴数码显示控制程序编写

五、实验内容

5.1实验任务

任务描述:1位数码显示;4位数码显示;自动计时显示;

5.21位数码管

1位数码管,是由8段发光二极管(LED)封装在一起组成“8”字型加一个小数点数码显示器件,又称为LED数码管,是单片机应用最为广泛的显示器件。

图中所示数码管有8个显示笔画“a,b,c,d,e,f,g,h”,上下共10个引脚,上、下方中间引脚是公共极。公共引脚是阴极的为共阴数码管,公共引脚是阳极的为共阳数码管。共阴、共阳极数码管从外形上无法判断,可以通过公共极与任一笔画LED引脚外加3V电压点亮二极管判断,或用万用表电阻档测量判断。

共阳极1位数码管显示数字与对应各段发光LED电平对照表:

ArduinoUNOR3板与1位数码管的电路接法:

2.4位数码管

数码管根据位数不同,其封装的引脚也各不相同。但其内部都是将单个数码管的段选线a,b,c,d,e,f,g,dp发光二极管对应连接在一起,公共极则相互独立。使用时分别通过控制不同的位选线(即单个数码管的公共极)来控制单个数码管的显示。以人眼难以分辨的速度进行刷新显示,即可达到多个数码管同时显示的效果。

四位数码管引脚分布如下图所示,其中1,2,3,4表示对应位数码管的公共极。

数码管:

注:1,2,3,4引脚用于选择处理的数字位(共阴型,低电平有效;共阳极,高电平有效),是这一位数字的公共极。例如,选择数字1,则对1脚送出低电平。

5.3实验内容

1.实验电路搭建

共阳极数码管公共引脚串联一个限流电阻接接VCC,abcdefgh各脚顺序接接Arduino数字D2-D9接口。

2.1位数码管显示实验

步骤1:数码管abcdefgh管脚测试

1位数码管公共引脚接3.5V电源(或接地),其它引脚分别用杜邦线接地(或接3.5V电源),根据LED段的亮(灭)判断并识别abcdefgh的管序。

电路图:

原理图

//程序控制数码管显示

intdigitPin=2;//管脚D2连接到数码管的A脚

voidsetup(){

for(intx=0;x=7;x++)

pinMode(digitPin+x,OUTPUT);//设置D2~D9引脚为输出

}

voidloop(){

for(intx=0;x16;x++){//每隔1秒,顺序显示0-9,A-F数字

displayDigital(x);//调用displayDigit()显示数字函数

delay();//等待1秒

}

}

//自定义函数,数码管显示数字

voiddisplayDigital(unsignedintdigit){

//定义一个二维数组,存储各位数字的abcdefgh取值

unsignedcharabcdefgh[][8]={

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

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

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

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

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

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

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

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

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

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

{0,0,0,1,0,0,0,1},//A

{1,1,0,0,0,0,0,1},//b

{0,1,1,0,0,0,1,1},//C

{1,0,0,0,0,1,0,1},//d

{0,1,1,0,0,0,0,1},//E

{0,1,1,1,0,0,0,1}//F

};

if(digit=16)return;

for(unsignedintx=0;x8;x++){

digitalWrite(digitPin+x,abcdefgh[digit][x]);

}

}

//数码管每隔一秒显示一个数字从0~9,A~F

步骤3:数码管显示测试

电路图:

原理图

4将位数码管的1、2、3、4公共引脚分别接3.5V电源(或接地),其它引脚分别用杜邦线接地(或接

3.5V电源),根据LED段的亮(灭)判断并识别公共引脚控制显示位数字的abcdefgh管序。

骤步骤2:连接4位数码管驱动电路

根据四位数码管引脚顺序,a,b,c,d,e,f,g,h引脚分别连接开ArduinoUNOR3板的数字引脚D2、D3、D4、D5、D6、D7、D8、D9。数码管的4个数字位1,2,3,4引脚分别串联Ω限流电阻,电阻另一端分别连接开发板的数字引脚D10、D11、D12、D13。

intdigitalPin=2;//D2引脚连接数码管a脚,D3连b...D9连h

intweiPin=10;// 位数引脚接口

voidsetup(){

for(intx=0;x4;x++){

pinMode(weiPin+x,OUTPUT);//设置各位公共引脚接口为输出

digitalWrite(weiPin+x,HIGH);//公共引脚高电平,

}

for(intx=0;x8;x++){

pinMode(digitalPin+x,OUTPUT);//设置各段led引脚接口为输出

}

}

voidloop(){

display(1,3);//调用函数显示第1位数字3

display(2,2);//调用函数显示第2位数字2

display(3,1);//调用函数显示第3位数字1

display(4,0);//调用函数显示第4位数字0

}

//定义数码管位显数字函数

voiddisplayDigital(unsignedintdigit){

unsignedcharabcdefgh[][8]={//定义一个数组,存储不同数字的abcdefgh各段的取值

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

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

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

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

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

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

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

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

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

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

{0,0,0,1,0,0,0,1},//A

{1,1,0,0,0,0,0,1},//b

{0,1,1,0,0,0,1,1},//C

{1,0,0,0,0,1,0,1},//d

{0,1,1,0,0,0,0,1},//E

{0,1,1,1,0,0,0,1},//F

{1,1,1,1,1,1,1,0},//DOT=16

{1,1,1,1,1,1,0,1},//MINUS=17

{1,1,1,1,1,1,1,1}//BLANK=18

}

if(digit18)return;

for(unsignedintx=0;x8;x++)

digitalWrite(digitalPin+x,abcdefgh[digit][x]);

}

//指定位显示给定数字函数

voiddisplay(unsignedintwei,unsignedintdigit){

constintBLANK18;

for(intx=0;x=3;x++){

digitalWrite(weiPin+x,LOW);//数字位引脚置低电平

}

displayDigital(BLANK);//调用函数关闭所有显示字段

digitalWrite(weiPin+wei-1,HIGH);//选择位显引脚,置高电平

delay(1);

displayDigital(digit);//调用函数位显数字字段

delay();//指定位的数字显示时间

}

4.程序扩展

任务根据以上示例,编写程序,实现一个累加计数器或累减计数器。

intdigitalPin=2;//D2引脚连接数码管a脚,D3连b...D9连h

intweiPin=10;// 位数引脚接口

voidsetup(){

for(intx=0;x4;x++){

pinMode(weiPin+x,OUTPUT);//设置各位公共引脚接口为输出

digitalWrite(weiPin+x,HIGH);//公共引脚高电平,

}

for(intx=0;x8;x++){

pinMode(digitalPin+x,OUTPUT);//设置各段led引脚接口为输出

}

}

voidloop(){

for(intj=0;j10;j++){

for(intk=0;k10;k++){

for(inte=0;e10;e++){

for(intc=0;c10;c++){

display(1,j);

display(2,k);

display(3,e);

display(4,c);

}

}

}

}}

//定义数码管位显数字函数

voiddisplayDigital(unsignedintdigit){

unsignedcharabcdefgh[][8]={//定义一个数组,存储不同数字的abcdefgh各段的取值

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

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

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

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

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

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

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

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

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

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

{0,0,0,1,0,0,0,1},//A

{1,1,0,0,0,0,0,1},//b

{0,1,1,0,0,0,1,1},//C

{1,0,0,0,0,1,0,1},//d

{0,1,1,0,0,0,0,1},//E

{0,1,1,1,0,0,0,1},//F

{1,1,1,1,1,1,1,0},//DOT=16

{1,1,1,1,1,1,0,1},//MINUS=17

{1,1,1,1,1,1,1,1}//BLANK=18

};

if(digit18)return;

for(unsignedintx=0;x8;x++)

digitalWrite(digitalPin+x,abcdefgh[digit][x]);

}

//指定位显示给定数字函数

voiddisplay(unsignedintwei,unsignedintdigit){

constintBLANK=18;

for(intx=0;x=3;x++){

digitalWrite(weiPin+x,LOW);//数字位引脚置低电平

}

displayDigital(BLANK);//调用函数关闭所有显示字段

digitalWrite(weiPin+wei-1,HIGH);//选择位显引脚,置高电平

delay(1);

displayDigital(digit);//调用函数位显数字字段

delay(5);//指定位的数字显示时间

}

实验现象:



转载请注明地址:http://www.abmjc.com/zcmbjc/1564.html