Arduino编程控制与应用课件:完成数字秒表的实现_第1页
Arduino编程控制与应用课件:完成数字秒表的实现_第2页
Arduino编程控制与应用课件:完成数字秒表的实现_第3页
Arduino编程控制与应用课件:完成数字秒表的实现_第4页
Arduino编程控制与应用课件:完成数字秒表的实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Arduino

编程控制与应用Arduino

编程语言的进阶应用完成数字秒表的实现每当有重大节日的时候,都会启动倒计时牌启动仪式,例如2009年5月1日上午,在北京天安门广场东侧中国国家博物馆前,举行中国2010年上海世博会倒计时一周年暨计时牌启动仪式,其中倒计时的功能,我们也可以利用Arduino

开发板来实现,本次任务我们将利用Arduino

编程来实现数字秒表的功能。导

入新授New

teaching皿

帐一、一维数组二、二维数组数组在大数量处理和字符串处理中得到广泛使用。在程序中合理地使用数

组,会使程序的结构比较整齐,而且可

以把较为复杂的运算,转化成简单的数

组来表示。数组由若干个类型相同的元素组成,每个元素就是一个变量,每

个数组都有一个名称,称为数组名。数组的作用数组的定义一

、一维数组(一)数组的定义及作用一维数组是最简单的数组,其逻辑结构是线性表。一维数组的数组元素只有一个下

标。在C

语言程序中使用数组必须先进行定义。定义一维数组的一般形式为:数据类型数组名[整型常量表达式]其中:数据类型是任一种基本数据类型或构造数据类型。数组名是用户定义的数组

标识符(数组名称)。方括号中的整型常量表达式表示数据元素的个数,也称为数组的

长度

。(二)

维数组的定义一、一维数组数组的初始化是用来实现对数组的每个元素赋初值的。虽然有的编译器会自动对数组赋初值,但

为了安全起见,建议用户自己对数组赋初值。对一维数组初始化的一般形式为:数据类型数组名[长度]={数值1,数值2,

……

,数值n}。(三)一维数组的初始化一、一维数组维数组的引用就是对一维数组元素的使用,数组定义好并初始化后就可以使用(或称为调用)。引用

一维数组的一般形式为:数组名[下标](四)一维数组的引用一、一维数组二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。二维数组又称为矩阵,通常有两个下

标(第一个下标表示行,第二个下表表示列),行列数

相等的矩阵称为方阵。引用二维数组的一般形式为:数据类型数组名[整型常量表达式][整型常量表达式](一)二维数组的定义二、二维数组二维数组的初始化是用来实现对二维数组的每个元素赋初值,其赋值方式有多种,这里

介绍常用的两种赋值方式——分段赋值和连续

。(二)二维数组的初始化二、二维数组二维数组的引用就是对二维数组元素的使用,数组定义好并初始化后就可以使用(或称

为调用)。引用二维数组的一般形式为:数组名[下标1][下标2](三)二维数组的引用二、二维数组任务实施Task

Implementation序号软件及硬件名称数量1Arduino

IDE2联网的电脑1台/人3键盘1个/人4鼠标1个/人5Arduino

UNO开发板1块/人6四位数码管扩展板1块/人7USB串口线1根/人(一)软件及硬件准备一、任务准备1.注意Arduino

开发板与电脑的连接是否可靠;2.注意Arduino

开发板与电脑连接端口的匹配;3.注意输出电压,避免开发板被烧坏;4.注意Arduino

开发板与四位数码管扩展板连接时,针脚要对孔,插入时要

小心,避免阵脚变歪或折断。一、任务准备(二)场地设备准备任务实施前需要做好场地防护准备以及检查实训场地和设备设施是否及存在安全隐患,如不正常请汇报老师并进行处理方可实施任务。(三)安全防护准备1234步骤1:连接线的方头端接口连接Arduino

UNO控制板,另一端USB

接口连接电脑。(一)控制电路连接二、实施步骤步骤2:四位数码管扩展板安装在Arduino开发板上。(一)控制电路连接二、实施步骤二、实施步骤(二)控制程序编写与上传setcjz*|

