任务3.1 1位LED数码管显示器构成的秒表
任务目标
任务是用Arduino的数字IO0~IO6引脚驱动共阴极数码管,按照1s时间间隔分别显示0~9,仿真硬件电路如图3-1所示。
图3-1 仿真硬件电路
[任务重点]
● 数码管的结构和分类
● 创建子程序结构流程图
● 新建图纸
● 结构流程图绘制
● 编译并运行、观察仿真结果
任务实施
3.1.1 硬件电路绘制
1)7SEG-COM-CATHODE元器件选择
在“选取元器件”对话框的“分类”列表中选择“Optoelectronics”选项,在“子类”列表中选择“7-Segment Displays”选项,在“显示本地结果”列表中双击“7SEG-COM-CATHODE”选项,完成7SEG-COM-CATHODE元器件选择,如图3-2所示。
2)按照已掌握的知识,绘制如图3-1所示电路。
图3-2 7SEG-COM-CATHODE元器件选择
3.1.2 新建图纸
1)将光标移动到工程管理面板的“Flowchart Files”上右击,从弹出的快捷菜单中选择“新建图纸”命令,如图3-3所示,新建图纸Sheet1。
图3-3 “新建图纸”快捷菜单
2)同样的方法,分别新建图纸Sheet2、Sheet3等。
3)可对新建的图纸重命名,在需要重命名的图纸上右击,从弹出的快捷菜单中选择“重命名图纸”命令,如图3-4所示。修改图纸名如图3-5所示。
图3-4 “重命名图纸”快捷菜单
图3-5 修改图纸名
3.1.3 在新建的图纸上绘制结构流程图
1)在NewSheet2图纸上绘制display3~display7结构流程图。New Sheet2图纸上的结构流程图如图3-6所示。
图3-6 New sheet2图纸上的结构流程图
2)在New Sheet3图纸上绘制display8和display9结构流程图。New Sheet3图纸上的结构流程图如图3-7所示。
图3-7 New Sheet3图纸上的结构流程图
display3~display9结构流程图分别使数码管显示器显示数字3~9,这些结构流程图是根据共阴极数码管显示器显示数字对应引脚输出的状态编写的。
3)在New Sheet1图纸上绘制display结构流程图,display结构流程图根据当前显示的数字,通过“决策块”实现分支结构完成引脚状态的控制或调用对应结构流程图使数码管显示器显示相应数字,New Sheet1图纸上的display结构流程图如图3-8所示。
3.1.4 在Main图纸上绘制结构流程图
(1)SETUP结构流程图绘制
该流程图主要完成IO0~IO6引脚模式设置,根据硬件电路,这些引脚设置为输出模式,SETUP结构流程图如图3-9所示。
图3-8 display结构流程图
图3-9 SETUP结构流程图
(2)LOOP结构流程图绘制
LOOP结构流程图如图3-10所示。
图3-10 LOOP结构流程图
3.1.5 仿真运行
3.1 仿真动画
单击“仿真运行”按钮,观察仿真结果。
相关知识
3.1.6 LED数码管的结构和工作原理
任务中用到了数码管,数码管在应用系统中主要用来显示数字,LED数码管显示器的种类很多,有规格、发光材料、颜色以及内部结构之分,在用户系统中可以根据不同需要进行选择。这里以每段只有一个发光二极管的LED数码显示器为例,介绍其结构和显示原理。
七段数码管引脚如图3-11所示。其中七只发光二极管构成字形“8”,还有一只发光二极管作为小数点。因此这种LED显示器称为七段LED数码管或八段数码管。根据内部结构的不同分为共阴极和共阳极数码管。
(1)共阴极数码管
共阴极数码管内部结构图如图3-12所示。在共阴极结构中,各段发光二极管的阴极连在一起当公共点接地,某一段发光二极管的阳极接高电平时,该段就会发光。
图3-11 七段数码管引脚
(2)共阳极数码管
共阳极数码管内部结构图如图3-13所示。在共阳极结构中,各段发光二极管的阳极连在一起。当公共点接+5V时,某一段发光二极管的阴极接低电平,该段就会发光。
图3-12 共阴极数码管内部结构图
图3-13 共阳极数码管内部结构图
3.1.7 字段码
图3-1中采用的是共阴极LED数码管,要显示字符“0”,则要求a、b、c、d、e、f各引脚为高电平,g和dp为低电平。如果采用的是共阳极数码显示器,要显示字符“0”,则要求a、b、c、d、e、f各引脚为低电平,g和dp为高电平。
以共阴极数码管为例,要显示字符“0”,I/O口输出的8位数据如下:
由上面分析产生的3FH(两位十六进制数)就是对应图3-1中“0”的字段码。表3-1所示为共阴极数码管和共阳极数码管显示器显示不同字符的字段码,此表是七段码。所谓七段码是不计小数点的字段码。包括小数点的字段码,称为八段码。由表中可以看出共阴极数码管和共阳极数码管的字段码互为补码。
表3-1 LED显示器的字段码
任务中通过IO0~IO6数字引脚分别输出了0~9的字段码,其中,IO0用于输出七段码的最低位(位0,控制的是a段),IO6输出七段码的位6(控制的是g段),因为没选用带小数点的数码管,所以字段码的最高位没输出。display3~display9结构流程图就是按照表3-1绘制的。
3.1.8 LED数码管静态显示原理
LED数码管显示器的显示方法有静态显示和动态显示两种。所谓静态显示,就是显示器的每一个字段(a~dp段)都要独占一条具有锁存功能的I/O线。当CPU将要显示的字(经硬件译码)或字段码(经过软件译码)送到输出口上,数码管显示器就可以显示出所要显示的字符。如果CPU不去改写它,它将一直保持下去。
静态显示的优点是显示程序简单、亮度高。由于在不改变显示内容时不用CPU干预,所以节约了CPU的时间。但静态显示也有缺点,主要是数码管位数较多时,占用I/O线较多,硬件较复杂,成本高。静态显示一般用于显示位数较少的系统中。
3.1.9 LOOP结构流程图功能说明
1位秒表实现的功能就是在1位的LED数码管显示器上依次显示0~9,然后循环往复,每位数字显示的时间是1s。LOOP结构流程图中,通过整型变量num控制显示的数字,调用display子程序结构流程图,把num显示数字对应的字段码输出到I/O端口,使对应的数码管笔画段发光二极管点亮,从而显示对应的数字。1s时间间隔通过调用延时函数完成。LOOP结构流程图功能说明如图3-14所示。
图3-14 LOOP结构流程图功能说明
3.1.10 display9结构流程图功能说明
根据表3-1可知,LED数码管显示器要显示数字9,IO6~IO0输出的二进制必须是1100111(不包括最高位,小数点控制位),display9结构流程图就是实现IO6~IO0引脚输出对应的高电平或低电平。display9结构流程图功能说明如图3-15所示,首先用分支结构使IO0~IO6全部输出为高电平,然后单独使IO3、IO4输出为低电平,这是为了简化流程图而已。
图3-15 display9结构流程图功能说明
3.1.11 LED数码管静态显示器驱动电路设计
为保护数码管在显示时不会因为笔画段正向导通电流过大而烧毁,在实际电路系统中,通常在各笔画段的引脚上外接330Ω或470Ω的限流电阻,控制各笔画段引脚的电流,从而控制数码管的显示亮度。
LED数码管静态显示器驱动电路总体上分为两类,第一类是数码管的笔画段引脚接在单片机的I/O引脚上;第二类是通过外部的锁存器或移位寄存器扩展I/O口,外接数码管。
由于任务中只用到了1位数码管,数码管是直接接在单片机的I/O引脚上的。当数码管的位数较多时,单片机的I/O引脚就不够用了,下面以外接74HC595移位寄存器为例来介绍扩展输出口,完成两位数码管的静态显示电路的设计。需要两片74HC595级联扩展16位输出口,外接两个数码管,数码管多一位就多要一片74HC595级联。两位数码管的静态显示电路如图3-16所示。
图3-16 两位数码管的静态显示电路
任务拓展
采用共阳极的数码管完成任务功能,设计硬件电路和绘制流程图,观察仿真结果。