Logo

郎哥编程

使用proteus完成二极管点亮仿真实验

2024-10-28 22

实验目标

设计51单片机最小系统电路,使用AT89C52单片机控制发光二极管的点亮。为此我们需要使用proteus完成晶振电路、复位电路以及发光二极管控制电路在内的电路设计,然后加载使用Keil编写的控制二极管点亮的嵌入程序,以验证程序的运行结果。

晶振电路是单片机运行的基础,它提供了单片机工作所需的时钟信号。复位电路则负责在必要时重置单片机的状态,确保其从已知的初始状态开始运行。发光二极管控制电路则是我们实现单片机功能的具体体现,通过控制单片机的I/O口来点亮或熄灭发光二极管。

完成电路设计后,将使用Proteus软件进行电路仿真。在仿真环境中,我们将加载用Keil编写的嵌入式程序,并观察发光二极管的亮灭情况,以验证程序的运行结果是否符合预期。

通过这一实验,我们不仅能够加深对51单片机最小系统电路的理解,还能够提升我们在嵌入式系统开发方面的实践能力。

安装proteus仿真工具

proteus是英国Labcenter Electronics公司推出的一款EDA仿真工具,在自动化控制系统电路设计与仿真领域应用广泛。在本次实验中,我们将通过Proteus完成两项关键任务:一是构建单片机应用电路,安排单片机与外围芯片、电子器件的布局,并规划它们之间的连线;二是进行电路仿真,通过运行由Keil开发工具编写的嵌入式程序,来检验电路设计的正确性以及程序运行的实际效果。这一过程可以降低我们在嵌入式开发学习过程中对硬件操作的依赖。

Proteus对多种单片机提供仿真支持,其中就包括ARM和51系列。尽管它主要对ATMEL公司研制的51系列单片机提供支持,但这并不妨碍我们使用其他51系列单片机编写的嵌入式程序,因为51系列单片机都遵循统一的指令架构。Proteus仿真的单片机能够运行由Keil、MATLAB、IAR等软件开发的嵌入式程序,并具备源代码级别的调试功能,这为我们的嵌入式开发工作提供了极大的帮助。

proteus正版软件费用相对较高,初学者可以使用Proteus提供的演示版,这一版本是完全免费的,并且没有时间限制。不过演示版的功能是有所限制的,它只能在现有的示例上运行用户自己编写的程序,而不能进行仿真调试,也不能保存设计文件,但不妨碍我们学习嵌入式开发。

 

电路设计

晶振电路

晶振电路构成时钟脉冲振荡电路,为单片机提供时钟脉冲,下图为AT89C52单片机的外部晶振电路。

上图是应用proteus设计的晶振电路,该电路由单片机AT89C52(U1)、晶振(X1)、电容器件构成。

晶振电路的电容称为匹配电容或负载电容,它们并联到晶振两端,为晶体振荡提供电流回路,若没有这两个电容,晶振的振荡会因为没有电流回路而停振,这两个电容的容量都很小,选择几十皮法即可,两个电容的另一端都需要接地。

AT89C52单片机的XTAL1和XTAL2是外接时钟引脚,XTAL1为片内振荡电路的输入端,XTAL2为片内振荡电路的输出端,这两个引脚外接晶振和电容,晶振一般取值为12MHZ,电容一般取值为10P~30P。

晶振为单片机提供稳定的时钟脉冲,确保单片机内部的所有操作都在精确的时序控制下有条不紊地执行。无论是数据处理、指令执行还是I/O操作,都离不开晶振提供的时钟信号的驱动。

上图为晶振提供的时钟脉冲时序图,它有8个时序脉冲,开始是低电平,过一段时间后出现一个上升沿,并跃变到高电平,高电平持续一段时间后,出现下降沿,并跃变到低电平。

时钟周期是晶振工作频率的倒数,这一关系反映了晶振频率与单片机操作速度之间的直接联系。例如,使用12M的晶振意味着其时钟周期为1/12μs,而1MHZ的时钟频率对应着1μs的时钟周期;若频率提升至4MHZ,则时钟周期缩短至250ns。这些数值直接影响了单片机的运行速度和处理能力。

复位电路

51单片机的复位电路是为了让单片机在特定的情况下回到初始状态。就好像你玩游戏时,有时候游戏会卡顿或者出错,这时候你可能就需要重新开始游戏,回到游戏的起始点,重新开始。51单片机的复位电路就是这个作用。

复位电路通常包含一个电容和一个电阻,它们一起工作来产生一个电压脉冲。当单片机需要复位时,这个电压脉冲会被送到单片机的复位引脚,告诉单片机:“嘿,你需要回到初始状态,重新开始!”

