手把手教你用 Keil + AiCube-ISP 给 51 单片机烧录程序:从新建工程到下载运行

很多刚接触 51 单片机的朋友卡在第一步:代码写好了,怎么"烧"进单片机?本文从零开始,用 STC89C52(普中-7 开发板)完整走一遍写代码 → 编译出 HEX → 烧录运行的全流程,并补充 STC8/STC32 等新系列芯片的差异说明。全文步骤均来自实际烧录运行的项目,跟着做一定能点亮你的第一颗灯。

一、先说清楚:烧录到底在干什么

51 单片机(比如 STC89C52)内部有一块 Flash 存储芯片,程序就存在里面。烧录的本质就是把编译好的程序文件通过串口写进这块 Flash,断电不丢失。

整个流程分三段:

Keil 写代码(C 语言)
    ↓ 编译(Compile / Build)
生成 .hex 文件(单片机认识的"机器码"格式)
    ↓ 下载(烧录)
AiCube-ISP 通过串口把 .hex 写进单片机 Flash
    ↓ 上电运行

为什么编译出来的不是 .exe 而是 .hex? .hex 是 Intel HEX 文本格式,每行有地址+数据+校验,烧录器按地址把数据写入 Flash。它比 .bin 多了地址信息,方便分段写入。

二、硬件准备

方案一:开发板直连(推荐,零门槛)

我用的普中-7 开发板自带 USB 转串口芯片(CH340),一根 USB 线就能烧录,不需要任何额外模块:

器件说明
普中-7 开发板(STC89C52RC)板载 CH340 + USB 口
USB 数据线连电脑和开发板

开发板USB连接示意图

方案二:最小系统板 + USB-TTL 模块

如果你用的是裸的最小系统板,需要自己接线:

USB-TTL 模块引脚接到单片机
TXDRXD(P3.0)
RXDTXD(P3.1)
GNDGND(必须共地)
5V(可选)VCC(如果模块能供电)

USB-TTL接线图

最容易犯的错:TXD 接 TXD、RXD 接 RXD(交叉才是对的),或者忘记共 GND。烧录失败先查这两样。

验证串口是否识别

插上 USB 线后,右键"此电脑 → 管理 → 设备管理器 → 端口(COM 和 LPT)",应该能看到:

USB-SERIAL CH340 (COM15)

{D2DC7D25-4E48-4872-85D0-09C2AB3F17DF}.png

如果显示黄色感叹号,说明 CH340 驱动没装。驱动在开发板资料包的"5--开发工具 → 2-开发板CH340驱动"里,双击安装后重新插线。

三、软件安装

需要两个软件:Keil C51(写代码+编译)和 AiCube-ISP(STC 官方烧录软件,就是老 STC-ISP 的新版本)。先看清单,心里有个数:

软件干什么用从哪下装完怎么算"能用"
Keil C51写代码、编译出 .hex官网 / 普中资料包能打开,注册后 License 显示日期
AiCube-ISP烧录(把 .hex 写进单片机)官网 stcai.com双击能打开主界面

本节按下载 → 安装 → 验证的顺序来,每装完一个都确认"顺利使用"了再进下一步,别堆到最后一起装。

3.1 下载并安装 Keil C51

下载(三选一):

安装(关键注意第 3 点):

  1. 双击 C51V961.exe,点 Next;
  2. 勾选 I agree to all the terms...,点 Next;
  3. 改安装路径:不要有中文、不要有空格,比如 D:\Keil_v5(建议别装 C 盘系统盘);
  4. 姓名/公司随便填,一路 Next 到 Finish。

验证:桌面出现 "Keil uVision5" 图标,双击能打开主界面(灰白色界面,菜单栏有 Project/File 等)。

3.2 注册 Keil(keygen 激活)

不注册的 Keil 是评估版,代码超过 2KB 就编译失败,报:

*** RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT

注册步骤(注册机资源自行搜索"keil keygen 2032",仅供学习,有条件请支持正版):

  1. 右键"以管理员身份运行" Keil uVision5;
  2. 菜单 File → License Management...,复制 CID 一栏的内容;
  3. 以管理员身份运行 keygen,把 CID 粘贴进去,Target 选 C51(很重要!选错 ARM 就白干了),点 Generate;
  4. 把生成的 License 复制回 Keil 的 New License ID Code 框,点 Add LIC;
  5. 看到 LIC Added Sucessfully 和截止时间(如 2032)就成功了。

注册机可能被杀毒软件误报,属正常现象;实在不行可以先临时关闭实时防护,注册完再开。

验证:License Management 窗口里能看到 LIC Added Sucessfully,有效期到 2032 年(黑字说明有效,红字说明没成功)。

3.3 下载并安装 AiCube-ISP

AiCube-ISP 是 STC 官方(深圳国芯)推出的下载编程软件,老烧友熟悉的 STC-ISP 已经并入其中(普中资料包里那个"STC-ISP(不推荐使用)"就是被它取代的)。