ine

1.a11安性编

工共

整始口Cn

前璃限文格兆称步骤1:打开Arduino

IDE软件,进入界面。步骤2:在工具-端口-选择对应的端口。若分不清端口,先把开发板连接上,查看端口,有COM1、COM3、COM4、COM5、COM6;

断开开发板连接,查看端口,有COM3、COM4、COM5、COM6;少了一个COM10端口,那么COM10就是对应的端口。(二)控制程序编写与上传0(13iri000「管理库…串口监视器串口绘图器WiFi101/WiFiNINA

Firmware开发板:"ArduinoUno"端

口Ctrl+Shift+ICtrl+Shift+MCtrl+Shift+LUpdater>102|Arduino

1.8.13泪

工具帮助自动格式化Ctrl+T项目存档修正编码并重新加载WiFi101/WiFiNINAFirmware

Updater开发板:"ArduinoUno"端

口取得开发板信息编程器:"AVRISP

mkll*烧录引导程序二、实施步骤302

IArduino

1.8.13自动格式化

项目存档取得开发板信息编程器:"AVRISPmkll'

烧录引导程序修正编码并重新加载

管理库…串口监视器串口绘图器Ctrl+TCtrl+Shift+ICtrl+Shift+MCtrl+Shift+L出行端口COM10COM3COM4COM5COM6串行端口

COM3COM4COM5COM6ri

000

ri

000Tri000)步骤1:新建一个文档,//后的代码可删除;在【代码编写区域】下方输入如图所示代码。sketch_mar1/*使用宏定义的方式定义数码管的引脚*/2

#define

a

114#define

c

75#define

d56

#define

e

4

7#definef

108

#define

g

89

#define

h610#defineDIG1A011#define

DIG2

A1

12#define

DIG33/*将引脚号定义在整数型一维数组pin中*/

intpin[]=(11,9,7,5,4,10,8,6};18

/*使用一维数组定义0-9的显示内容*/int

zero[]=(0,0,0,0,0,0,1,1};one[]=(1,0,0,1,1,1,1,1};two[]=(0,0,1,0,0,1,0,1);intthree[]=(0,0,0,0,1,1,0,1};intfour[]=(1,0,0,1,1,0,0,1};intfive[]=(0,1,0,0,1,0,0,1};int

six[]=(0,1,0,0,0,0,0,1};seven[]=(0,0,0,1,1,1,1,1};inteight[】=(0,0,0,0,0,0,0,1};28

intnine[]=(0,0,0,0,1,0,0,1};(三)

维数组与“倒数”二、实施步骤//4//8/16步骤2:在【代码编写区域】中的“voidsetup(){”下方输入如图所示代码。setup()/*将数码管的引脚全部设置为输出模式*/pinMode(a,OUTPUT);pinMode(b,

OUTPUT);pinMode(c,

OUTPUT);pinMode(d,

OUTPUT);pinMode

(e,OUTPUT);pinMode

(f,

OUTPUT);pinMode(g,

OUTPUT);pinMode(h,

OUTPUT);pinMode(DIG1,

OUTPUT);pinMode(DIG2,

OUTPUT);pinMode

(DIG3,

OUTPUT);pinMode(DIG4,

OUTPUT);//将数码管的公共端DIG1、DIG2、DIG3设置为低电平,DIG4设置为高电平

digitalwrite

(DIG1,LOW);digitalWrite

(DIG2,

LOW);digita1Write

(DIG3,LW);digitalWrite

(DIG4,

HIGH);(三)

维数组与“倒数”二、实施步骤32333435363738394041424344454647484950sketch_mar步骤3:再在【代码编写区域】中的"void

