Skip to content

1.2 第一个实验:点亮 LED ​

学习目标:掌握 Proteus 原理图绘制、Keil 工程创建与程序烧录,实现第一个单片机程序——点亮一颗 LED。

实验原理 ​

LED 与限流电阻 ​

LED(发光二极管)正向导通后发光。但 LED 工作电流通常为 5~20mA,若直接接电源会因电流过大烧毁,因此必须串联限流电阻。

限流电阻计算公式:

R = (VCC - V_LED) / I_LED
  • VCC = 5V(51 单片机供电)
  • V_LED ≈ 2V(红色 LED 导通压降)
  • I_LED = 10mA(典型工作电流)
R = (5 - 2) / 0.01 = 300Ω  →  常用 330Ω 或 470Ω

P1 端口输出 ​

AT89C51 的 P1 端口为 8 位准双向 I/O 口。输出高电平(1)时 LED 熄灭,输出低电平(0)时 LED 点亮(电流灌入单片机)——这就是低电平点亮的接法。

电路设计(Proteus) ​

所需元件 ​

元件关键字数量
AT89C51 单片机AT89C511
发光二极管LED-RED1
电阻RES1(330Ω)
电源/地POWER / GROUND各 1

连接方式 ​

AT89C51                     LED 电路
┌──────┐
│ P1.0 ├──────┬───────[LED-RED]─────┐
│      │      │                     │
│      │    [R1 330Ω]              VCC(+5V)
│      │      │
│      │    GND
│ XTAL1├──────┐
│      │   [C1 30pF]
│ XTAL2├──────┤
│      │   [C2 30pF]
│      │   [Y1 12MHz]
│      └──────┘
│ RST  ├──[R 10K]──GND   (复位电路)
└──────┘

说明:Proteus 中 AT89C51 的 XTAL1/XTAL2 已内置晶振模型,可简化不画晶振;但教学中建议画出晶振电路以理解时钟来源。

程序设计(Keil) ​

创建 Keil 工程 ​

  1. Project → New uVision Project,选择芯片 AT89C51(或 AT89C52)
  2. 新建 main.c 源文件并加入工程
  3. 勾选 Options for Target → Output → Create HEX File

源代码 ​

c
/****************************************************
 * 实验名称:点亮一颗 LED
 * 功能:P1.0 输出低电平,点亮外接 LED
 ****************************************************/
#include <reg51.h>        // 包含 51 单片机寄存器定义

sbit LED = P1^0;          // 定义 P1.0 为 LED 控制引脚

void main(void)
{
    LED = 0;              // P1.0 输出低电平,LED 点亮
    while (1)             // 死循环,保持状态
    {
        ;                 // 空语句,等待
    }
}

代码解析 ​

语句作用
#include <reg51.h>引入标准 51 寄存器头文件,定义 P1 等端口
sbit LED = P1^0;位定义,把 P1 的第 0 位命名为 LED
LED = 0;输出低电平(点亮)
while(1);程序驻留,防止跑飞

仿真运行 ​

  1. Proteus 中双击单片机,加载 工程名.hex
  2. 点击 ▶ 运行
  3. 观察 LED 是否点亮(红色高亮表示点亮)

扩展思考 ​

  1. 如何点亮多颗 LED? 修改 P1 端口多位:P1 = 0xFE;(点亮 P1.0,其余熄灭)
  2. 如何让 LED 闪烁? 需要用到延时函数(见 1.3 流水灯实验)
  3. 为什么是低电平点亮? 51 单片机 P1 口准双向口,灌电流能力强于拉电流,习惯用低电平驱动

常见问题 ​

Q1:LED 不亮?

  • 检查 HEX 是否加载成功
  • 检查 LED 方向(长脚为正极接 VCC 侧)
  • 检查限流电阻阻值(太大会太暗)

Q2:编译报错 unknown identifier 'P1'?

  • 检查是否包含 #include <reg51.h>
  • 检查芯片型号是否选对

实验任务 ​

  1. 在 Proteus 中绘制上述电路,仿真点亮 1 颗 LED
  2. 修改程序点亮 P1 口的 4 颗 LED

考核点 / 验收标准 ​

考核项验收标准分值
电路设计Proteus 电路绘制正确(LED + 限流电阻 + 单片机)25
程序编写能正确写出 LED 控制程序(sbit 定义 + 端口输出)25
仿真结果LED 正确点亮25
扩展能力能修改程序点亮多颗 LED,并解释原理25

实操要求:现场修改代码,将点亮 1 颗 LED 改为点亮 4 颗,仿真验证。

aioteer · 物联网专业课程群

💬AI 伴学配置