一、前言
本文主要介绍认识LED流水灯及其功能
二、什么是GPIO?
GPIO (general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。
(1)电源引脚
(2)晶振引脚
(3)复位引脚
(4)下载引脚
(5) GPIO 引脚
①P0口是漏极开路,要使其输出高电平,必须外接上拉电阻,通常选择4.7K~10K阻值。
②P0、P1、P2几乎都用作普通I/0口使用,既可作为输入,又可作为输出。
③P3口既可用作普通I/0口,又可作为第二功能使用,比如串口、外部中断、计数器等。
三、认识数码管
1.LED数码管的结构
LED数码管由8个发光二极管(以下简称段)构成,通过不同的发光段组合可显示数字0~9、字符A-F、H、L、P、R、U、 Y、符号“一”及小数点“.”等信息
2.数码管的字型编码
(1) 一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
(2) 共阳极:位选为高电平,选中数码管,段选为低电平,选中各数码段;
(3) 共阴极:位选为低电平,选中数码管,各段选为高电平,选中各数码段;
共阳极由0到f的编码为: uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
共阴极由0到f的编码为:uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
3.LED硬件
LED即发光二极管。它具有单向导电性,通过5mA左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在3 mA-20mA之间,通常我们会在LED管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光时,测量它两端电压约为1.7V,这个电压又叫做发光二极管的“导通压降”。
下图左右分别为直插式发光二极管和贴片式发光二极管实物图。发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。
四、实验结果
流水灯
五、流水灯程序
#include <reg52.h>
#define GPIO P2
#define XMS 100
unsigned char temp;
void delay_xms(unsigned int xms);
void main(void)
{
unsigned char i;
while(1)
{
temp=0xFE;
for(i=0;i<8;i++) //有8个流水灯 循环8次
{
GPIO=temp;
delay_xms(XMS);
temp=(temp<<1)|0x01;
}
}
}
/*GPIO=0xFE;//1111 1110
delay_xms(XMS);
GPIO=0xFC;//1111 1101
delay_xms(XMS);
GPIO=0xF8;//1111 1011
delay_xms(XMS);
GPIO=0xF0;
delay_xms(XMS);
GPIO=0xE0;
delay_xms(XMS);
GPIO=0xC0;
delay_xms(XMS);
GPIO=0x80;
delay_xms(XMS);
GPIO=0x00;
delay_xms(XMS);
GPIO=0x00;
delay_xms(XMS);
GPIO=0x80;
delay_xms(XMS);
GPIO=0xC0;
delay_xms(XMS);
GPIO=0xE0;
delay_xms(XMS);
GPIO=0xE0;
delay_xms(XMS);
GPIO=0xFE;
delay_xms(XMS);
}*/
void delay_xms(unsigned int xms)//ding yi hang shu
{
//unsigned int i;
//for(i=0;i<234;i++);
unsigned int i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<234;j++);
}
}
注释:编写程序使用while(1)死循环,使得程序一直运行,这样能保证led灯一直亮着
六、实验总结
单片机是通过编程实现各种功能,在LED高低电平交替闪烁实验中也是通过编程来实现的,在单片机中,我们需要通过寄存器的方法控制单片机的输出口,让它输出高电平或低电平,从而实现灯的交替闪烁。
当把电路连接妥当后,当P2的引脚输出电压(0)时,其所连接的LED呈现正向偏压而发亮;若将引脚输出高电压(1)时,其所连接的LED灯不导通而亮。