下载:官网工具软件页 https://www.stcai.com/gjrj,当前最新版 v6.97(2026-08-10 更新),下载的是 zip 压缩包。

{76486A9A-6153-44C6-830A-7DE117FD6E03}.png

安装(绿色免安装,两步):

  1. 解压到英文路径,比如 D:\AiCube-ISP(别放中文路径,避免个别电脑出怪问题);
  2. 双击文件夹里的 AiCube-ISP.exe 运行。

验证:软件主界面弹出(左侧是芯片型号/串口选择区,右侧是程序文件区),并且电脑没插开发板时也不报错(报错一般是解压不完整,重新解压)。右键 exe → 发送到 → 桌面快捷方式,以后每次烧录都从这里进。

3.4 装完软件第一件事:把 STC 型号和头文件添加进 Keil(必做!)

Keil 默认不认识 STC 芯片——不添加的话,新建工程时在芯片列表里搜不到 STC89C52RC,只能退而求其次选 Atmel 的 AT89C52(能用但不爽,头文件对不上、寄存器定义不全),玩 STC8/STC32 的朋友更是直接没法选型号。

所以顺序必须是:Keil 装好 + AiCube-ISP 装好 → 先做这一步 → 再新建工程。操作:

  1. 打开 AiCube-ISP,切到 "Keil 仿真设置" 标签页;
  2. 点 "添加型号和头文件到 Keil 中";
  3. 弹出窗口选中你的 Keil 安装目录(比如 D:\Keil_v5,目录下必须能看到 C51 和 UVx 文件夹),确定;
  4. 提示"STC MCU 型号添加成功"。

1-uriM.png

验证:打开 Keil → Project → New uVision Project...,先选择stc mcu datebase2-hkJB.png在芯片选择框的搜索栏输入 STC,能看到 STC89C52RC、STC8H8K64U 等一长串 STC 型号——说明添加成功,这一步从此一劳永逸。头文件 STC89C5xRC.H 也会自动装好,以后写代码直接用 STC 官方头文件。

3.png

如果点完"添加型号和头文件"没反应,先确认 Keil 是关闭状态,再确认选中的目录下真的有 C51、UVx 两个文件夹(选到 Keil_v5 本身就行,别选到 C51 里面去)。

3.5 补充:Keil C251(STC32 系列才需要)

先理清关系,别装错:

芯片系列内核用的编译器
STC89、STC12、STC15、STC88051(8 位)Keil C51(就是上面装的)
STC32G / STC16F251(8/16 位增强)Keil C251

STC8 系列用本文的 C51 就行;只有玩 STC32 才需要装 C251。C251 的安装、注册流程和 C51 一模一样,唯一区别是 keygen 里 Target 选 C251。

四、在 Keil 里创建工程并编译出 HEX

4.1 新建工程

  1. 菜单 Project → New uVision Project...,起个名字(比如 led),选个英文路径保存;
  2. 芯片选择对话框的搜索栏里输入 STC,选 STC89C52RC(3.4 节添加过型号,这里才能直接搜到),确定;
  3. 弹出 "Copy STARTUP.A51 to project" 问你是否复制启动文件,点 Yes;
  4. 顶部file选new,命名 main.c,确定。
  5. 然后还需要在魔法棒旁边那里添加文件

{E15430D1-0233-4B0C-925E-1920C8C6D3AA}.png

万一没做 3.4 步(比如添加失败),这里只能选 Atmel → AT89C52 兜底——STC89C52 完全兼容 AT89C52 指令集,头文件用 reg52.h 也能跑,但 STC8/STC32 用户没有兜底方案,务必回去做 3.4。

4.2 勾选"生成 HEX 文件"(最容易漏的一步)

不勾这个,编译一万次也不会出 .hex!

  1. 点工具栏的"魔法棒"(Options for Target);
  2. 切到 Output 标签页;
  3. 勾选 Create HEX File;
  4. 点 OK。

{569448E2-644F-45FC-9A19-09116C317B67}.png

4.3 写点灯程序

把 main.c 里默认生成的代码删掉,粘入下面这个完整的 LED 闪烁程序:

#include <reg52.h>

sbit LED1 = P2^0;          /* 普中-7 板载 LED1 接 P2.0,低电平点亮 */
                            /* 其他板子看丝印调整引脚,正逻辑改 LED1 = 1 */

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 120; j++);
}

void main(void)
{
    while (1) {
        LED1 = 0;           /* 点亮 */
        delay_ms(500);      /* 延时约 500ms */
        LED1 = 1;           /* 熄灭 */
        delay_ms(500);
    }
}

4.4 编译

点工具栏 Build(或按 F7,或菜单 Project → Build Target)。编译输出窗口会显示类似下面的日志:

Build target 'Target 1'
compiling main.c...
linking...
Program Size: data=9.0 xdata=0 code=56
creating hex file from "led"...
"led" - 0 Error(s), 0 Warning(s).

