51单片机实验1:点亮第一个LED灯

实验前准备


在开始点亮第一个 LED 灯之前,需要做好充分的准备工作,准备过程主要分为硬件准备和软件准备两部分。​

硬件准备​


51 单片机开发板:这是本实验的核心硬件,开发板上集成了 51 单片机芯片、电源电路、复位电路、晶振电路、外设资源等。不同型号的开发板可能在资源配置和接口布局上有所差异,但基本功能是一致的。在选择开发板时,大家可以根据自己的需求和预算进行挑选。​

软件准备​


Keil:这是一款专业的单片机开发集成环境,它提供了丰富的功能,如代码编辑、编译、调试等,能够帮助我们高效地开发单片机程序。在 Keil 中,我们可以使用 C 语言或汇编语言进行编程。它还支持多种单片机型号,兼容性强,是 51 单片机开发的首选软件之一。​
STC 烧录工具:它的作用是将在 Keil 中编译生成的程序文件烧录到 51 单片机中,让单片机能够执行编写的程序。开发板一般都自带烧录程序。

点亮 LED 灯的原理​


51 单片机的引脚​

51 单片机通常有 40 个引脚,每个引脚都有其特定的功能。其中,有 32 个通用 I/O 引脚,它们既可以作为输入引脚,接收来自外部设备的信号,比如按键的按下与弹起信号;也可以作为输出引脚,向外部设备发送控制信号,就像我们即将要控制的 LED 灯。
以 P0 口为例,它的 8 个引脚(P0.0 - P0.7)不仅能用于普通的输入输出操作,在访问外部存储器时,还可以作为 8 位数据总线,或者 16 位地址总线中的低 8 位地址总线 ,承担着数据传输和地址选择的任务。
P1 口的 8 个引脚(P1.0 - P1.7)主要用于输入输出,可连接各种外部设备,如传感器、执行器等。P2 口的引脚(P2.0 - P2.7)同样用于输入输出,在访问外部存储器时,还可作为 16 位地址总线中的高 8 位地址总线。P3 口的引脚(P3.0 - P3.7)除了基本的输入输出功能外,每个引脚还具有第二功能,像 P3.0 用作串行数据输入端(RXD),P3.1 用作串行数据输出端(TXD),用于串口通信 。

LED 灯的工作原理​

LED,即发光二极管,它的核心是一个半导体晶片,由 P 型半导体和 N 型半导体组成,中间形成一个 P - N 结 。当给 LED 加上正向电压时,电流从 LED 阳极流向阴极,此时 P 区的空穴和 N 区的电子会在 P - N 结附近复合,复合过程中会以光子的形式释放能量,从而使 LED 发光。不同半导体材料制成的 LED,由于电子和空穴复合时释放能量的不同,会发出不同颜色的光,比如常见的红色 LED 通常采用镓砷化铝(AlGaAs)或镓砷化磷(GaAsP)等材料,绿色 LED 使用氮化镓(GaN)材料 。LED 具有单向导电性,只有当外加电压达到一定值(即导通电压)时,LED 才会导通发光,且其正向伏安特性曲线很陡,电压稍有变化,电流就会有较大变化。为了控制通过 LED 的电流,避免其因电流过大而损坏,通常需要在电路中串联一个限流电阻。 限流电阻的阻值可以根据欧姆定律计算得出,公式为:

其中R为限流电阻的阻值,Us为电源电压,Uf为LED的正向电压,I为 LED 的工作电流(单位为安培)。例如,当电源电压为 5V,LED 的正向电压为 2V,工作电流为 20mA 时,通过计算可得限流电阻的阻值应为 150 欧姆。​

电路连接原理​

在本次实验中,我们将 51 单片机的某个 I/O 引脚与 LED 灯的负极相连,LED 灯的正极通过一个限流电阻连接到电源正极(通常为 5V)。以 P2.0 引脚为例,当 P2.0 输出低电平时,LED 灯的负极电位为低,而正极电位为高,此时 LED 灯两端形成正向电压,电流从电源正极出发,经过限流电阻、LED 灯,最后流入 P2.0 引脚,LED 灯导通发光;当 P2.0 输出高电平时,LED 灯两端的电压差为零,没有电流流过,LED 灯熄灭 。

实战步骤​

创建 Keil 工程​


打开 Keil 软件,在菜单栏中点击 “Project”,选择 “New μVision Project”,创建一个新的工程空间。​
在弹出的 “Create New Project” 窗口中,选择保存工程的文件夹,并为工程命名,比如 “LED_Test”。
点击 “保存” 后,会弹出 “Select Device for Target” 窗口,在这里需要选择单片机的型号。如果使用的是 STC89C52 单片机,可在 “Manufacturer” 列表中找到 “Atmel” ,然后在 “Device” 列表中选择 “AT89C52” 。点击 “OK” 后,会弹出一个提示框,询问是否要复制 8051 的启动文件到工程中,这里点击 “否” 。因为 Keil 已经帮我们完成了启动相关的设置,我们只需要专注于编写应用程序即可。 完成以上步骤后,一个新的 Keil 工程就创建好了,接下来就可以在这个工程中编写代码了。​