loop(){"

下方输入如图所示代码delay(1098);/

/

1for(inti=0;i<8;++i)itelrte(pin[i],one[i]);delay(108);//显示数字θfor(inti=0;i<8;++i)itte(pin[i],zero[i]);delay(1088);}//自定义

个清空数码霄的函数digitaurite

(a,HIG);//

设置a

引脚为高电干digtalrite(

b,HIGH);//

设置b引

平digitarite

(c,HIG+);//

设置c

引脚为离电平起

arite(d,HIG);//设置d

引脚为离电平igitalwrite(

e,HIGH);//设置e引

平共点1e点e(f,HIG1);//设置f引脚为离电平

d

lrie(g,HIGH);//

设置g引脚为离电平

gwrite

(h,HIG);//

设置h

引脚为高电平总R

rte

(DI64,LOM);//

置DIG4引

平te(HnT41,ALne[3]);de

lay(1090);//温示批字8共

taerte(pin

[1],etght

4);delay(1808);//温示数字7for

(inti=0;1c8;+#5)共

(Din

f1),svem[1);deLay(1000);//显示数字6for

(inti=0;1<8;++5)55(Pin

f51】,5x(13);delay(1098);//温示批字5lete(pln[1],fve[4]);delay(1896;//温示数字4for(

imt

i=8;1<8;++4)(PLnT

1,fourt1);dnlay(100;for(inti=0;ic8;++4)e(pinE1),threC=1);//显示数字2(三)

一维数组与“倒数”二、实施步骤//温示数字9for(imt

im8;i<8;++i)e(Din

习),to[13);步骤4:如图所示单击“上传”按钮,通过USB

转串口芯片将程序烧写到控制板的主控芯片中(三)

一维数组与“倒数”define

a

11fdefine

b

9fdefine

c7+defined

5define

e4define

f

104define

g

8define

h6define

DIG1A0fdefine

DIG2A1define

DIG33define

DIG42/0将引脚号定义在整数型一维数组pin中/int

pin[]-(11,9,7,5,4,10,8,6);/使用一维数组定义0-的显示内容!/二、实施步骤文件编婚项目工三帮助sketch_mar

点击上传

/使用宏定义的方式定义数码◎sketch_mar|Arduino

1.8.13步骤5:若操作顺利,将出现“上传成功”的提示,如图所示,四位数码管扩展板上的第4位数

码管会出现9-8-7-6-5-4-3-2-1-0的倒数循环。(三)

维数组与“倒数”二、实施步骤步骤6:控制程序解析:(1)首先使用宏定义#define

定义数码管的字段管脚与arduino

UNO板管脚的对应关系,即a—11、b—9、c—7、d—5、e—4、f—10、g—8、h—6,并定义了数码管公共端管脚与arduinoUNO

板管脚的对应关系,即DIG1—A0、DIG2—A1、DIG3—3、DIG4—2。(2)接着利用一维数组将字段对应的arduino

UNO板管脚号定义为整型一维数组intpin[],同时将显示0—9这10个数字对应的管脚电平状态定义成相对应的整型一维数组,以方便调用。(3)利用初始化函数void

setup将上述所有的管脚定义为输出模式,并将DIG1、DIG2、DIG3设置为低电平,使数码管前三位不激活显示,将DIG4

设置为高电平,激活第四位数码管。(

4

)

在loop

函数中,利用动态显示技术(采用for

循环结构),调用对应的一维数组显示数字“9”,延时1s后,接着调用对应一位数组显示“8”,延时1s……,直到显示数字“0”并延时1s后,再重新进行loop循环。(三)

维数组与“倒数”二、实施步骤pinMode

(f,

OUTPUT);pinMode

(g,

OUTPUT);pinMode

(h,

OUTPUT);pinMode

(DIG1,

OUTPUT);pinMode

(DIG2,OUTPUT);pinMode

(DIG3,OUTPUT);pinMode

(DIG4,OUTPUT);//将数码管的公共端DIG1

、DIG2

、DIG3设置为低电平,DIG4设置为高电平digita1write

(DIG1,L0%);digita1Write

(DIG2,

LOW);digitalwrite

(DIG3,LOW);digita1write

(DIG4,

HIGE);//1oop

循环函数void

loop()//显示数字"9"for(int

i=0;i<7;i++)(digita1write(pin[i],nine[i);delay

(1000);//

延时1000

ms//显示数字“8”for

(

int

i=0;i<7;i++)(delay

(1000);//延时1000ms//显示数字7"for(

int

i=0;i<7;i++)(digita1write

(pin[i],seven[i]);delay

(1000);//

延时1000ms//显示数字6”for

(

int

i=0;i<7;i++)(digita1Write

(pin[i],six[i]);delay

(1

000);//

延时1000ms//显示数字”5”/+使用宏定义的方式定义数码管的引脚/#define

a

11#define

b9#define

c

7#defined

5#define

e4#define

f

10#define

g

8define

h

6#define

DIG1A0#define

DIG2

A1#defineDIG33#defineDIG42/+将引脚号定义在整数型一维数组pin

中+/int

pin[]=(11,9,7,5,4,10,8,6};/4使用一维数组定义0-9的显示内容*/one[]=[1,0,0,1,1,1,1,1};

//1//2//4int

five[]={0,1,0,0,1,0,0,1};int

six[]=(0,1,0,0,0,0,0,1};int

seven[]=(0,0,0,1,1,1,1,1};/*初始化函数*//*将数码管的引脚全部设置为输出模式+/pinMode

(a,OUTPUT);pinMode

(b,

OUTPUT);pinMode

(c,

OUTPUT);for(

int

i=0;i<7;i++){digita1Write

(pin[i],five[i]);delay

(1000);//延时1000ms//显示数字“4”for

(

int

i=0;i<7;i++){digita1Write

(pin[i],four[i]);delay

(1000);//

延时1000ms//显示数字“3”for(int

i=0;i<7;i++){digita1Write

(pin[i],three[i]);delay

(1000);//

延时1000ms//显示数字“2”for(int

i=0;i<7;i++){digita1Write

(pin[1],two[1]);delay

(1000);//

延时1000ms//显示数字“1”for

(

int

i=0;i<7;i++){digita1Write

(pin[1],one[i]);delay

(1000);//

延时1000msfor(inti=0;i<7;i++)《digita1write

(pin[1],zero[i]);delay(1000);//延时1000ms(三)一维数组与“倒数”二、实施步骤//显示数字“0”二、实施步骤(三)一维数组与“倒数”使用宏定义来定义数码管的引脚将引脚号定义在整数型一维数组pin中使用一维数组定义0-9的显示内容将数码管的引脚全部设置为输出模式将数码管的公共端DIG1

、DIG2

、DIG3

设置为低电平,DIG4

设置为高电平程序运行流程图setup

函数使用for

循环

遍历pin数组

和每个数字对应的数组每个数字显示

的时间为1000ms从9到0顺序显示,不

断循环loop

函数二、实施步骤(四)二维数组秒表步骤1:新建一个文档,//后的代码可删除;在【代码编写区域】输入如图所示代码。sketch_mar04a1V/使用宏定义的方式定义数码管引脚

2#definea

113

#define

b

9

4#define

c7

5#define

d

5

6#define

e47#definef

108

#defineg

89

#define

h

610//

定义数码管公共端11#defineDIG1A012#define

DIG2A1

13#defineDIG33

14#define

DIG4215//使用二维数组方式点亮数码管16

char

number[10][8]={//02021(1,0,0,1,1,0,0,1},23252627//5

//6

//7

//8步骤2:在【代码编写区域】中的“void”setup(){{}}

下方输入如图所示代码。sketch_mar04a28};29//初始化函数vo

id

setup

()32

//定义数码管的引脚为输出模式33

pinMode(a,

OUTPUT);34

pinMode

(b,

OUTPUT);35

pinMode(c,

OUTPUT);36

pinMode

(d,

OUTPUT);37

pinMode

(e,

OUTPUT);38

pinMode(f,

OUTPUT);39

pinMode

(g,

OUTPUT);40

pinMode(h,

OUTPUT);

4142

pinMode(DIG1,

OUTPUT);43

pinMode(DIG2,

OUTPUT);44

pinMode(DIG3,

OUTPUT);45

pinMode(DIG4,

OUTPUT);(四)二维数组秒表二、实施步骤步骤3:在【代码编写区域】中的

“voidloop(){”

下方输入如图所示代码。sketch_mar04a46}47

//1oop循环函数48void

loop()

49{//使用for

循环来遍历4位数码管,当显示的数字大于9时,进一位显示51

for

(int

1=0;1<10;1++)

5253

for(int

k

=0;k<10;k++)

5455

for

(int

j=0;j<10;j++)

5657for(inti=0;i<10;i++)

5859

for(int

t=0;t<60;t++)(60Refresh(1,1);//

调用自定义函数,显示内容

delay

(3);//

延时3ms62Refresh(2,k);63

delay(3);64

Refresh(3,j);65

delay

(3);66

Refresh(4,i);

delay

(3);68697071(四)二维数组秒表二、实施步骤步骤4:在【代码编写区域】下方输入“void

Refresh(int

DIG,int

n){”,并

其下方输入如图所示代码。//刷新数码管显示digitalwrite(a,HIGE);digitalwrite

(b,

HIGH);digita1Write(c,HIGH);digita1Write(d,

HIGH);digitalWrite

(e,HIGH);digitalwrite(g,

HIGE);digitalwrite

(h,HIGH);digitalwrite(DIG1,LOW);digita1Write

(DIG3,LOW);digitalwrite

(DIG4,LOW);//判断数码管需要显示哪一位switch(DIG)(case

1:digitalwrite(DIG1,HIGH);break;case

2:digitalWrite(DIG2,HIGH);

break;case

3:digitalwrite

(DIG3,HIGE);case4:digitalwrite

(DIG4,HIGH);106

digitalWrite(a,number[n][0]);107

digitalwrite(b,number[n][1]);108

digitalwrite(c,number[n][2]);109

digitalWrite(d,number[n][3]);

digitalWrite(e,number[n][4]);111

digitalWrite(f,number[n][5]);

digitalwrite(g,number[n][6]);113digitalWrite(h,number[n][7]);114}(四)二维数组秒表二、实施步骤break;//数码管数字显示sketch_mar04a76void

Refresh(int

DIG,intn)(778889909193949596979899100104105步骤5:如图所示单击“上传”按钮,通过USB转串口芯片将程序烧写到控制板的主控芯片中(四)二维数组秒表二、实施步骤//0(1,0,0,1,1,1,1,1},[0,0,1,0,0,1,0,1},[0,0,0,0,1,1,0,1},sketch

maro4a#definea

11

define

b

9#define

c7#defined

5#define

e4#define

f

10define

g

8#defineDIG1A0#defineDIG2A1#define

DIG42文件编辑项目工具帮助点击上传步骤6:若操作顺利,将出现“上传成功”的提示,如图所示,四位数码管扩展板上会出现0-9999的秒表功能,从第四位数码管开始计数,从1

开始直到9999才归零,归零后又开始新的一轮循环

。(四)二维数组秒表二、实施步骤步骤7:控制程序解析(1)首先使用宏定义#define

定义数码管的字段管脚与arduino

UNO板管脚的对应关系,即a—

11

、b—9

、c—7

、d—5

、e—4

、f—10

、g—8

、h—6,并定义了数码管公共端管脚与arduinoUNO板管脚的对应关系,即DIG1—A0

、DIG2—A1

、DIG3—3

、DIG4—2。(2)接着利用二维数组将显示0—9这10个数字对应的管脚电平状态定义成相对应的字符型二维

数组(每一行对应一个数字的电平状态,0为高电平,1为低电平),以方便调用。(3)利用初始化函数void

setup将上述所有的管脚定义为输出模式。(

4

)

在loop

函数中,利用动态显示技术(采用嵌套的for循环结构,遍历显示数码管的4位),调

用自定义的子函数refresh显示对应的内容。(5)定义子函数refresh点亮数码管以显示相应内容,该子函数带两个传递参数,其中DIG为位选参数(即对应四位数码管的第几位),n

为段选参数(即对应a、b、c、d、e、f、g、h的第几段)。(四)二维数组秒表二、实施步骤二、实施步骤(四)二维数组秒表//

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论