基于Proteus的Arduino可视化编程应用技术
上QQ阅读APP看书,第一时间看更新

任务3.2 2位LED数码管显示器构成的秒表

任务目标

使用Arduino的数字IO0~IO6引脚驱动共阴极数码管,IO7、IO8分别控制两位数码管的公共端,使两位数码管按秒间隔显示00~99,仿真硬件电路如图3-17所示。

任务重点

● 双联数码管元器件选择

● 结构流程图绘制

● 双联数码管动态显示

● 编译并运行、观察仿真结果

图3-17 仿真硬件电路

任务实施

3.2.1 硬件绘制

1)7SEG-MPX2-CC元器件选择

打开“选取元器件”对话框,在“分类”列表中选择“Optoelectronics”选项,在“子类”列表中选择“7-Segment Displays”选项,在“显示本地结果”列表中双击“7SEG-MPX2-CC”选项,完成7SEG-MPX2-CC元器件选择,如图3-18所示。

图3-18 7SEG-MPX2-CC元器件选择

2)按照已掌握的知识,绘制如图3-17所示电路。

3.2.2 SETUP结构流程图绘制

SETUP结构流程图通过一个循环结构完成IO0~IO8引脚输出模式的设置,如图3-19所示。

图3-19 SETUP结构流程图

1)将“循环构建”图框拖动到SETUP结构流程图中,双击弹出“编辑循环”对话框。在“下一个循环”选项卡进行设置,具体如图3-20所示。其中,在“循环变量”下拉列表中选择循环变量“j”(用j变量控制循环次数),设置“开始值”为0,“停止值”为8,“单步值”为1。

图3-20 “编辑循环”对话框

2)单击“确定”按钮,进一步完善SETUP结构流程图。

3.2.3 display结构流程图绘制

这里沿用任务3.1中的display结构流程图,同时沿用任务3.1中的display3~display9结构流程图图。具体结构流程图如图3-21所示。

1)新建空白图纸。

2)分别将任务3.1中的display结构流程图、display3~display9结构流程图复制到空白的图纸上。

3.2.4 display1和display2结构流程图绘制

display1结构流程图使在左边的数码管上显示00~99秒值的十位数字,其中,调用display结构流程图使硬件图中IO0~IO6引脚输出高电平或低电平,同时使硬件图中的IO7引脚输出为低电平(左边数码管亮)、IO8引脚输出为高电平(右边数码管灭),显示时间1ms;display2结构流程图使在右边的数码管上显示00~99秒值的个位数字,其中,调用display结构流程图使IO0~IO6引脚输出高电平或低电平,同时IO7引脚输出为高电平(左边数码管灭)、IO8引脚输出为低电平(右边数码管亮),显示时间1ms。display1和display2结构流程图如图3-22所示。

图3-21 结构流程图 a)display结构流程图

图3-21 结构流程图(续)b)display3~display7 结构流程图

图3-21 结构流程图(续)c)display8、display9 结构流程图

图3-22 display1和display2结构流程图

3.2.5 LOOP结构流程图绘制

LOOP结构流程图完成从左往右数码管动态显示秒值的功能,每一个数值显示的时间为1s,每一位数码管点亮显示数字时要延时1ms,否则会显示乱码或亮度不够,两位数码管分别点亮一次共需2ms,通过程序中定义的num5变量控制使两位数码管从左往右分别动态显示500次,得到1s的时间间隔;显示的数值由num1变量控制,num1变量的值从00变到99。按照这一技术要求绘制LOOP结构流程图,如图3-23所示。

图3-23 LOOP结构流程图

3.2.6 仿真运行

单击“仿真运行”按钮,观察仿真结果。

相关知识

3.2.7 LED数码管动态显示原理

LED数码管动态显示就是在显示时,单片机控制电路连续不断刷新输出显示数据,使各数码管轮流点亮。由于人眼的视觉暂留特性,使人眼观察到数码管的显示是稳定的。对动态扫描的频率有一定的要求,如果频率太低,LED数码管将出现闪烁现象;频率太高,由于每个LED数码管点亮的时间太短,数码管的亮度太低,无法看清。所以显示时间一般取几毫秒为宜,本任务中每位数码管的显示时间是1ms。数码管动态显示是微机应用系统中最常用的显示方式之一,它具有线路简单,成本低的特点。

3.2.8 LED数码管动态显示接口

数码管动态显示的电路有很多,在本任务的电路中,由于采用的是双联数码管,内部已经将两只数码管的相同笔画段引脚(a~dp)连接在了一起,外部只需再分别接到单片机的IO0~IO6上(dp小数点引脚没连),用IO7、IO8分别对数码管的公共端引脚实现控制,使每只数码管可以单独显示。由于数码管的公共端电流较大,在实际系统中,可以外接74LS04或74LS06(OC门)反相器,在反相器输出引脚为低电平时吸收共阴极数码管公共端电流,驱动共阴极数码管和点亮数码管并保证数码管的亮度,同时,数码管的笔画段引脚外接330Ω或470Ω的限流电阻。共阴极LED数码管驱动硬件电路如图3-24所示。

3.2 仿真动画

图3-24 共阴极LED数码管驱动硬件电路

3.2.9 循环结构流程图

用“循环构建”图框完成绘制循环结构流程图。拖动“循环构建”图框到流程图中,双击弹出“编辑循环”对话框,如图3-25所示,在“下一个循环”(在程序代码中称for循环)选项卡或“While-Wend循环”(在程序代码中称while循环)选项卡中或“Repeat-Until循环”(在程序代码中称do-while循环)选项卡中设置完成循环结构的绘制。使用“下一个循环”图框完成SETUP结构和LOOP结构中的循环结构绘制。

1)选择“While-Wend循环”选项卡,在“while循环”文本框中输入循环条件“num5<500”,单击“确定”按钮,完成While-Wend循环结构如图3-26所示。

小提示:变量num5的初始值是0,并且每循环一次,在循环体内循环控制变量num5的值要进行增加或减少。

图3-25 “编辑循环”对话框

图3-26 While-Wend循环结构

2)选择“Repeat-Until循环”选项卡,在“until循环”文本框中输入循环条件“num5>500”,如图3-27所示,单击“确定”按钮,完成Repeat-Until循环结构,如图3-28所示。

图3-27 Repeat-Until循环结构编辑界面

图3-28 Repeat-Until循环结构

该循环的条件是变量num5≤500,一旦num5>500就结束循环。在循环体中,循环控制变量num5的值要进行增加或减少。

While-Wend结构和Repeat-Until结构的区别是While-Wend结构先判断循环条件是否成立,若成立执行循环体,直到循环条件不成立时为止;Repeat-Until结构是先执行循环体,再判断条件,若不成立再回去执行循环体,直到循环条件成立时为止。

任务拓展

1)用While-Wend结构和Repeat-Until结构改造任务程序,仿真观察结果。

2)将任务中数码管换成共阳极数码管,完成任务功能,设计硬件电路和绘制结构流程图,仿真观察结果。