51单片机LED灯

一、前言

本文主要介绍认识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灯不导通而亮。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值