![用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=1739029884-aVtVw1enmYKyqTtd8rmy6bYFlecxJfJf-0-63bdec7e0c015fca785fee97bf4b3663)
图1-2-1 Arduino开发平台模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_16_3.jpg?sign=1739029884-vO3G0fYsE3BJX3mo7sTLuAfObWHTf7ea-0-94c013a590eb8ee3aeb0cef618a655f1)
图1-2-2 cpu模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_16_4.jpg?sign=1739029884-LQaLTXzob8uajrcTJ4EXbIwOEDyhhUB0-0-d0dded472d00d0a624c9b3590f1e32d9)
图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=1739029884-mT9k7GXoqLqa1VfaJWIp4Tt8zsaKvG4A-0-badb7f69829cb76c2e855b0840e55e7d)
图1-2-4 流程图中的基本逻辑框图
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_17_3.jpg?sign=1739029884-DW7qShGaqXKNf7viplcpXXvZyorO2Ipg-0-0d8dffd0b78c45e2068b0e3dd62a306c)
图1-2-5 “Edit Event Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_17_4.jpg?sign=1739029884-69FZBlS4iyN5FV05uRuV8KEvYhHOsGVM-0-1bc79d6611437c5b4de92018a9649a8a)
图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=1739029884-HALhdroByF3WbPxvt7Yet6g7ZyOj74Tn-0-f6bb0c34bc6e67d9e6679d3ca562d67b)
图1-2-7 “Edit Assignment Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_2.jpg?sign=1739029884-wPoF5qDM7FD0sTSn7Bcp2EWFdzXGeTLx-0-b910a692255997398988e9bb0f68405a)
图1-2-8 “New Variable”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_3.jpg?sign=1739029884-Duh1lLT8tRiaEEDge7z12nnzTipXDRE6-0-3abb97a51228af1e966b84fa5bddd331)
图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=1739029884-nVtMkIyf6FxvnPSGVQ1EWxfS7WGkvNqR-0-c25818cd1ed63b32d4f478219f5f8cd6)
图1-2-10 “Edit I/O Block”对话框(1)
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_18_5.jpg?sign=1739029884-no5SaicXm22GaixNvaON2Rt8ursfXCfc-0-d184253d2e8480272183b69374eddd65)
图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=1739029884-lzcHMPPtMKsXDGJsC5UI9wlA7TV8hjDI-0-a7b23c75bbc08027dc6047258983b698)
图1-2-12 “Edit Delay Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_3.jpg?sign=1739029884-Dc7KinwlGn4HiARPrXb8r7u9M9TZ2AbQ-0-d1f29b738cb7a414101cb51c25a09a87)
图1-2-13 “Edit Decision Block”对话框
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_4.jpg?sign=1739029884-BAP0MwfE1di3Gkn0gk8Zxfm719we7hA0-0-b4a5162fcaf765ed1de2f2565d6e34a3)
图1-2-14 放置决策/判断模块
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_19_5.jpg?sign=1739029884-eS1D4kdn9aNImX3IM2oNVeG0F2wP5byr-0-42728bbcd5bc345c421c50b43abc681b)
图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=1739029884-X24lIjDmKZcn48dTUUtpj3OTD56x6KOV-0-7785f66d24c903a7c64f873902a4937b)
图1-2-16 计数循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_2.jpg?sign=1739029884-n9p2ClVXCSRrjQjTpKSCWy2guJluWAPg-0-8f147b72065aee7aff0691dda671529e)
图1-2-17 For-Next循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_3.jpg?sign=1739029884-ZZFDi9vaqIOJgROV0Vgz2IlaGzQTRieT-0-cbee01ff526dfeaaef08f2d7a0e25a1f)
图1-2-18 While-Wend循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_4.jpg?sign=1739029884-7UzALrK2nPJ1M0r8v9G8AkyOwYVR8vpu-0-b6ef7d6e32a2334fc2dd9f916426bc9c)
图1-2-19 Repeat-Until循环
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_20_5.jpg?sign=1739029884-eRlfEUvqABJkN6lROqScuWBADpzNv5w7-0-fd94742ddc689c53f35b670d4f5e3eca)
图1-2-20 用互联模块分离成两个独立的线
注释模块可以自由输入描述性文本(见图1-2-21)以及设置文本的属性(见图1-2-22)。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_1.jpg?sign=1739029884-nED0nV1T7Ytpf9Tt5P0cHSrDWuswEElR-0-f00615ab4ec40ae39e02ec98d1fa3d6d)
图1-2-21 输入描述性文本
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_2.jpg?sign=1739029884-JKWo5V3DQC4kMsxvQC7rUKSbvEOS2J1j-0-175183e44a61f424ed70d233c6c25f79)
图1-2-22 设置文本的属性
1.2.2 系统仿真
【开始仿真】:若要开始仿真,可以单击动画控制面板上的“播放”按钮。程序将进行编译并且仿真进度将在状态栏上显示,如图1-2-23所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_3.jpg?sign=1739029884-cBtRQQrqcqQRapbndOgmgbQ6gmUKmalk-0-95fba7f07954a42009479d011d02ef39)
图1-2-23 状态栏显示仿真进度
【停止仿真】:若要停止仿真,可以单击动画控制面板上的“停止”按钮,如图1-2-24所示,整个工程将停止仿真。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_4.jpg?sign=1739029884-9FqYApwcJjoeAawzuExssVVUh3XAsYVI-0-1027f7015b95e3f56d9e37a0b122e2da)
图1-2-24 通过控制面板停止仿真
【暂停仿真】:暂停Proteus仿真是一个重要的概念。当仿真暂停时,程序和元器件处于当前静止状态,例如,电容器不会放电,电机将保持其角位置和动量,这样便可以使用户检查程序和虚拟硬件。若要暂停运行的仿真,可以单击动画控制面板上的“暂停”按钮,如图1-2-25所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_21_5.jpg?sign=1739029884-0CUT9J4WeiVx1ixSGLB9EmqOXfJrX4eR-0-a37b7bcb481417c50e5aafd6285ab7b2)
图1-2-25 暂停仿真
当单击动画控制面板上的“暂停”按钮后,Proteus软件的Visual Designer界面如图1-2-26所示。
![](https://epubservercos.yuewen.com/3DA509/26763674301311806/epubprivate/OEBPS/Images/38943_22_1.jpg?sign=1739029884-Z56OsxqIBnv1XyjB1LzpxHSV6tBqt712-0-45278808a84f165d0682c2b6d6bfb1d2)
图1-2-26 暂停仿真后Proteus软件的Visual Designer界面
[1]“ARDUINO”常见于Proteus软件界面中。为了使图文一致,在描述某些界面时使用了“ARDUINO”,实际表达意思与“Arduino”一致。