一、前言
本学期学校开展单片机课程,为了方便复习,将每节课的实验以博客的形式进行记录。
二、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 门电路或其他负载。
本次项目是使用 AT89C51 的 P0 端口来实现 LED 闪烁,由于 P0 口是一个8位漏极开路的双向 I/O 口,也就是说 P0 口无法输出高电平,所以我们要实现 LED 闪烁需要接一个上拉电阻。
三、防真
我使用 Proteus7.8sp2 进行仿真。
1、选择元器件
通过以下操作可以打开元器件选择窗口。
选择单片机,点击 Microprocessor ICs —> AT89C51,然后点击 OK。左键点击原理图编辑区,即可放置元器件。
选择 LED 灯,点击 Optoelectronics —> LED (颜色任意)。
选择电阻,点击 Resistors —> 0.3W Metal Film —> 300R。
选择电源和接地。
2、摆放模拟电路
四、程序
我使用 Keil 进行编程。
1、创建项目
选择单片机芯片,Atmel —> AT89C51。
点击 ok 后提示是否生成启动代码,我们不需要。
工程创建完成后,如下:
2、创建源代码文件
首先创建一个空文件,然后 ctrl + s 进行保存,文件命名为 main.c,保存到任意位置都可以。
将刚刚创建的文件添加到项目中。
、
添加完成后,如下:
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);
}
}
点击该按钮对代码进行编译,如果有错控制台会进行相应的提示。
五、Proteus 和 Keil 结合
1、生成 HEX 文件
代码调试成功后,生成 HEX 文件,生成的位置为源代码的同级目录。
2、导入 HEX 文件
在单片机中导入 HEX 文件,右击单片机出现以下界面。
选择将才生成的 HEX 文件。
3、运行
点击 Proteus 左下角的运行按钮,即可看到 LED 灯闪烁,项目完成。
标题:实验一:LED 闪烁 —— AT89C51
作者:Yi-Xing
地址:http://zyxwmj.top/articles/2020/09/11/1599815151872.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!