1、GPIO概念
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、 控制以及数据采集的功能。
1.1、GPIO分类
(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 都具备额外功能,只要通过相应的寄存器设置即可配置对应的附加功能,同一时刻,每个引脚只能使用该引脚的一个功能。
2、LED简介
LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大, 会烧毁二极管,一般我们控制在3 mA-20mA之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为"限流电阻"。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的"导通压降"。
3、LED模块电路
4、点亮LED灯
4.1、点亮D1灯代码
c
#include <Atmel/REGX52.H>
void main()
{
// 点亮D1灯
P2_0 = 0;
// 点亮D1灯
//P2 = 0xFE;
while (1);
}
4.2 D1灯1秒闪烁
c
#include <Atmel/REGX52.H>
#include <INTRINS.H>
void Delay1000ms() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do {
do {
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while (1) {
P2_0 = ~P2_0;
Delay1000ms();
}
}
4.3、LED流水灯
c
#include <Atmel/REGX52.H>
#include <INTRINS.H>
void Delay1000ms() //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do {
do {
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while (1) {
for (int i = 0; i < 8; i++)
{
// 驱动LED灯
P2=~(0x01<<0);
// 延时1s
Delay1000ms();
}
}
}