🎋1. 基操
🌿1.1 Proteus概况
- 英国Lab Center Electronics公司出版的EDA工具软件。
- 不仅有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
- 是比较好的仿真单片机及外围器件的工具。
- 从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
- 世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。
- 其处理器模型支持8051、AVR、ARM、8086等,并持续增加其他系列处理器模型。
- 在编译方面,它支持IAR、Keil和MATLAB等多种编译器。
🌿1.2 相关书籍
- 范海绍,李方园等编著. 零起点学Proteus单片机仿真技术[M]. 北京:机械工业出版社, 2012.02.
- 徐亮编. 高等职业教育精品工程系列教材 STM32单片机开发实例 基于Proteus虚拟仿真与HAL\LL库[M]. 北京:电子工业出版社, 2021.01.
- 符强. 嵌入式实验与实践教程 基于STM32与Proteus[M]. 西安:西安电子科学技术大学出版社, 2021.12.
- 赵广元编著. Proteus辅助的单片机原理实践基础设计课程设计和毕业设计[M]. 北京航空航天大学出版社, 2013.09.
🌿1.3 背景设置
🍃1.3.1 颜色修改
Template–Set Design Defaluts
Paper Colour(背景色)/Grid Colour(网格颜色)
网格线修改
Toggle grid
有三种:无、格子线、点
🍃1.3.2 元器件查找
直接输入元器件名称查找
右键–Place–Component–From Libraries
在关键字(Keywords)文本框中直接输入你想查找的元器件名称,大小写无关,若该元器件存在,就会在中间的结果(Results)框中出现,然后用鼠标左键双击出现在框中元器件的名称,将该元器件放入“元器件列表窗口”。
🍃1.3.3 器件清单
Proteus关键词 | 元器件 |
---|---|
AT89C51 | AT89C51单片机 |
RES | 电阻 |
LED-YELLOW | 黄色发光二极管 |
CRYSTAL | 晶振 |
CAP | 电容【无极性】 |
CAP-POL | 电容【有极性】 |
7SEG-MPX4-CC | 4位共阴极数码管 |
COMPIM | 虚拟串口元件 |
BUTTON | 按键 |
74LS47 | BCD-7段数码管译码器 |
KEYPAD-SMALLCALC | 小型计算器键盘 |
RESPACK-8 | 排阻 |
MOTOR | 电机 |
🍃1.3.4 器件旋转
选中器件–右键
Rotate Clockwise:顺时针旋转
Rotate Anti-Clockwise:逆时针旋转
Rotate 180 degrees:旋转180°
X-Mirror:水平对折
Y-Mirror:竖直对折
🎋2. 51单片机Proteus仿真
🌿2.1 点亮一个灯
🍃2.1.1 器件清单
Proteus关键词 | 元器件 |
---|---|
AT89C51 | AT89C51单片机 |
RES | 电阻 |
LED-YELLOW | 黄色发光二极管 |
🍃2.1.2 电路
🍃2.1.3 代码
#include <reg51.h> //单片机头文件
sbit LED=P0^0; //定义LED为端口P0^0
void main() //主程序
{
while(1) //无限循环
{
LED=0; //P0^0输出低电平,发光二极管点亮
//LED=1; //P0^0输出高电平,发光二极管关闭
}
}
🌿2.2 流水灯
🍃2.2.1 器件清单
Proteus关键词 | 元器件 |
---|---|
AT89C51 | AT89C51单片机 |
RES | 电阻 |
LED-YELLOW | 黄色发光二极管 |
🍃2.2.2 电路
1、画一条总线
2、将线路连接到总线
按住ctrl划线,画斜线连接线需要把“自动连接器”按钮放开。
3、将相应节点一一连接
Tool–Property Assignment Tool
🍃2.2.3 代码
#include <reg51.h> //单片机头文件
void Delay(); //延时子程序说明
void main() //主程序
{
unsigned char i;
unsigned char temp;
P0=0xff; //二进制11111111
while(1) //无限循环
{
temp=0x80; //二进制10000000
for(i=0;i<8;i++)
{
P0=~temp; //取反
Delay(); //延时
temp=temp>>1 //右移一位
}
}
}
/*延时子程序使LED在变化时有一个停留时间,通过一个外循环和内循环的空操作,*
*共循环255×255次 */
void Delay()
{
unsigned char i,j;
for(i=0;i<255;i++) //外循环255次
for(j=0;j<255;j++); //内循环255次
}
时钟频率 Clock Frequency
12MHz
🌿2.3 一位数码管计数电路
🍃2.3.1 器件清单
Proteus关键词 | 元器件 |
---|---|
AT89C51 | AT89C51单片机 |
RES | 电阻 |
BUTTON | 按键 |
7SEG-COM-AN-GRN | 数码管(绿色) |
🍃2.3.2 电路
自动:
手动:
🍃2.3.3 代码
一位数码管自动计数代码
#include <reg51.h>
unsigned char code Tab[]={0xC0,0xF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//0-9,共阳数码管码段表
void Delay()//简单延时子程序
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void main()//主程序
{
unsigned char i=1;
while(1)
{
P0=Tab[i];//送相应码段表值
Delay();
i++;
if(i>9) i=0;
}
}
一位数码管手动计数代码
#include <reg51.h>
unsigned char code Tab[]={0xC0,0xF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//0-9,共阳数码管码段表
unsigned char p=1;
void Delay()//简单延时子程序
{
unsigned char i;
for(i=300;i>0;i--);
}
void main()//主程序
{
EA=1;//开总允许开关
IT0=1;EX0=1;//开外部中断0和外部中断0允许分开关
IT1=1;EX1=1;//开外部中断1和外部中断1允许分开关
while(1)
{
P0=Tab[p]; //输出码段表
Delay();
}
}
void intersvr0(void) interrupt 0 using 1 //外部中断0处理子程序
{
p++;
if(p>9) p=9;
}
void intersvr1(void) interrupt 2 using 1 //外部中断1处理子程序
{
p--;
if(p<1) p=1;
}
🌿2.4 四位数码管计时器
🍃2.4.1 器件清单
Proteus关键词 | 元器件 |
---|---|
AT89C51 | AT89C51单片机 |
RES | 电阻 |
7SEG-MPX4-CA | 4位数码管 |
🍃2.4.2 电路
🍃2.4.3 代码
0~500自动计数,循环往复
#include <reg51.h>
unsigned char code Tab[]={0xC0,0xF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//0-9,共阳数码管码段表
unsigned char Dat[]={0,0,0,0};
unsigned char tmp,i,j;
unsigned char p=0
void Delay()//简单延时子程序
{
unsigned char i;
for(i=0;i<n;i++);
}
void main()//主程序
{
while(1)
{
p++;
if(p>500) p=0;
Dat[0]=p/100; //百位
Dat[1]=p%100/10;//十位
Dat[2]=p%10;//个位
tmp=0x01;
for(i=0;i<3;i++)
{
P2=tmp;
P0=Tab[Dat[i]];
tmp=tmp<<1;
Delay(250);
}
for(i=0;i<150;i++)
for(j=0;j<100;j++)
Delay(60000);
}
}
🎋3. 遇到的一些errors
🌿3.1 No power supply specified for net VDDA…
No power supply specified for net VDDA in Power Rail Configuration.
解决方法:
Design->Powe Rail Configuration
将VDDA、VSSA移入右边,并取消勾选“use default power rail connections”