目录
3 Protues和Keil联合仿真实现点亮小灯和流水灯
文章概述
本文系统介绍了Proteus仿真软件的使用方法,包括:1. 工程创建与界面操作,详细说明了元器件添加、终端模式、激励源模式等基本功能;2. 220V交流转5V直流稳压电路的仿真实现,分析原理图设计及示波器调试技巧;3. Proteus与Keil联合仿真应用,通过实例演示了点亮单个LED和实现流水灯效果的全过程。文章重点讲解了Keil程序编写、HEX文件生成、Proteus程序烧录等关键步骤,并提供了共阴极/共阳极两种接法的电路原理图和完整控制程序代码。
1Protues介绍及新建工程
1.1进入软件
双击软件快捷键——>点击:新建工程
1.2文件创建
依次:
填写:工程名称——>选择:工程路径——>选择:新工程
1.3默认选项
DEFAULT——>Next
不创建PCB布板设计——>Next
没有固件项目——>Next
原理图——>Finish
1.5设计面板
设计界面如上图所示,主要由菜单栏、工具栏、输入模式选择栏、选择目录、仿真控制按键和设计面板组成。不同栏模块又可以进行细分,如上图所示。
1.6添加元器件
点击P(进入器件选择界面)
1:器件名称——>2:对应器件——>3:器件原理图——>4:PCB封装图——>确认
常用元器件对应缩写表
类别 |
缩写/关键词 |
中文名称 |
说明/备注 |
BATTERY |
电池/直流电源 |
提供直流电压源 |
|
POWER |
电源符号 |
用于供电节点 |
|
GROUND |
地 |
接地符号 |
|
电阻类 |
RES / RESISTOR |
电阻 |
固定阻值电阻 |
POT / POT-LIN |
可调电阻/电位器 |
三端可调电阻 |
|
RESPACK |
排阻 |
多个电阻封装在一起 |
|
电容类 |
CAP / CAPACITOR |
无极性电容 |
普通电容 |
CAPACITOR POL |
有极性电容 |
电解电容 |
|
ELECTRO |
电解电容 |
大容量电容 |
|
CAPVAR |
可调电容 |
用于调谐电路 |
|
电感类 |
INDUCTOR |
电感 |
普通电感 |
INDUCTOR IRON |
带铁芯电感 |
低频大电感 |
|
INDUCTOR3 |
可调电感 |
可调磁芯电感 |
|
晶体类 |
CRYSTAL |
晶振 |
提供时钟信号 |
二极管类 |
DIODE |
普通二极管 |
整流/开关用 |
ZENER |
稳压二极管 |
电压稳压 |
|
DIODE SCHOTTKY |
肖特基二极管 |
高速开关 |
|
DIODE VARACTOR |
变容二极管 |
用于调谐电路 |
|
三极管类 |
NPN / PNP |
NPN/PNP三极管 |
普通三极管 |
MOSFET |
MOS管 |
场效应管 |
|
JFET N / JFET P |
N沟道/P沟道结型场效应管 |
低噪声放大 |
|
逻辑门 |
AND / OR / NOT |
与门 / 或门 / 非门 |
基本逻辑门 |
NAND / NOR |
与非门 / 或非门 |
组合逻辑门 |
|
显示类 |
LED |
发光二极管 |
指示灯 |
DPY_7-SEG |
7段数码管 |
显示数字 |
|
DPY_7-SEG_DP |
带小数点7段数码管 |
显示浮点数 |
|
LM016L |
1602液晶 |
2行16字符LCD |
|
开关与按钮 |
SWITCH |
开关 |
普通开关 |
SW-SPST |
单刀单掷开关 |
通断开关 |
|
SW-DPDT |
双刀双掷开关 |
切换电路 |
|
SW-PB / BUTTON |
按钮 |
手动触发 |
|
电机类 |
MOTOR |
直流电机 |
普通电机 |
MOTOR AC |
交流电机 |
AC电机 |
|
MOTOR SERVO |
伺服电机 |
可控角度 |
|
传感器类 |
MICROPHONE |
麦克风 |
声音输入 |
THERMISTOR |
热敏电阻 |
温度传感 |
|
PHOTO |
光敏二极管 |
感光元件 |
|
继电器类 |
RELAY-DPDT |
双刀双掷继电器 |
控制电路通断 |
变压器类 |
TRANS1 |
普通变压器 |
电压变换 |
TRANS2 |
可调变压器 |
输出可调 |
|
调试与虚拟仪器 |
VTERM |
虚拟串口终端 |
串口通信调试 |
LOGIC ANALYSER |
逻辑分析仪 |
数字信号调试 |
|
VOLTMETER / AMMETER |
电压表 / 电流表 |
实时测量电路参数 |
器件可移动状态
器件放置好状态
双击器件:编辑器件内容
1.7终端模式
1:终端模式图标 2:终端模式包含内容 3:终端模式内容对应的图标
“终端模式”(Terminal Mode)提供了一组非常常用的电路节点标识符号,用于表示电源、地、输入/输出端口、信号流向等。
名称 |
含义 |
DEFAULT |
默认终端,无特殊定义,通常用于自定义标签或连接点。 |
INPUT |
输入端口,表示信号从外部进入电路(如传感器输入)。 |
OUTPUT |
输出端口,表示信号从电路输出到外部(如LED、电机)。 |
BIDIR |
双向端口,既可输入也可输出(如I2C、UART引脚)。 |
POWER |
电源正极(如 +5V、+3.3V),用于给电路供电。 |
GROUND |
地线(GND),电路参考点,所有电压相对它测量。 |
CHASSIS |
机壳地,用于接地保护,常见于金属外壳设备。 |
RETURN |
返回信号线,常用于模拟电路或差分信号回流路径。 |
DYNAMIC |
动态终端,用于仿真中临时变化的节点(较少用)。 |
BUS |
总线终端,用于连接多条信号线(如数据总线 D0-D7)。 |
TESTPOINT |
测试点,便于仿真时测量电压、电流或波形。 |
NC |
未连接(No Connect),明确标识某引脚不连接任何信号。 |
1.8激励源模式
“激励模式”(Generator Mode)用于向电路提供各种仿真信号源。
名称 |
含义说明 |
DC |
直流电压源,输出恒定电压(如 5V、3.3V)。 |
SINE |
正弦波发生器,可设置频率、幅度、相位等。 |
PULSE |
脉冲信号源,方波或矩形波,可设置占空比、周期等。 |
EXP |
指数信号源,产生指数上升或下降波形。 |
SFFM |
单频调频信号源(Single Frequency FM),用于模拟调制信号。 |
PWLIN |
分段线性信号源,通过多个时间点定义任意波形。 |
FILE |
从外部文件读取波形数据(如CSV或WAV文件)。 |
AUDIO |
音频信号源,可导入WAV文件作为输入信号。 |
RANDOM |
随机噪声信号源,用于测试电路抗干扰能力。 |
DSTATE |
数字状态信号源,输出高/低电平(逻辑0/1)。 |
DEDGE |
数字边沿信号源,产生单个上升沿或下降沿。 |
DPULSE |
数字脉冲信号源,用于测试数字电路响应。 |
DCLOCK |
数字时钟信号源,产生周期性方波(如1kHz时钟)。 |
DPATTERN |
数字模式信号源,可自定义多位数字序列(如101101)。 |
SCRIPTABLE |
可编程信号源,使用脚本语言(如Lua)自定义复杂波形。 |
1.9探针模式
1:探针模式图标 2:探针模式包含内容 3:探针模式内容对应的图标
探针模式包含电压探针、电流探针和信号探针
1.10仪表
1:虚拟仪表图标 2:虚拟仪表包含内容 3:虚拟仪表内容对应的图标
虚拟仪表(Virtual Instruments)是一组可交互的软件仿真工具,用于在电路仿真过程中实时测量、生成或调试信号。
名称 |
功能 |
用途 |
示波器(Oscilloscope) |
显示模拟信号的电压-时间波形,支持多通道(如双踪示波器)。 |
观察信号波形、测量频率/幅值、检查噪声或失真。 |
逻辑分析仪 (Logic Analyser) |
捕获并显示数字信号的高低电平状态(0/1),支持多通道(通常16或更多)。 |
调试数字电路时序(如SPI、I2C、UART通信)。 |
计数器/定时器(Counter Timer) |
测量信号的频率、周期、脉冲宽度或作为事件计数器。 |
分析时钟信号、PWM波形参数。 |
虚拟终端 (Virtual Terminal) |
模拟串口终端(如UART),支持ASCII码收发。 |
调试单片机的串口通信(如发送AT指令或接收传感器数据)。 |
SPI调试器 (SPI Debugger) |
监控SPI总线通信(MOSI、MISO、SCK、SS信号),解码数据帧。 |
验证SPI Flash、传感器等设备的通信协议。 |
I²C调试器 (I²C Debugger) |
捕获I²C总线的起始/停止条件、地址和数据帧。 |
调试EEPROM、RTC等I²C设备。 |
信号发生器 (Signal Generator) |
输出可调的正弦波、方波、三角波等模拟信号。 |
测试放大器、滤波器频率响应。 |
模式发生器(Pattern Generator) |
生成自定义数字信号序列(如8位并行数据)。 |
模拟数字输入(如键盘扫描信号)。 |
直流电压表(DC Voltmeter) |
测量电路中某点的直流电压值。 |
检查电源电压、分压电路输出。 |
直流电流表 (DC Ammeter) |
测量直流电流(需串联在电路中)。 |
验证功耗或负载电流。 |
交流电压表 (AC Voltmeter) |
测量交流信号的有效值(RMS)电压。 |
检查交流电源或信号幅度。 |
交流电流表 (AC Ammeter) |
测量交流电流的RMS值。 |
分析交流负载(如电机)的电流。 |
功率计 (Wattmeter) |
计算瞬时功率(P=VI)及能量消耗。 |
评估电路效率或功耗。 |
1.11二维直线
1:二维直线图标 2:二维直线包含内容 3:二维直线内容对应的图
1.12字符
双击字符模式
依次填写一下内容
1:文本字符串内容 2:位置 3:变量类型 4:字体 5:字高
2 Protues电路原理图仿真
2.1 220V交流电转5V直流电稳压电路仿真原理图
2.1.1 仿真原理图分析
如上图所示,220V交流电转5V直流稳压电路实现220V交流转换为5V直流电的功能,整个电路由220V交流输入、变压器、整流桥和线性电源电路组成。其中220V交流电作为电路输入,变压器实现降压,整流桥实现整流、电容C1、C2、C3和C4实现滤波功能,7805组成线性电源电路实现5V电压的输出。
2.1.2 仿真结果分析
如上图所示,示波器为四通道实时显示输入、整流、滤波和输出的波形变化,黄色线表示输入波形、蓝色线表示整流波形、红色线表示滤波波形和绿色表示输出波形。
2.2 仿真过程中示波器的调出
仿真过程中会出现示波器界面不显示的情况,解决方法如下:
点击仿真开始:此时未出现示波器界面
依次点击:调试——>3.Digital Oscilloscope
出现示波器界面
3 Protues和Keil联合仿真
Protues和Keil联合仿真以点亮一个小灯和流水灯为例进行说明,仿真使用Protues进行仿真电路的绘制,使用Keil进行控制程序的编写,然后通过Protues和Keil联合仿真实现单个小灯闪烁和流水灯的功能。
3.0 烧录程序实现
3.0.1 Keil生成程序
新建项目:项目——>新uVision项目
命名及保存:选择文件夹——>命名——>保存
选择芯片过程如下图所示
Legacy Device…——>芯片型号——>选定芯片型号——>ok
如果没有想用芯片,解决方法:
1官网下载数据包(速度慢): C51 Version 9.61 Evaluation Software Request
2以下载好的数据包(直接安装)(速度快):https://download.csdn.net/download/XU157303764/91664454
选择是否都可以
新建控制程序文件
Source Group(鼠标右键)——>.C——>命名——>add
编写程序
设置编译文件
点击魔术棒——>Output——>勾选Create HEX File——>ok
.HEX文件生成
重构——>成功
3.0.2 Protues烧录程序
双击单片机
选择程序文件按钮
找到程序——>选中——>打开
确定
运行仿真
3.1 点亮一个小灯
3.1.1 电路原理图
高电平点亮小灯
如上图所示,流水灯仿真电路原理图主要由51单片机、晶振电路、复位电路和LED灯点亮电路组成,其中LED灯为高电平点亮,低电平熄灭,当P1.0为高电平时LED点亮,当P1.0为低电平时LED熄灭。
低电平点亮小灯
如上图所示,流水灯仿真电路原理图主要由51单片机、晶振电路、复位电路和LED灯点亮电路组成,其中LED灯为低电平点亮,高电平熄灭,当P1.0为高电平时LED熄灭,当P1.0为低电平时LED点亮。
3.1.2 小灯闪烁控制程序(高电平点亮小灯)
控制程序主要包含头文件、延时函数和主函数,控制程序如下所示:
//小灯闪烁
#include <reg52.h>//库文件
#define uint unsigned int//预处理宏命令 进行短命名
#define uchar unsigned char
sbit L1=P1^0;//将P1赋值给L1
void delay(uint n)//延时函数ms/
{
uchar i;
uint j;
for(j=0;j<n;j++)
for(i=0;i<123;i++);
}
void flash()//LED灯亮2s后熄灭1秒
{
L1=1;//LED亮
delay(2000);//2秒
L1=0;//LED灭
delay(1000);//1秒
}
//主函数实现死循环
void main (void)
{
while(1)
{
flash();
}
}
3.2 流水灯
3.2.1电路原理图
流水灯共阴极接法
如上图所示,流水灯仿真电路原理图主要由51单片机、晶振电路、复位电路和流水灯电路组成,其中流水灯电路中的8个LED灯采用共阴极接法,即当P1.n(n=1、2、3…5、6、7)管脚为高电平时LED灯点亮,初始化阶段P1.n全部置于高电平即上电后所有亮灯全部点亮。
流水灯共阳极接法
如上图所示,流水灯仿真电路原理图主要由51单片机、晶振电路、复位电路和流水灯电路组成,其中流水灯电路中的8个LED灯采用共阳极接法,即当P1.n(n=1、2、3…5、6、7)管脚为低电平时LED灯点亮,初始化阶段P1.n全部置于高电平即上电后所有亮灯全部熄灭。
3.2.2控制程序(共阴极接法)
控制程序主要包含头文件、延时函数和主函数,控制程序如下所示:
//流水灯(8个)
#include <reg52.h>//库文件
#define uchar unsigned char//预处理宏 进行短命名
#define uint unsigned int
sbit L1=P1^0;//将P1赋值给变Ln(1、2、3…7、8)
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
sbit L5=P1^4;
sbit L6=P1^5;
sbit L7=P1^6;
sbit L8=P1^7;
void delay(uint n)//延时函数ms
{
uchar i;
uint j;
for(j=0;j<n;j++)
for(i=0;i<500;i++);
}
void flash1()//LED灯亮1s后熄灭
{
L1=1;//LED亮
delay(1000);
L1=0;//LED灭
}
void flash2()
{
L2=1;
delay(1000);
L2=0;
}
void flash3()
{
L3=1;
delay(1000);
L3=0;
}
void flash4()
{
L4=1;
delay(1000);
L4=0;
}
void flash5()
{
L5=1;
delay(1000);
L5=0;
}
void flash6()
{
L6=1;
delay(1000);
L6=0;
}
void flash7()
{
L7=1;
delay(1000);
L7=0;
}
void flash8()
{
L8=1;
delay(1000);
L8=0;
}
//实现流水灯功能
void main (void)
{
while(1)
{
flash1();
flash2();
flash3();
flash4();
flash5();
flash6();
flash7();
flash8();
flash8();
flash7();
flash6();
flash5();
flash4();
flash3();
flash2();
flash1();
}
}