看到 0 Error(s), 0 Warning(s) 和 creating hex file from "led" 就成功了。这是我自己真实项目的编译输出(时钟工程,代码量大些):

Build target 'Target 1'
compiling main.c...
linking...
Program Size: data=80.3 xdata=4 code=6794
creating hex file from "main"...
"main" - 0 Error(s), 0 Warning(s).

编译产物 .hex 在工程目录下的 Objects 文件夹里(老版本 Keil 直接和 .uvproj 同级)。

如果报 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT,回去看 3.2 节——没注册成功。

五、用 AiCube-ISP 烧录(重点:冷启动)

5.1 操作流程

  1. 打开 AiCube-ISP,界面左侧是芯片型号和串口区,右侧是程序文件区;
  2. 选择单片机型号:下拉框选 STC89C52RC(注意选对后缀,LE/RC/RD 选错会报错);
  3. 选择串口号:下拉框选设备管理器里看到的那个(如 COM);
  4. 打开程序文件:点"打开程序文件",选刚才编译出的 led.hex;
  5. 波特率一般用默认(115200 或 2400),11.0592MHz 晶振下 115200 没问题;
  6. 硬件选项可以先用默认,别乱动(排查表里"下载成功但程序不运行"会讲一个相关的坑)。

{36A28AF0-5FE0-4347-B438-265D29787006}.png

5.2 冷启动下载(STC 的独特机制,新手 90% 卡在这)

STC 单片机不会像 STM32 那样点一下按钮就下载。它的机制是:

单片机复位后前几百毫秒会监听串口,如果收到 ISP 下载命令就进入下载模式,否则正常运行用户程序。

所以正确顺序必须是:

  1. 点 AiCube-ISP 的 "下载/编程" 按钮,此时软件开始"等待目标单片机";
  2. 立刻给开发板断电再上电(拔 USB 线重插,或关电源开关再开);
  3. 单片机复位后收到下载命令 → 进度条开始走 → 100% → 提示"下载完成"。

{7B73DF70-A571-4BB2-840C-84B8980333CF}.png

成功提示大致是这样:

正在连接目标单片机 ...
连接成功,芯片型号: STC89C52RC
开始下载 ...
下载完成!

然后就能看到板上的 LED1 以 1Hz 闪烁了——你的第一个烧录程序跑起来了。

忘记冷启动是头号失败原因:点完"下载/编程"后必须重新上电一次。不少新手以为点按钮就够了,卡在"正在检测目标单片机"半天。

六、常见问题排查

现象原因解决办法
设备管理器里没有 COM 口 / 黄叹号CH340 驱动没装装驱动(见第二章"验证串口是否识别"),换一根能传数据的 USB 线(有些线只能充电)
一直"正在检测目标单片机"① 没冷启动 ② 线序错 ③ 波特率太高① 点完下载按钮立刻断电重上电 ② TXD/RXD 交叉、共 GND ③ 波特率降到 9600 或 2400 试试
"芯片型号错误"型号选错选对后缀(RC/RD/LE),或者点"检测MCU选项"自动识别
下载成功但程序不运行① 复位电路/晶振问题 ② 烧录选项把复位脚当 IO 用了 ③ EA 引脚没接高① 检查板子 ② 恢复默认硬件选项 ③ 普中-7 一般没问题,裸板检查 EA=1
Keil 报 RESTRICTED VERSION没注册成功回看 3.2 节,Target 一定要选 C51
编译成功但没有 .hex没勾 Create HEX File回看 4.2 节
烧录后上电程序丢失每次烧录都覆盖了正常现象,程序存在 Flash 里,断电不丢;若"丢了"说明烧录时勾了"擦除用户EEPROM"之类选项

补充:STC8/STC32 的差异

  • STC8 系列:操作流程一模一样,Keil 里按 3.4 节添加型号后直接选 STC8H8K64U 等;头文件用 STC 官方提供的;
  • STC32 系列:Keil 装 C251(见 3.5 节),烧录时型号选对应 STC32,其余流程不变;
  • STC32/STC8H 等带 USB 的型号还支持"不停电下载",这个等以后单独写一篇。

七、结语

烧录这事说破天就三件事:编译出 .hex、选对型号串口、冷启动。第一次成功后,后面所有项目都是同一套流程——我那个多功能时钟项目(LCD12864 中文显示 + DS1302 时钟 + DS18B20 温度 + 4x4 键盘闹钟)也是这么烧进去的,全程只靠一根 USB 线。

熟悉这套流程后,推荐再往下折腾:

  • 用 AiCube-ISP 自带的串口助手给单片机发数据(和串口通信一起学);
  • 换 STC8 系列体验更快的主频和更多外设;
  • 试试把编译出的 .hex 分享给同学——没有 Keil 也能用 AiCube-ISP 直接烧录,这就是"发布程序"的最简方式。

有任何一步卡住,对照第六节的表格自查,大部分问题都是冷启动和线序这两件事。