![基于Proteus的Arduino可视化编程应用技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/35/41865035/b_41865035.jpg)
任务2.2 基于74HC595的流水灯控制
任务目标
任务是利用两片74HC595芯片级联扩展16位输出口,驱动按照圆形放置的16个发光二极管,使发光二极管按顺时针方向实现流水灯的花样显示。仿真硬件电路如图2-17所示。
[任务重点]
● 串入并出的移位寄存器74HC595的工作原理
● 两片74HC595级联的硬件电路设计
● 结构流程图绘制
● 编译并运行、观察仿真结果
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_55_01.jpg?sign=1738969496-7RLLFuaYiAIRcVzvmW4Mv1vnLg6fTxaF-0-603104786c4103eeafb9ad0b26fdfbd6)
图2-17 仿真硬件电路
任务实施
2.2.1 硬件绘制
(1)74HC595元器件选择
在“选取元器件”对话框的“分类”列表框中选择“TTL 74HC series”选项,在“显示本地结果”列表框中双击“74HC595”选项,完成74HC595元器件选择,如图2-18所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_56_01.jpg?sign=1738969496-wtk0xAVBbiGwQHSeMqUyWTgUipo0CPaq-0-aba400522eab9689b5a0aface016c240)
图2-18 74HC595元器件选择
(2)排阻元器件选择
在“选取元器件”对话框的“分类”列表框中选择“Resistors”选项,在“子类”列表框中选择“Resistor Packs”选项,在“显示本地结果”列表框中双击“RX8”选项,完成排阻元器件的选择,如图2-19所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_56_02.jpg?sign=1738969496-WNWI1fC9r1yQduRctUIOs0tsebiNACvi-0-bd286c1ae673e2a3e7ca502490e346ee)
图2-19 排阻元器件选取
(3)放置元器件和端口
按照图2-17所示电路放置元器件和端口,调整元器件相对位置,连线、编辑元器件属性,完成电路绘制。
2.2.2 SETUP结构流程图绘制
SETUP结构流程图完成IO5~IO7引脚输出模式的设置,SETUP结构流程图如图2-20所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_57_01.jpg?sign=1738969496-UvWGKikD4SMipwvm0abLpeKQHT9aoixE-0-3fe3c6e518c3cff097542975c197d95e)
图2-20 SETUP结构流程图
2.2.3 zh结构流程图绘制
zh结构流程图将要发送的数据(a变量的值)的各二进制位求出并分别放到布尔变量a7~a0中,其中,a7为最高位,a0为最低位,求取过程中利用了除法和求余运算。zh结构流程图最终效果如图2-21所示。
(1)放置“事件块”图框
拖动“事件块”图框放置到编辑区的空白区,放置“事件块”创建结构流程图,如图2-22所示。
(2)编辑事件块
1)双击结构图中的“事件块”图框,弹出“编辑事件块”对话框,如图2-23所示。
2)在“名称”文本框中输入“zh”,单击“确定”按钮,创建的初始zh结构流程图如图2-24所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_58_01.jpg?sign=1738969496-SpEIGwqapuWt35Izc3kuGcgbeZOGrlII-0-bfb41ae7fc166e0d43c9d18382994492)
图2-21 zh结构流程图最终效果
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_58_02.jpg?sign=1738969496-edSXlzgBpqCLYTRj1WzA6UScAzuOEToy-0-5481933561dd877c10a510caa5d99f01)
图2-22 放置“事件块”创建的结构流程图
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_58_03.jpg?sign=1738969496-V4JfVpHSbt7sssHIGbCv0ZYsry0kIT7T-0-e6b66e1426df3a15953e2d0c012604b4)
图2-23 “编辑事件块”对话框
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_59_01.jpg?sign=1738969496-q0mYsQmfkHDfohx0fYlFt3g29E9mUVYF-0-e6d54b82ca13ae3bf45db34528929e86)
图2-24 初始zh结构流程图
(3)新建布尔变量a7~a0
可以在任何结构流程图的“分配块”“决策块”“I/O操作”图框等的编辑窗口中新建变量。
1)双击图2-20中的任何一个I/O操作框,弹出“编辑I/O块”对话框,如图2-25所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_59_02.jpg?sign=1738969496-tk5oyR829KpOvZvPPjipRPsb9XXm8nXV-0-692633a3f7adaa95098d07ece6632a7b)
图2-25 “编辑I/O块”对话框
2)单击“新建”按钮,弹出“新建变量”对话框,如图2-26所示。在“命名”文本框中输入“a0”,在“类型”下拉列表框中选择“BOOLEAN”选项。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_60_01.jpg?sign=1738969496-IbTz6QJCqlBjdO3yiRi5tP3pyTFcdFPo-0-1adc828aa4e9e945bfa03e475dcfb971)
图2-26 “新建变量”对话框
3)单击“确定”按钮,在“编辑I/O块”对话框中完成布尔变量a0的定义,如图2-27所示,在“变量”列表框中列出了定义好的变量a0。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_60_02.jpg?sign=1738969496-6ObNRoljLK7thpvVGkMQtacjy1PT1E4c-0-123b824cde1d2a6685996b2f32ea1212)
图2-27 布尔变量a0定义
4)和变量a0的新建方法相同,完成变量a1~a7的新建,所有变量新建结束后,图2-27中的“变量”列表中会全部列出。
(4)结构流程图的分裂
结构流程图比较复杂,编辑区的纵向或横向放不下时,可以将结构流程图分裂。
1)将光标移动到要分裂的连接线位置,分裂位置示意如图2-28所示。
2)右击弹出“删除/分裂”快捷菜单,如图2-29所示,选择“分裂”选项,完成结构流程图的分裂,自动添加成对的“互联”图框,“互联”图框编号按顺序随机产生,编号相同的地方就是连接在一起的,分裂后的结构流程图如图2-30所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_61_01.jpg?sign=1738969496-SjGvPka5yNEgAPvrPSIvMT3hhza2Lu6V-0-ed366b9f0489b2f7e6d7bda890653e8d)
图2-28 分裂位置示意图
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_61_02.jpg?sign=1738969496-p51XLgRRJE8i4TxnMKXvYwI7XRtpngsk-0-2dd214cf81ab04e0697abaa6e3a79d74)
图2-29 “删除/分裂”快捷菜单
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_61_03.jpg?sign=1738969496-t4MJYbIDYc0ZpWEBfx6mwuArURll3I9o-0-efaca3b2ba1b856640c9ec23a4f9231b)
图2-30 分裂后的结构流程图
(5)完成其他流程图
继续完成zh结构流程图的绘制,最终效果如图2-21所示。
2.2.4 fa结构流程图和SH结构流程图绘制
SH结构流程图实现IO6引脚为低-高-低的电平。fa结构流程图实现将变量a7~a0的值依次发送到74HC595保存起来,按照74HC595工作原理,IO5每输出一个二进制位,IO6引脚必须输出一个上升沿脉冲(即低-高-低的电平),单片机才能将一位二进制数输出锁存到74HC595。fa结构流程图和SH结构流程图如图2-31所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_62_01.jpg?sign=1738969496-hzPXt8JzuEfa0yiO1viwG1kyBuBeE0An-0-3a862ef6d6a8acf13dbf4e29a952bb12)
图2-31 fa结构流程图和SH结构流程图
a)fa结构流程图 b)SH结构流程图
1)拖动“子程序调用”图框到fa结构流程图中,“子程序调用”图框放置如图2-32所示。
2)双击图2-32中的“子程序调用”图框,弹出“编辑子程序调用”对话框,如图2-33所示。其中,在“图纸”下拉列表中选择“(全部)”选项,在“方式”下拉列表中选择“SH”选项,单击“确定”按钮。
3)进一步完善,完成图2-31的绘制。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_63_01.jpg?sign=1738969496-96lZAEkqhZcmTVrhD8HpbldFVtZedkK7-0-a9a0a7a41325ca7736b85ebfcc37024f)
图2-32 “子程序调用”图框放置
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_63_02.jpg?sign=1738969496-mb92GE8I8SEEdUuggY0cfiJMhtdSK1FV-0-180304b70320c260ddb6abed3d0a387c)
图2-33 “编辑子程序调用”对话框
2.2.5 st结构流程图绘制
按照74HC595工作原理,在两片级联的芯片串行接收完16位二进制数后,单片机使IO7输出一个上升沿脉冲,启动两片74HC595同时输出接收到的数据,驱动发光二极管。st结构流程图如图2-34所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_63_03.jpg?sign=1738969496-IZlXD3HtB1x4XKBYrH7psBT7fDNy0VYB-0-70148aefc590a3a2e10ed5827572ea09)
图2-34 st结构流程图
2.2.6 LOOP结构流程图绘制
按照显示流水灯花样的特点,要求单片机通过两片74HC595输出16个16位的二进制数,每一个16位二进制数中只有一个0,其他位为1,数据输出保持500ms不变。在低8位数中0所在位变的过程中,高8位数恒为1(高8位二进制数对应的十进制数为255);在高8位数中0所在位变的过程中,低8位数恒为1(低8位二进制数对应的十进制数为255)。根据这一规律,LOOP结构流程图主要分为两个循环结构,分别循环8次,在第一个循环中,每一次完成高8位为全1输出,低8位输出数据使0分别从低位到高位变化;在第二个循环中,每一次高8位输出数据使0分别从低位到高位变化,低8位输出数据为全1。LOOP结构流程图如图2-35所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_64_01.jpg?sign=1738969496-ltQ7Tgf4NYJ1NCyreDuYZ3NHYFw2BDSS-0-e186839fc6b8d99cc45c665953b4bfd4)
图2-35 LOOP结构流程图
1)利用“循环构建”图框绘制流程图,“循环构建”图框如图2-36所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_64_02.jpg?sign=1738969496-0BWIf1bkv2N5W23pxsnaxKnLELNFoyul-0-bc713ac34b188cbbccad866ca16dba59)
图2-36 “循环构建”图框
2)将“循环构建”图框拖动到LOOP结构流程图中,双击弹出“编辑循环”对话框。在“下一个循环”选项卡进行设置,具体如图2-37所示。其中,在“循环变量”下拉列表中选择循环变量“i”(用i变量控制循环次数),设置“开始值”为0,“停止值”为7,“单步值”为1。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_65_01.jpg?sign=1738969496-tS0Red62SrZr8sVL13NqWCmcFH5KIeqh-0-8d920609d97c3515bd5bfb6c8156172d)
图2-37 “编辑循环”对话框
3)单击“确定”按钮,进一步完善LOOP结构流程图。
2.2.7 仿真运行
单击“仿真运行”按钮,观察仿真结果。
相关知识
2.2.8 74HC595功能介绍
74HC595是一个8位串行输入、并行输出的移位寄存器,并行输出为三态输出。74HC595芯片引脚如图2-38所示。在SH_CP的上升沿,串行数据由DS输入到内部的8位移位寄存器,并由Q7'输出,多片级联时后面的74HC595数据输入端接前面一片的Q7',而并行输出则是在ST_CP的上升沿将在8位移位寄存器的数据存入到8位并行输出缓存器,OE的控制信号为低电平时,并行输出引脚(Q0~Q7)的输出值等于并行输出缓存器所存储的值。而当OE为高电平时,也就是输出关闭时,并行输出引脚会保持在高阻抗状态。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_65_02.jpg?sign=1738969496-MiVKhooRi5byiXCyMqotLcRX05qDK4L9-0-1d7820b6e981a08b568c6dddfa54b729)
2.2 仿真动画
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_66_01.jpg?sign=1738969496-OfW0k3cplDDvsqywn4IOJiObbq2upg1V-0-4b7c8bce412bd10be45ef5b38e2730a6)
图2-38 74HC595芯片引脚
74HC595芯片各引脚功能如表2-1所示。
表2-1 74HC595芯片引脚功能
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_66_02.jpg?sign=1738969496-AWowQK34ZbKoUsIgHuzf3WgRpep7w8xw-0-eb9f10285db44236fb7e4beb25d234a0)
2.2.9 两片74HC595级联的使用方法和步骤
两片74HC595级联的硬件电路连接按照图2-17所示。单片机对74HC595的操作步骤如下。
1)单片机将要输出的1位数据输出到74HC595的数据输入端DS上,先送高位后送低位或先送低位再送高位。
2)单片机在SH_CP引脚产生上升沿。
3)重复1)和2),将16位数据依次按顺序输出锁存到两片74HC595芯片上。
4)单片机在ST_CP产生上升沿,使两片74HC595同时并行输出数据,即数据并出。
2.2.10 “分裂”图框使用
在流程图绘制中,如果要转列、转行或换页继续绘制结构流程图,就要用到“互联”图框。
在分裂处右击,在弹出的快捷菜单中选择“分裂”选项,流程图断开,自动添加节点号。也可手动添加“互联”图框,拖动“分裂”图框到编辑区,双击编辑节点号,如图2-39所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_67_01.jpg?sign=1738969496-zD809UcvtqB8q9wfs7gzWuDcFougniFj-0-c5c633de988feeef28c1d9b7cca5acc4)
图2-39 手动放置“分裂”节点并编辑
2.2.11 循环结构
任务LOOP结构流程图中包含循环结构,循环结构用“循环构建”图框完成,以LOOP结构流程图中的循环结构介绍其构成和执行过程。截取LOOP部分流程图如图2-40所示。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_67_02.jpg?sign=1738969496-YzVNXu1YqbyQ9byirM3RFMwEZPBd3YtD-0-e275df25d842fa58e0c7fa8848199f9c)
图2-40 LOOP部分流程图
循环结构由循环控制条件和循环体组成。循环结构执行时首先执行“循环构建”开始图框,变量i获得初始值为0,然后判断循环条件是否成立,如果循环条件成立(这里是i的值小于或等于7),顺序执行循环体内的图框,循环体执行一遍后自动回去再判断循环条件,如果循环条件成立再执行循环体,直到循环条件不成立才结束循环。
小提示:由于这里设置的步长为1,所以循环体每执行一遍,i的值自动增加1,所以总有结束循环的时候,否则死循环。
2.2.12 LOOP结构流程图功能说明
由于LOOP结构流程图太复杂,分两部分介绍。
1)完成前8个16位二进制数的输出,先发高8位,再发低8位,8个16位二进制数如表2-2所示。通过对数据进行分析,发现规律:高8位二进制数均为1,8个低8位二进制数中的0依次从低到高移动或者分别等于255-x(x=2n,n=0,1,2,…,7)。
表2-2 8个16位二进制数
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_68_01.jpg?sign=1738969496-82M8Eqoba3rCuhp7TWNx9sGrUoWsX08W-0-804bded2bf7e27638a0da1267b240798)
实现这些数据输出的部分LOOP结构流程图如图2-41所示,在图中对图框功能加以介绍。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_68_02.jpg?sign=1738969496-xiPhHkE3QPC9ffVnlwn29JNpOvcGi8wT-0-bc515d87b85be47b3845c2357b8ebe51)
图2-41 部分LOOP结构流程图
2)完成后8个16位二进制数的输出,先发高8位,再发低8位,8个16位二进制数如表2-3所示。通过对数据进行分析,发现规律:低8位二进制数均为1,8个高8位二进制数中的0依次从低到高移动或者分别等于255-x(x=2n,n=0,1,2,…,7)。
表2-3 8个16位二进制数
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_69_01.jpg?sign=1738969496-5Go3I4alApWuKTBunzTrRujYaSsVwVqV-0-1fd00fbc3a389b10f2a53f3f1b6716ee)
实现这些数据输出的部分LOOP结构流程图如图2-42所示,在图中对图框功能加以说明。
![](https://epubservercos.yuewen.com/5072CD/21889221001187006/epubprivate/OEBPS/Images/978-7-111-66651-6_69_02.jpg?sign=1738969496-DJEAX7Nu6l1UWZMITOdX0vTQw6pAUWU5-0-dc7516175dffadbab68d0057e07d8160)
图2-42 实现后8个16位二进制数的输出的部分LOOP结构流程图
任务拓展
任务2.2中是顺时针实现流水灯花样显示,硬件电路不变,编写流程图实现逆时针流水灯花样显示。