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 单片机 | AT89C51 | 1 |
| 发光二极管 | LED-RED | 1 |
| 电阻 | RES | 1(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 工程
Project → New uVision Project,选择芯片 AT89C51(或 AT89C52)- 新建
main.c源文件并加入工程 - 勾选
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); | 程序驻留,防止跑飞 |
仿真运行
- Proteus 中双击单片机,加载
工程名.hex - 点击 ▶ 运行
- 观察 LED 是否点亮(红色高亮表示点亮)
扩展思考
- 如何点亮多颗 LED? 修改 P1 端口多位:
P1 = 0xFE;(点亮 P1.0,其余熄灭) - 如何让 LED 闪烁? 需要用到延时函数(见 1.3 流水灯实验)
- 为什么是低电平点亮? 51 单片机 P1 口准双向口,灌电流能力强于拉电流,习惯用低电平驱动
常见问题
Q1:LED 不亮?
- 检查 HEX 是否加载成功
- 检查 LED 方向(长脚为正极接 VCC 侧)
- 检查限流电阻阻值(太大会太暗)
Q2:编译报错 unknown identifier 'P1'?
- 检查是否包含
#include <reg51.h> - 检查芯片型号是否选对
实验任务
- 在 Proteus 中绘制上述电路,仿真点亮 1 颗 LED
- 修改程序点亮 P1 口的 4 颗 LED
考核点 / 验收标准
| 考核项 | 验收标准 | 分值 |
|---|---|---|
| 电路设计 | Proteus 电路绘制正确(LED + 限流电阻 + 单片机) | 25 |
| 程序编写 | 能正确写出 LED 控制程序(sbit 定义 + 端口输出) | 25 |
| 仿真结果 | LED 正确点亮 | 25 |
| 扩展能力 | 能修改程序点亮多颗 LED,并解释原理 | 25 |
实操要求:现场修改代码,将点亮 1 颗 LED 改为点亮 4 颗,仿真验证。