编写代码​

在 Keil 工程中,右键点击 “Source Group 1”,选择 “Add New Item to Group 'Source Group 1'...” ,在弹出的对话框中选择 “C File (*.c)” ,并命名为 “main.c” ,然后点击 “Add” 添加文件。在 “main.c” 文件中,编写如下代码:​

#include <REGX52.H> // 包含51单片机的头文件,使程序能够识别单片机的寄存器等资源​​
void main() // 主函数,程序的入口​
{​
P2 = 0xFE; // 将P2口赋值为0xFE,二进制为1111 1110,使P2.0引脚输出低电平,点亮与之相连的LED灯​
while(1); // 无限循环,保持程序运行,防止程序跑飞​
}​


代码解释如下:​
#include <REGX52.H> :这是一个预处理指令,用于包含 51 单片机的头文件 “REGX52.H” 。这个头文件中定义了 51 单片机的各种寄存器和特殊功能寄存器的地址,以及一些常用的宏定义,通过包含这个头文件,我们在程序中就可以直接使用这些寄存器和宏定义,方便对单片机进行控制。​
void main() :这是主函数,是程序的入口点,程序从这里开始执行。当单片机上电复位后,会自动跳转到主函数开始执行其中的代码。
P2 = 0xFE; :这行代码将 P2 口赋值为 0xFE(十六进制),转换为二进制是 1111 1110 。因为 LED 灯是共阳极连接方式(阳极接电源正极,阴极通过限流电阻与单片机引脚相连),当 P2 口的某一位为低电平时,对应的 LED 灯就会点亮。这里 P2.0 引脚为低电平,所以与 P2.0 相连的 LED 灯就会被点亮。
while(1); :这是一个无限循环语句,括号内的条件 “1” 始终为真,所以程序会一直停留在这个循环中,不会执行其他代码。这样做的目的是保持程序的运行状态。

编译与调试​

在 Keil 软件中,点击菜单栏中的 “Build Target” 按钮(或使用快捷键 F7) ,对编写好的代码进行编译。编译过程中,Keil 会对代码进行语法检查、语义分析等操作,并将代码转换为单片机能够识别的机器语言。如果代码中存在语法错误,编译过程就会停止,并在 “Build Output” 窗口中显示错误信息 。例如,如果我们不小心将 “P2 = 0xFE;” 写成了 “P2 = 0XFE;”(注意这里的 “X” 应为小写 “x”),编译时就会提示 “Error: syntax error near 'XFE'” ,表示在 “XFE” 附近存在语法错误。我们需要根据错误提示,仔细检查代码,修改错误后再次编译,直到编译成功,没有错误信息为止。​
除了错误信息,编译过程中还可能会出现警告信息。警告虽然不会阻止程序的编译生成,但它可能预示着程序中存在一些潜在的问题,需要我们关注和处理。比如,如果我们在代码中定义了一个变量,但在程序中没有使用它,编译时就会提示 “Warning: unreferenced local variable ' 变量名 '” ,提醒我们这个变量未被使用。虽然这在某些情况下可能不影响程序的正常运行,但为了使程序更加严谨和高效,我们最好对这些警告进行处理,比如删除未使用的变量,或者根据实际需求合理使用它们。 当编译成功后,在工程目录下会生成一个扩展名为 “.hex” 的文件,这个文件就是我们需要烧录到单片机中的程序文件。

烧录程序​

用 USB 线将 51 单片机开发板与电脑连接起来,确保开发板的电源指示灯亮起,表明开发板已正常供电。这一步就像是给单片机开发板注入了能量,让它能够工作。​
打开 STC 烧录工具,在工具界面中,首先选择正确的串口号。串口号可以在电脑的设备管理器中查看,找到 “端口(COM 和 LPT)” 选项,展开后就能看到连接的串口设备及其对应的串口号 。选择正确的串口号就像是找到了正确的通信通道,确保电脑和开发板能够顺利通信。​
选择单片机型号,这里选择与我们实际使用的单片机型号一致的选项,如 STC89C52 。准确选择单片机型号非常重要,它能确保烧录工具与单片机之间的通信和配置正确无误。​
点击 “打开程序文件” 按钮,在弹出的文件浏览器中,找到刚才在 Keil 工程目录下生成的 “.hex” 文件,选中并打开。这一步就像是将我们编写的程序文件传递给烧录工具,让它准备将程序烧录到单片机中。​
一切设置完成后,点击 “下载 / 编程” 按钮,然后给开发板上电(如果开发板已经上电,可以先断电再重新上电) 。烧录工具会开始与单片机进行通信,将程序文件烧录到单片机的 Flash 存储器中。在烧录过程中,烧录工具的界面会显示烧录进度和状态信息 。当显示 “操作成功!” 等类似信息时,说明程序烧录成功。​