文章目录
- [51单片机入门:新建第一个工程,点亮一个LED(Keil C51 + STC-ISP 全流程)](#51单片机入门:新建第一个工程,点亮一个LED(Keil C51 + STC-ISP 全流程))
-
- 前言
- 一、开发环境准备
-
- [1.1 所需软件](#1.1 所需软件)
- [1.2 硬件清单](#1.2 硬件清单)
- [1.3 驱动安装](#1.3 驱动安装)
- [二、新建第一个 Keil 工程(图文步骤)](#二、新建第一个 Keil 工程(图文步骤))
-
- [2.1 新建工程](#2.1 新建工程)
- [2.2 新建源文件](#2.2 新建源文件)
- [2.3 工程目标设置(魔术棒)](#2.3 工程目标设置(魔术棒))
- [三、点亮 LED 的原理](#三、点亮 LED 的原理)
-
- [3.1 LED 是怎么被点亮的](#3.1 LED 是怎么被点亮的)
- [3.2 用寄存器控制引脚](#3.2 用寄存器控制引脚)
- 四、示例代码(可直接复制)
-
- [4.1 点亮一个 LED(最小程序)](#4.1 点亮一个 LED(最小程序))
- [4.2 LED 闪烁(延时版)](#4.2 LED 闪烁(延时版))
- [4.3 流水灯(进阶练习)](#4.3 流水灯(进阶练习))
- [4.4 STM32 版本对照(标准库,供对比学习)](#4.4 STM32 版本对照(标准库,供对比学习))
- [五、编译生成 HEX](#五、编译生成 HEX)
- [六、STC-ISP 下载程序](#六、STC-ISP 下载程序)
- 七、常见问题排查
- 八、总结与下一步
51单片机入门:新建第一个工程,点亮一个LED(Keil C51 + STC-ISP 全流程)
前言
本文参考了江协科技(B站)《51单片机入门教程-2020版》第 2-1 节「点亮一个LED」的内容,并整理了一份从零开始、面向新手的完整流程:从安装开发环境、新建 Keil 工程、编写第一行代码,到生成 HEX 文件并下载进单片机,最终成功点亮 LED。
单片机的 "Hello World" 就是点亮一个 LED,别看它简单,这一步走通了,你就掌握了「写代码 → 编译 → 下载 → 看到现象」的完整闭环,后面的按键、数码管、定时器都是在这个骨架上叠加的。
环境:Windows + Keil C51(uVision)+ STC-ISP + STC89C52RC 开发板(普中/其他兼容板均可)
一、开发环境准备
1.1 所需软件
| 软件 | 作用 | 说明 |
|---|---|---|
| Keil C51 | 编写、编译代码 | 生成 .hex 可执行文件 |
| STC-ISP | 程序下载 | 把 hex 烧录进单片机,同时自带驱动安装、延时计算等工具 |
1.2 硬件清单
- 51 开发板(如 STC89C52RC,板载 LED)
- USB 转串口数据线(CH340 驱动)
- 电脑一台
1.3 驱动安装
用数据线连接开发板后,打开 设备管理器 → 端口(COM 和 LPT) ,如果看到 USB-SERIAL CH340 (COMx) 字样,说明驱动正常;如果没有,去 STC-ISP 的 软件驱动 选项卡里安装 CH340 驱动即可。
二、新建第一个 Keil 工程(图文步骤)
2.1 新建工程
- 打开 Keil,菜单栏 Project → New μVision Project...
- 选择一个英文路径的文件夹(路径不要有中文和空格 ),给工程起名,例如
LED - 弹出芯片选择窗口,选择 Atmel → AT89C52(或直接搜 STC89C52 对应的兼容型号),点 OK
- 弹出 "Copy 'STARTUP.A51'..." 提示时,新手可以先点 否(不添加启动文件也能跑这个小程序)
2.2 新建源文件
- File → New,出现一个空白文本框
- File → Save As ,保存为
main.c(注意后缀必须是.c) - 在左侧 Project 窗口,右键 Source Group 1 → Add Existing Files to Group... ,把刚才的
main.c加进来
2.3 工程目标设置(魔术棒)
点击工具栏的 魔术棒(Options for Target):
- Target 选项卡 :晶振填
12.0(按自己板子实际频率) - Output 选项卡 :勾选 Create HEX File(这一步非常关键,不勾就没有可下载的文件!)
三、点亮 LED 的原理
3.1 LED 是怎么被点亮的
LED(发光二极管)导通条件:正向电压 ≈ 2V 左右,工作电流几 mA。所以电路里必须串一个限流电阻(几百 Ω ~ 1kΩ),否则会烧坏。
单片机引脚的驱动能力有限,一般采用灌电流方式:单片机引脚输出低电平 时 LED 亮(共阳接法),输出高电平时灭。
3.2 用寄存器控制引脚
51 单片机是 4 组 8 位并口:P0、P1、P2、P3,共 32 个 IO 口。在 C 语言里:
c
P2 = 0xFE; // 1111 1110,P2.0 输出低,其余输出高
也可以用 sbit 定义单个引脚,操作更直观:
c
sbit LED = P2^0; // 定义 P2.0 为 LED
LED = 0; // 输出低电平,点亮
LED = 1; // 输出高电平,熄灭
四、示例代码(可直接复制)
4.1 点亮一个 LED(最小程序)
以板载 LED 接在 P2.0 为例(普中开发板常见,具体看自己板子的原理图):
c
#include <REGX52.H> // 51单片机寄存器定义头文件
void main()
{
P2_0 = 0; // P2.0 输出低电平,点亮 LED(共阳接法)
while(1)
{
// 程序停在这里,防止 main 执行完后跑飞
}
}
注意:
REGX52.H中已经把P2_0这类位定义写好了,直接用即可;如果你的头文件是REG52.H,则需要自己用sbit LED = P2^0;定义。低电平亮还是高电平亮,取决于板子是共阳还是共阴接法,如果不亮,把0改成1试试。
4.2 LED 闪烁(延时版)
c
#include <REGX52.H>
#include <INTRINS.H> // 使用 _nop_() 需要
void Delay500ms() // @12.000MHz,由 STC-ISP 延时计算器生成
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
while (--k);
} while (--j);
}
void main()
{
while(1)
{
P2_0 = 0; // 亮
Delay500ms();
P2_0 = 1; // 灭
Delay500ms();
}
}
4.3 流水灯(进阶练习)
c
#include <REGX52.H>
void Delay500ms(void)
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
while (--k);
} while (--j);
}
void main()
{
unsigned char i;
while(1)
{
for(i = 0; i < 8; i++)
{
P2 = ~(0x01 << i); // 依次点亮 P2.0 ~ P2.7
Delay500ms();
}
}
}
4.4 STM32 版本对照(标准库,供对比学习)
c
#include "stm32f10x.h"
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
/* 使能 GPIOB 时钟(STM32 必须先开时钟!) */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 输出低电平,点亮
Delay(0xFFFFF);
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 输出高电平,熄灭
Delay(0xFFFFF);
}
}
对比一下:51 上电即用 IO;STM32 要先开时钟 、再配置模式,这是两者的核心区别之一。
五、编译生成 HEX
-
点击 Build(F7 / 魔术棒旁边的按钮)
-
下方 Build Output 窗口出现:
".\Objects\LED.hex" - 0 Error(s), 0 Warning(s).
-
到工程目录的
Objects文件夹里就能找到LED.hex。如果找不到 hex,回去检查 2.3 节的 Create HEX File 有没有勾选。
六、STC-ISP 下载程序
- 数据线连接开发板,打开 STC-ISP
- 单片机型号:选择 STC89C52RC(和芯片丝印一致)
- 串口号:选择设备管理器中看到的 COM 口(一般自动识别)
- 打开程序文件 :选中
Objects\LED.hex - 点击 下载/编程 ,然后按一下板子上的复位键(或重新上电)开始烧录
- 看到
操作成功字样,观察 LED ------ 点亮了!
STC 单片机下载的本质:冷启动时先检查串口有没有下载指令,有就进入 ISP 模式接收代码。所以点"下载"之后必须给板子重新上电/复位,这是新手最容易漏掉的一步。
七、常见问题排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 找不到串口 | CH340 驱动未装 | STC-ISP → 软件驱动 → 安装 CH340 驱动 |
| 下载失败 | 没复位、串口选错 | 点下载后按复位键;确认 COM 号 |
| LED 不亮 | 极性/引脚接错 | 换成 P2_0 = 1; 试试;查原理图确认引脚 |
| 编译报错 | 后缀没存成 .c | 保存为 main.c 而非 .txt |
| 没有生成 hex | Output 选项没勾 | 魔术棒 → Output → Create HEX File |
八、总结与下一步
本文完成了单片机学习的第一个闭环:新建工程 → 写代码 → 编译 → 生成 HEX → 下载 → 看到现象。核心只有一行代码:
c
P2_0 = 0; // 一行代码点亮一个世界
下一步建议:
- 让 LED 按不同频率闪烁(改延时参数)
- 学习 2-2 LED 闪烁 & 2-3 LED 花式流水灯
- 掌握 STC-ISP 的延时计算器,理解软件延时原理
- 后续可进阶按键检测、数码管、定时器中断
参考资料
- 江协科技《51单片机入门教程-2020版》,B 站视频:BV1Mb411e7re(2-1 点亮一个LED)
- CSDN 参考博文:《单片机:新建第一个工程,点亮LED》
如果本文对你有帮助,欢迎点赞收藏,评论区交流~