Arduino + Proteus 仿真(二)

经过上一篇文章的设置之后(如果还没进行设置的,请看上一篇文章进行设置)这一篇文章就进行实际的操作,使用两款软件来进行仿真。

本次的实验是使用 Arduino UNO 开发板上的 ATmega328p 芯片,以及一个 IO 口拓展芯片来驱动 LCD1602 显示。

首先介绍使用到的这些器件:

  • ATmega328p:这个就是单片机,作为电路中的主控芯片
  • PCF8574:一个 IO 口拓展芯片,使用 IIC 控制,有八个通用端口和一个中断口,使用这个芯片可以将原本八个端口控制缩小到两个端口控制(不算 VCC 和 GND),具体使用方法可以查看官方文档
  • LCD1602:这是一个液晶屏,买的时候都会带有控制芯片,除非你是只买显示屏的,要控制这个液晶屏显示要对控制芯片发送指令,这个芯片分辨率是 16x2,每一位可以显示一个 ASCII 码

之后直接编写单片机的控制代码,代码的作用看注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2); // 参数:IIC地址,显示屏宽、高

void setup()
{
lcd.init(); // 初始化 LCD
lcd.backlight(); // 打开 LCD 背光
lcd.home(); // 将 LCD 光标移动到首位
lcd.print("LCD1602 IIC TEST"); // 显示字符
}

void loop()
{

}

然后贴出 Proteus 的仿真电路图


画好电路图之后要给单片机写入程序,在 Proteus 电路图中双击 ATmega328p 芯片,会看到有很多的设置项,其中要设置 Program File ,填入你的程序编译后的 hex 文件路径;然后设置 CKSEL Fuses,点击右边的下拉列表,选中 (1111)Ext. Crystal 8.0-MHz 选项,最后在 Advanced Properties 设置项里面的输入框填入 16MHz,然后就可以运行仿真查看结果了。

仿真效果

图中每个引脚旁边的有色小方块代表了该引脚的电平状态,红色是高电平,蓝色是低电平,灰色是高阻态。