![用Proteus可视化设计玩转Arduino](https://wfqqreader-1252317822.image.myqcloud.com/cover/91/47379091/b_47379091.jpg)
1.2 可视化设计基本操作
可视化设计在于将集成好的库(包括所有常用的显示器、按钮、开关、传感器、电机,以及更强大的器件如TFT显示屏、SD卡和音频播放等外围设备)封装成各种模块。设计者通过添加外围设备的方式来设计原理图,通过拖放模块的方式即可调用相应的设备和程序,从而完成嵌入式设计,大大简化了编程和控制外设的方式。因此,读者仅需要掌握微控制器的基本架构,就可以进行可视化设计,大大降低了编写控制代码的难度。Proteus的可视化设计仿真功能也非常强大,Arduino/Grove工程可在没有硬件设备的情况下进行仿真功能的设计和开发,以节省硬件验证的时间。用户也可以继续在Proteus VSM工作环境下用C++或汇编语言对同一个硬件进行编程。
1.2.1 基本方法介绍
以前面的工程为例,可视化原理图搭建完成后,将界面切换至可视化设计界面,从左边的工程树中的Peripherals选项中,我们可以看到cpu和timer1两个关于Arduino开发平台的方法库,如图1-2-1所示。
单击cpu左边的三角,弹出cpu相关的方法:pinMode(配置引脚模块,指定引脚和方向)、analogReference(配置模拟引脚参考电压模块)、analogWrite(写入模拟量模块)、analogRead(读取模拟量模块)、digitalWrite(写入数字量模块,指定输出引脚和高低电平)、digitalRead(读取数字量模块)、pulseIn(读取脉冲时间模块)、millis(延时模块)、enableInterrupt(启用中断模块)、disableInterrupt(禁用中断模块)、debug(调试模块),如图1-2-2所示。
单击timer1左边的三角,弹出timer1相关的方法:initialize(初始化模块)、setPeriod(设置频率模块)、start(启动模块)、stop(停止模块)、restart(重启模块)、resume(继续模块)、read(读取模块)、pwm(启用PWM模块)、disablePwm(禁用PWM模块)、setPwmDuty(设置PWM占空比模块),如图1-2-3所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_16_2.jpg?sign=1738846827-q052VCyVfzXqopH0W1JIoiHOGORGrkge-0-bd11d51ade6c789196322c9f9dc2af35)
图1-2-1 Arduino开发平台模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_16_3.jpg?sign=1738846827-ONxU9xdXlBEJt5FYrXFcRJCLbBqoZgsd-0-f4e648c55c7365c46ffd988f690e0c1f)
图1-2-2 cpu模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_16_4.jpg?sign=1738846827-HpVjDw6M8maTd9aYjlQE41gtMWZGovLQ-0-447d4c4d7f88c7360fa8c9c8da05a13e)
图1-2-3 timer1模块
从工程树的右边可以看到基本逻辑框图,如图1-2-4所示。
事件块与结束块一起使用以定义子程序(如写入显示器)和事件处理程序(如处理定时器中断)的开始和结束。创建一个子程序,需要在“Edit Event Block”对话框中的“Name”栏设置子函数名称,如图1-2-5所示。在放置子程序调用块时可以选择此子程序。如果需要创建一个程序来处理可触发事件(如中断处理程序),则需要指定触发器,单击“Edit Event Block”对话框中的按钮,弹出“Select Trigger”对话框,如图1-2-6所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_17_2.jpg?sign=1738846827-v03pmf9ryotT0ESjoxc8azWO7scOg5Hp-0-56885cf27dd459873ced24f600b1590e)
图1-2-4 流程图中的基本逻辑框图
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_17_3.jpg?sign=1738846827-4iuOl1CK94RWh52VZAeuOTy9alUJnRqv-0-7623a114531e0b73de07537ca1a910f5)
图1-2-5 “Edit Event Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_17_4.jpg?sign=1738846827-Moi4giQeouRpf2pg9FTVuiwM43Vx0bWA-0-295d9d9ebfec8749c304bffb61da150c)
图1-2-6 “Select Trigger”对话框
事件结束模块用于终止程序或子程序,通常放置在事件模块中。
赋值/分配模块是变量赋值的工具,如图1-2-7所示,可以在赋值/分配模块中完成创建新变量、编辑变量和删除变量等操作。单击“Edit Assignment Block”对话框中的按钮,弹出“New Variable”对话框,可以选择所创建变量的数据类型,如图1-2-8所示。
在“Edit Subroutine Call”对话框中用子程序调用模块可以调用流程图中任何已经定义的函数,如图1-2-9所示。提示:必须首先使用事件开始模块和结束模块来创建和命名子程序,子程序调用模块才可以调用子程序。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_1.jpg?sign=1738846827-44VQuEjWQ8hfh9U8JHzPmhTRH7EL2Tkn-0-9e82c104b83f7c010bd28bb1dcd26b41)
图1-2-7 “Edit Assignment Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_2.jpg?sign=1738846827-vAO1UdfD7vsc4Y1ET7WteA0ezoIqLxEw-0-3417f3d704cbd4c8c36e7f2266aeb570)
图1-2-8 “New Variable”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_3.jpg?sign=1738846827-HKlAzOCylAqznOSHgsQYxhRDwJbLjVOz-0-75f0801de4ed5f7ea806fa9fff1bf65b)
图1-2-9 “Edit Subroutine Call”对话框
数据存储模块常用于表示存储对象(SD卡)上的操作方法,与文本或其他文件一起使用,如图1-2-10所示。
外设操作模块原则上允许在硬件上执行一个操作,硬件仅由处理器和可用操作组成,如图1-2-11所示。在实际工程中,可以向工程添加外围设备扩展板。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_4.jpg?sign=1738846827-DpFzeBS7v5ceXcwKNaHgSoqqLvJ7Qkvn-0-8f6b16de0ce27f7b51904260ff7ae280)
图1-2-10 “Edit I/O Block”对话框(1)
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_5.jpg?sign=1738846827-akv0ebxVHxkzxm6JTL5MJ59t97tfGkTH-0-5ff7b9a66d6fbc092d155308a9396b7b)
图1-2-11 “Edit I/O Block”对话框(2)
如图1-2-12所示,在“Edit Delay Block”对话框中,时间延迟模块用于在程序中引入特定的延迟。在执行延时函数期间,在Arduino单片机中读取传感器、数学计算和引脚操作等均停止,但是中断可以继续工作。
决策判断模块的作用是基于条件对程序流进行分流,从而执行不同的处理方式。如图1-2-13所示,在“Edit Decision Block”对话框中需要填入一个布尔表达式作为判断条件,与代码相比更加直观。当在流程图上放置了决策/判断模块时,将YES分支和NO分支置于默认位置,如图1-2-14所示。如果其位置不符合流程图,则右键单击判断模块,弹出快捷菜单,单击选项,可将YES分支和NO分支进行交换,如图1-2-15所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_2.jpg?sign=1738846827-efS4zqs9mGAubTwknqSQGU21ibtMioA4-0-f81c6ba52e963c9f93a3a75b1556dbce)
图1-2-12 “Edit Delay Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_3.jpg?sign=1738846827-9Eohd1m1MsTFV6ZrgK6EpxOE7dVAbiKU-0-265f04b7c519babbf72152fab8c17fd2)
图1-2-13 “Edit Decision Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_4.jpg?sign=1738846827-H5x6YEM4ZNmcDU25RiXtvCOuyOzqL3lW-0-61df22432274808f6211ebfa370675a7)
图1-2-14 放置决策/判断模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_5.jpg?sign=1738846827-jQiFyDpKeBrHdJCg4y5QPVZR7Eyjx7Wf-0-558157a02c82de7d34338517d0bf0240)
图1-2-15 交换分支
循环结构模块包含了计数循环(Count Loop)、For-Next循环(For-Next Loop)、While-Wend循环(While-Wend Loop)和Repeat-Until循环(Repeat-Until Loop)。计数循环的具体参数设置如图1-2-16所示;For-Next循环的具体参数设置如图1-2-17所示;While-Wend循环的具体参数设置如图1-2-18所示;Repeat-Until循环的具体参数设置如图1-2-19所示。
互联模块基本上是“虚拟连接”,并且需要成对。如果有两个互联模块具有相同的数字,可以想象是一个看不见的线将其连接在一起。互联模块的目的是将流程图逻辑拆分为多个列。可以拖放两个互联模块,将它们链接到流程图,然后重新编号即可。或者可以简单地右键单击并Split(分离)向导线,如图1-2-20所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_1.jpg?sign=1738846827-knSwBOygq2ykfuFIguzshxFuELzXuS3Y-0-94a6006987902cac630458fa88fa9e32)
图1-2-16 计数循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_2.jpg?sign=1738846827-tnetqb6kggdkagJsj6Pp1B6KbtIIIrV2-0-62c1b202f7b5d3ee21788d61552cc5b8)
图1-2-17 For-Next循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_3.jpg?sign=1738846827-89CJgIpVZU6e21HQ6xEoAx110arVZecx-0-8bf26b4d79b61f16d9c7538137403e62)
图1-2-18 While-Wend循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_4.jpg?sign=1738846827-GGSYwBrkIIMweZF7ZgYOITAS58USNFTc-0-bc431184a9540621df081529bd2e2037)
图1-2-19 Repeat-Until循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_5.jpg?sign=1738846827-B4WcTc8oaARkKAW84u1LkaOHdpkz3MUq-0-dedbb832e1516ef2c6a66d49824156c2)
图1-2-20 用互联模块分离成两个独立的线
注释模块可以自由输入描述性文本(见图1-2-21)以及设置文本的属性(见图1-2-22)。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_1.jpg?sign=1738846827-gA84hMStdKcX0wFVYOqikFuSApbcMKAF-0-2b8f4c128de48b6c8fd6bc469158dcab)
图1-2-21 输入描述性文本
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_2.jpg?sign=1738846827-NXZIgBITuQmyUXeqXeHiKaFGv2psxMMc-0-0680ffdcc0deb861cb44ef3d85b16929)
图1-2-22 设置文本的属性
1.2.2 系统仿真
【开始仿真】:若要开始仿真,可以单击动画控制面板上的“播放”按钮。程序将进行编译并且仿真进度将在状态栏上显示,如图1-2-23所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_3.jpg?sign=1738846827-etOoXVsKhRZYm5thPsFVzuJKRCHkht3l-0-c0eef9b799e200581059ed7e6322616a)
图1-2-23 状态栏显示仿真进度
【停止仿真】:若要停止仿真,可以单击动画控制面板上的“停止”按钮,如图1-2-24所示,整个工程将停止仿真。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_4.jpg?sign=1738846827-8HM2pyW5v4CXXSZLq6iCAWulw1JmBAX4-0-97b07c4b22008078ff8f87132f8549fc)
图1-2-24 通过控制面板停止仿真
【暂停仿真】:暂停Proteus仿真是一个重要的概念。当仿真暂停时,程序和元器件处于当前静止状态,例如,电容器不会放电,电机将保持其角位置和动量,这样便可以使用户检查程序和虚拟硬件。若要暂停运行的仿真,可以单击动画控制面板上的“暂停”按钮,如图1-2-25所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_5.jpg?sign=1738846827-AcRPMSlbOCFMe1GdJM9aEDK7f8E7UDpH-0-0ee8be61cd0d58dec5aee2eee8c73412)
图1-2-25 暂停仿真
当单击动画控制面板上的“暂停”按钮后,Proteus软件的Visual Designer界面如图1-2-26所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_22_1.jpg?sign=1738846827-XJIHZXRgFLzGlJk7mz3UnDOqBpDwVVSu-0-f3df4074a21a16c8f62774afb94e67f8)
图1-2-26 暂停仿真后Proteus软件的Visual Designer界面
[1]“ARDUINO”常见于Proteus软件界面中。为了使图文一致,在描述某些界面时使用了“ARDUINO”,实际表达意思与“Arduino”一致。