江科协51单片机入门:新建第一个Keil工程,点亮第一个LED(含完整代码)

文章目录

  • [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 新建工程

  1. 打开 Keil,菜单栏 Project → New μVision Project...
  2. 选择一个英文路径的文件夹(路径不要有中文和空格 ),给工程起名,例如 LED
  3. 弹出芯片选择窗口,选择 Atmel → AT89C52(或直接搜 STC89C52 对应的兼容型号),点 OK
  4. 弹出 "Copy 'STARTUP.A51'..." 提示时,新手可以先点 (不添加启动文件也能跑这个小程序)

2.2 新建源文件

  1. File → New,出现一个空白文本框
  2. File → Save As ,保存为 main.c(注意后缀必须是 .c
  3. 在左侧 Project 窗口,右键 Source Group 1 → Add Existing Files to Group... ,把刚才的 main.c 加进来

2.3 工程目标设置(魔术棒)

点击工具栏的 魔术棒(Options for Target):

  1. Target 选项卡 :晶振填 12.0(按自己板子实际频率)
  2. 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

  1. 点击 Build(F7 / 魔术棒旁边的按钮)

  2. 下方 Build Output 窗口出现:

    ".\Objects\LED.hex" - 0 Error(s), 0 Warning(s).

  3. 到工程目录的 Objects 文件夹里就能找到 LED.hex。如果找不到 hex,回去检查 2.3 节的 Create HEX File 有没有勾选。


六、STC-ISP 下载程序

  1. 数据线连接开发板,打开 STC-ISP
  2. 单片机型号:选择 STC89C52RC(和芯片丝印一致)
  3. 串口号:选择设备管理器中看到的 COM 口(一般自动识别)
  4. 打开程序文件 :选中 Objects\LED.hex
  5. 点击 下载/编程 ,然后按一下板子上的复位键(或重新上电)开始烧录
  6. 看到 操作成功 字样,观察 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;   // 一行代码点亮一个世界

下一步建议:

  1. 让 LED 按不同频率闪烁(改延时参数)
  2. 学习 2-2 LED 闪烁 & 2-3 LED 花式流水灯
  3. 掌握 STC-ISP 的延时计算器,理解软件延时原理
  4. 后续可进阶按键检测、数码管、定时器中断

参考资料

  1. 江协科技《51单片机入门教程-2020版》,B 站视频:BV1Mb411e7re2-1 点亮一个LED)
  2. CSDN 参考博文:《单片机:新建第一个工程,点亮LED》

如果本文对你有帮助,欢迎点赞收藏,评论区交流~

相关推荐
736c11 小时前
STM32-FLASH 11
stm32·单片机
Zhang.Yi12 小时前
STM32-ADC
stm32·单片机·嵌入式硬件
Messy create15 小时前
【储能系统三大核心】
网络·stm32·单片机·算法·能源
Nomarsgo15 小时前
生产车间产线巡检解决方案:基于联控 Lionconit PTC-1006 工业手持平板电脑打造移动化、数字化车间巡检终端
单片机·嵌入式硬件·电脑
IT实战课堂之秋老师15 小时前
基于IOT技术的太阳能板表面清洁程度检测系统设计
单片机
智购科技无人售货机厂家15 小时前
2026自动售货机出货口防夹手设计:从红外检测到电机反转的工程实践~YH
大数据·linux·单片机·嵌入式硬件·微信
CHENKONG_CK16 小时前
晨控CK-FR08系列与欧姆龙NX系列PLC配置MODBUSTCP例程使用手册
网络·单片机·嵌入式硬件
XiHongShi201616 小时前
51基础学习视频分享(2),三极管,点亮LED灯
单片机·学习
youshi666818 小时前
stm32-看门狗
stm32·单片机·嵌入式硬件