一、前言

  本学期学校开展单片机课程,为了方便复习,将每节课的实验以博客的形式进行记录。

二、AT89C51

  我们使用的单片机是 AT89C51,AT89 系列单片机有 P0(P0.0~P0.7)、P1(P1.0~P1.7)、P2 (P2.0~P2.7)、P3(P3.0~P3.7) 4个8 位双向输入/输出端口。在无片外扩展存储器的系统中,这 4 个端口的每一位都可以作为双向通用 I/O 端口使用。在具有片外扩展存储器的系统中,P2 口作为高 8 位地址线,P0 口分时作为低8位地址线和双向数据总线。

  P0 口分别占用 32~39 脚,依次命名为 P0.0~ P0.7 与其他 I/O 接口不同,P0 口是漏极开路的双向 I/O 接口,P0 口中任意一位电路原理如下图所示,其中端口 P0.X 的输出与内部对应的寄存器 P0.X 状态一致。单片机在访问片外存储器时,P0 口分时作为低 8 位地址线和 8 位双向数据总线用,此时不需外接上拉电阻;如果将 P0 口作为通用的 I/O 接口使用,则要求外接上拉电阻或排阳,每位以吸收电流的方式驱动 8 个 LSTTL 门电路或其他负载。

P0口结构图

  本次项目是使用 AT89C51 的 P0 端口来实现 LED 闪烁,由于 P0 口是一个8位漏极开路的双向 I/O 口,也就是说 P0 口无法输出高电平,所以我们要实现 LED 闪烁需要接一个上拉电阻。

三、防真

  我使用 Proteus7.8sp2 进行仿真。

1、选择元器件

  通过以下操作可以打开元器件选择窗口。

image.png

  选择单片机,点击 Microprocessor ICs —> AT89C51,然后点击 OK。左键点击原理图编辑区,即可放置元器件。

image.png

  选择 LED 灯,点击 Optoelectronics —> LED (颜色任意)。

image.png

  选择电阻,点击 Resistors —> 0.3W Metal Film —> 300R。

image.png

  选择电源和接地。

image.png

2、摆放模拟电路

image.png

四、程序

  我使用 Keil 进行编程。

1、创建项目

image.png

  选择单片机芯片,Atmel —> AT89C51。

image.png

image.png

  点击 ok 后提示是否生成启动代码,我们不需要。

image.png

  工程创建完成后,如下:

image.png

2、创建源代码文件

  首先创建一个空文件,然后 ctrl + s 进行保存,文件命名为 main.c,保存到任意位置都可以。

image.png

  将刚刚创建的文件添加到项目中。

image.png

  添加完成后,如下:

image.png

3、编写代码

  在 main.c 文件中编写以下代码。

// 头文件,51单片机功能的定义
#include<reg51.h>
// 位声明,P0.0在Keil中写成p0^0,LED接P0.0口,位P0.0可寻址
sbit LED=P0^0;
// 延时函数
void delay(unsigned int x){
	while(x--);
}

void main(void){
	while(1){
		// 值为1时为高电平,这时LED亮
		LED = 1;
		// LED 闪烁的间隔时间
		delay(500000);
		LED = 0;
		delay(500000);
	}
}

  点击该按钮对代码进行编译,如果有错控制台会进行相应的提示。

image-2ab5da5c.png

五、Proteus 和 Keil 结合

1、生成 HEX 文件

  代码调试成功后,生成 HEX 文件,生成的位置为源代码的同级目录。

image.png

image.png

2、导入 HEX 文件

  在单片机中导入 HEX 文件,右击单片机出现以下界面。

image.png

  选择将才生成的 HEX 文件。

image.png

3、运行

  点击 Proteus 左下角的运行按钮,即可看到 LED 灯闪烁,项目完成。

image.png


标题:实验一:LED 闪烁 —— AT89C51
作者:Yi-Xing
地址:http://zyxwmj.top/articles/2020/09/11/1599815151872.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!