零基础制作两轮自平衡小车


layout: wiki

title: LED指示灯实验

作者:Songyimiao

建立工程之后,我们进行一个简单的实验:点亮LED指示灯。

想要控制LED灯,当然是通过控制STC15芯片的I/O引脚电平的高低来实现。在STC15芯片上,I/O引脚可以被软件设置成各种不同的功能,如输入或输出,所以被称为GPIO(General-purpose I/O)。

STC15系列单片机最多有46个I/O口(如48-pin单片机): P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7,P4.0~P4.7,P5.0~P5.5。对于不同型号的芯片,端口的组和引脚的数量不同,具体请参考相应芯片型号的 datasheet。

于是,控制 LED 的步骤就自然整理出来了:

  1. GPIO 端口引脚多 --> 就要选定需要控制的特定引脚

  2. GPIO 功能如此丰富 --> 配置需要的特定功能

  3. 控制 LED 的亮和灭 --> 设置 GPIO 输出电压的高低

STC15系列单片机所有I/O口均可由软件配置成四种工作类型之一,如下表所 示。四种类型分别为:准双向口/弱上拉(标准8051输出模式)、推挽输出/强上拉、仅为输 入(高阻)或开漏输出功能。

在这里,我们需要把I/O口设置成准双向口。

我们的程序代码以喵呜MWbalancedSTC15第二代控制板为例,根据其硬件连接图来分析。

MWbalancedSTC15的控制板上有四颗LED指示灯,其中一颗是蓝牙状态指示灯,一颗是USB插拔工作状态指示灯,另外两颗才是我们能自定义的LED指示灯。如下图。

然后我们在IOConfig.h里面定义好LED对应的引脚。如下图。

接着,初始化GPIO引脚,设置成“准双向”。如下图。可以不把所有引脚都初始化,只把LED用到的引脚初始化就可以了。

然后,在主函数里将两个LED灯设置成0.5秒闪烁一次。如下图。

就这样,大功告成。我们可以看到控制板上的LED在闪烁。

LED实验代码传送门: