51单片机第一篇章-点亮LED

640 阅读4分钟
排版能力不强,小白一个。学习理解能力一般,当做边学习边复盘。有错误请指正,交个朋友,交流51,也可交流就业趋势!

不论学习什么单片机,最简单的外设莫过于 IO 口的高低电平控制。

什么是LED?

48e7d1e35809498194952084c7ab1e6f_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp LED 即发光二极管-两个脚,长阳短阴。 在实验板中,LED的位置在这

2ac26d01a12e4853b57164b601f9dc4f_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp LED驱动后实现亮灯效果

29c1636ee4e642038b0befae6af5998f_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

那么LED 如何实现点亮呢?硬件原理?软件编程?

- 基本实现

只要在P2的引脚置低电平即可。 #include <REGX52.H> 头文件必须有 P2_2=0 或者 sbit LED P2^2; LED=0;

  • 硬件原理
GPIO

通过控制 51 单片机的 GPIO 使开发板上的 LED 灯点亮 GPIO 介绍

  1. 通用输入输出口的简称
  2. 通过软件实现输入输出
  3. 普中51实验板(即该篇章涉及的实验板用的单片机是STC89C52)共有40个引脚

fd6072c4556a420d8bb00708a2de03c9_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

那么是不是所有引脚都是 GPIO 呢?当然不是,51 单片机引脚可以分为这么几大类: (1)电源引脚:引脚图中的 VCC、 GND 都属于电源引脚。

(2)晶振引脚:引脚图中的 XTAL1、XTAL2 都属于晶振引脚。

(3)复位引脚:引脚图中的 RST/VPD 属于复位引脚,不做其他功能使用。

(4)下载引脚:51 单片机的串口功能引脚(TXD、RXD)可以作为下载引脚使用。

(5) GPIO 引脚:引脚图中带有 Px.x 等字样的均属于 GPIO 引脚。从引脚图可以看出,GPIO 占用了芯片大部分的引脚,共达 32 个,分为了 4 组,P0、P1、P2、P3,每组为 8 个 IO,而且在 P3 组中每个 IO 都具备额外功能,只要通过相应的寄存器设置即可配置对应的附加功能,同一时刻,每个引脚只能使用该引脚的一个功能。

查阅 STC89CXX 芯片数据手册获取信息,数据手册在我们资料“\6--芯片资料\开发板芯片数据手册”内,里面有一个 STC89CXX 数据手册.pdf。里面的第 23 页中就有介绍,我们截取了一部分内容如下图所示:

我的理解:GPIO 实现无需什么时序规则,给高低电平即可。

那为什么给电平它就实现响应呢

看看原理图

6e37f08af880466d8a613e360379daf0_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp 此为P0 原理图。P1,P2与之基本一样。图在 P0 口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态)。可翻阅普中的51单片机开发查阅其原理图电路的原理。(涉及数电知识)

d66598f63cc5415d930252a5520befcd_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

可能有的朋友会很懵、看不懂,没关系,这些都不会影响你编写单片机应用程序,大家记住以下几点即可:
①P0 口是漏极开路,要使其输出高电平,必须外接上拉电阻,通常选择4.7K~10K 阻值。
②P0、P1、P2 几乎都用作普通 I/O 口使用,既可作为输入,又可作为输出。
③P3 口既可用作普通 I/O 口,又可作为第二功能使用,比如串口、外部中
断、计数器等

通过实践:得出该实验板的GPIOP2^0~7为LED,P2^5为蜂鸣器。

LED 模块 硬件电路

2bbb07e7e8024ba1a7a402bab9e60868_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

为什么置0亮灯,1熄灭呢?

图中 LED 采用共阳接法,即所有LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到 P2 口上。根 据前面 LED 的介绍我们知道,要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。

  • 软件编程 让一个P2的引脚0点亮

#include <REGX52.H> typedef unsigned int u16; sbit LED1=P2^0; void main() { LED1=0;//点亮 while(1) {} } 即可实现 如果要实现8个的灯都亮 则 P2=0X00; 效果如下

96e92a3421fd4cb7bbd8f1df57b51aea_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp 编译器截图

LED 全部点亮效果

a7f9675c774f49cbb20d0786cc021ddf_tplv-k3u1fbpfcp-zoom-in-crop-mark_3024_0_0_0.webp

附上自己写的流水灯教程 新人入门嵌入式,可看b站普中或江科大51视频