什么情况下需要复位呢?比如单片机刚上电时,或者程序运行出错时,都可能需要用到复位电路。复位电路确保单片机在这些关键时刻能够重新开始,从而避免了一些可能出现的问题。

AT89C52单片机的RST引脚为复位引脚,该引脚连续输入两个机器周期以上高电平时有效,机器周期是单片机完成一个基本操作所需要的时间,一个机器周期大约为12个时钟周期。下图为AT89C52的复位电路。

复位电路由一个极性电容和一个电阻串联构成,电容的正极接5V电源,负极接1K的电阻,电阻的一端接地,RST引脚接电容的负极。该电路为上电复位,当单片机在通电瞬间,确保复位端为高电位并持续大约2个机器周期。当单片机加电时,复位电路通过电容给RST端加一个高电平,此高电平信号随着对电容的充电而逐渐降低,因此要保持电容充电时间足够长来完成复位操作。

发光二极管控制电路

发光二极管控制电路用于控制二极管的发光状态,下图为发光二级管控制电路。

电路图的D1为发光二极管,一端接单片机P1第0位,一端接200欧姆的电阻,电阻的一端接5V电源,该电阻对电路进行限流,因为发光二级管允许流过的电流较小,所以需要串联一个几百欧姆的电阻。

在当前电路下,单片机加电后,发光二级管并不会点亮,因为单片机I/O口(包括P1口)所有位引脚都输出高电平,该电路无电流流通。前面我们使用keil编写了一个嵌入程序,该嵌入程序将P1口第0位改变为低电平,在这种情况下,该电路将有电流通过,发光二级管被点亮。

应用proteus绘制电路模型

启动proteus

启动proteus,启动后的proteus工作窗口如下图所示,不同版本的proteus其工作窗口界面可能有所不同。

请执行以下步骤:首先,展开【File】菜单,然后选择【New Design…】命令。另外,您也可以直接按下Ctrl+O快捷键来快速打开“Create New Design”对话框。在对话框中,请选择“DEFAULT”模板,并点击【OK】按钮。

展开【File】菜单,选择【Save Design】命令,或按下Ctrl+S快捷键,在弹出的“Save ISIS Design File”对话框,输入文件名称,单击“保存”按钮保存电路模型。

proteus仿真元器件

proteus提供了仿真电子元器件库,后面统称为元件库,单击下图所示的“P”按钮可以打开元件库窗口。

元件库窗口如下图。

在“keywords”输入域,可以输入元器件的英文名称关键词或具体的型号,例如要查找的单片机型号“AT89”。proteus将搜索并列出与输入关键词或型号相匹配的元器件项在“Results”列表窗口中。之后,可以在此列表中选择需要添加到电路模型的元器件,然后点击“OK”按钮。所选元器件将会被添加至当前电路模型的元器件库中,以供后续使用。

一旦选择了如“AT89C52”这样的单片机型号,Proteus还将在“Preview”窗口中展示该单片机的电路模型符号,以便预览和确认所选元器件。确认无误后,单击“OK”按钮即可将选定的单片机正式添加到电路模型元器件库中。

在电路模型元器件库选择“AT89C52”,在电路模型设计窗口合适位置单击鼠标左键,放置到单片机,并可以拖动单片机到电路模型的合适位置,位置确定后双击鼠标左键,将单片机添加到电路模型。

绘制晶振电路

打开元件库,分别使用关键词“crystal”和“cap”搜索晶振和电容元器件,添加晶振、电容到电路模型元器件库。

晶振电路还需要5V的电源,用鼠标单击proteus窗口左侧工具条的“Terminals Mode”模式,该模式包含了电源(POWER)、接地(GROUND)等电路器件。如下图所示。

用鼠标单击proteus窗口左侧工具条的“Component Mode”,可以从“Terminals Mode”模式切换到电路模型元器件库。

从电路模型元器件库添加两个电容、一个晶振、一个接地点到电路模型,如下图所示。

为方便元器件连接,可以对元器件进行旋转。例如旋转名称为X1的晶振器件:用鼠标选中X1元器件,单击鼠标右键,在弹出的菜单中选择“Rotate Anti-clockwise”命令,X1元器件会在当前状态下逆时针旋转90度。

添加的电子元器件默认显示元器件多个参数,如元器件名称、元器件值的大小、元器件文字说明等。设计者可以自定义是否显示和修改这些参数。例如修改名称为C1的电容元器件,用鼠标选中C1元器件,双击该C1元器件,proteus会弹出C1元器件参数修改对话框,如下图所示。

在输入域“Component Reference”可以修改元器件的名称,在输入域“Capacitance”可以修改C1电容的容量,在这里修改为22pf,若不需要在电路模型显示C1电容的名称和容量,可以选上Hidden检查框。

按照上述步骤,分别修改电容器件C1和C2的容量为22pf,修改X1晶振的振荡频率为12MHZ。修改后电路模型如下图所示。

我们发现电路模型内电子元器件的文本说明没有隐藏,若需要隐藏文本说明,展开【Template】菜单,选择“Set Design Defaults……”命令,在弹出的对话框(如下图所示)去掉“Show Hidden text”检查。

元器件参数配置完成后的电路模型如下图所示。

下一步的工作是将单片机、电容、晶振、电源通过导线连接在一起,连接方式可以参照前面的晶振电路图。连接方法是将鼠标移动到元器件的一端或电路的节点,当鼠标变为绿色的铅笔时,按下鼠标左键,同时拖动鼠标绘制出导线,拖动导线到合适位置后,双击鼠标左键导线绘制完成。

绘制晶振电路时,可以分别从单片机的XTAL1脚和XTAL2脚引出导线连接C1和C2的一端,同时连接到晶振的两端,然后将C1和C2另一端分别连接到接地点。

绘制复位电路

复位电路需要一个22uF的极性电容,一个1K的电阻,一个+5V的直流电源。打开元件库,使用关键词“res”搜索电阻元器件,添加电阻到电路模型元器件库,使用关键词“cap-pol”搜索极性电容元器件,添加极性电容到电路模型元器件库。

从电路模型元器件库添加一个极性电容、一个电阻、一个电源到电路模型,如下图所示。

修改C3电容容量参数为22uf,修改R1电阻值为1K,电源默认为+5V电源,无需修改。

参照前面的复位电路图,将单片机、C3、R1、电源通过导线连接在一起,连接之前添加接地点到电路模型。

绘制发光二极管控制电路

发光二级管控制电路需要一个200欧姆的电阻,一个发光二极管,一个+5V的直流电源。打开元件库,使用关键词“LED-RED”搜索发光二极管元器件,添加发光二极管到电路模型元器件库。

从电路模型元器件库添加一个发光二极管、一个电阻、一个电源到电路模型,修改元器件参数,调整元器件到合适位置,如下图所示。

参照前面的发光二极管电路图,将单片机、D1、R2、电源通过导线连接在一起。

装载和运行Keil编写的嵌入式程序

实际上51单片机要正常工作,还需要在Vcc引脚接入电源,在Vss引脚或GND引脚接公共接地端。proteus默认单片机已经接电源和接地,无需再进行导线连接。

在前面的《配置Keil开发环境与第一个单片机实验》课程中,我们编写了控制单片机P1口第0位输出低电平的程序,程序代码如下:

#include<reg51.h>
sbit led1 = P1^0;
void main()
{
led1 = 0;
}

51单片机只能运行HEX或BIN文件,HEX是十六进制文件,英文全称为“hexadecimal”,BIN文件是二进制文件,英文全称为binary,这两种文件可以通过软件相互转换。若需要Keil编译后输出HEX文件,需要对Keil输出选项进行配置。在Keil工作窗口,展开【Project】菜单,选择“Options for Targets”命令,在弹出的对话框中,选择“Output”标签页,确定“Create Hex File”被选中。

重新编译C源代码,在项目的输出目录可以看到扩展名为“hex”的HEX文件。

C程序编译完成后,回到proteus工作窗口,在电路模型窗口使用鼠标双击单片机,或选中单片机后单击鼠标右键,在弹出的菜单中选择“Edit Properties”命令,proteus弹出Edit Component对话框(见下图),选择使用keil编译的HEX文件,单击【OK】按钮即可装载C程序到单片机。

在电路模型内仿真运行前面装载的单片机程序,运行程序有两种方式:一种方式是展开【Debug】菜单,选择“Start/Restart Debugging”命令来运行程序;一种方式是用鼠标单击调试工具条的启动按钮(见下图)来运行程序。

程序运行后电路模型各端口状态如下图所示。

观察电路模型状态,D1发光二级管已经点亮,蓝色方块表示该端口为低电平,红色方块表示该端口为高电平,灰色方块表示电压不确定。下一节实验课程解释P0口电压不确定的问题。

实验小结

通过这次实验,掌握了proteus设计单片机电路模型的过程,并仿真运行由Keil编写的嵌入式C程序,点亮了发光二极管。下次实验目标主要是应用proteus结合keil对嵌入式程序进行源代码级调试,并解释在实验过程中,P0口电压不确定的问题。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论