51单片机———LED

发布于:2022-12-02 ⋅ 阅读:(489) ⋅ 点赞:(0)

目录

LED简介

LED模块 

电路图

实物图

管脚:

函数:

延时函数

左右移函数

设计

点亮LED

LED闪烁

流水灯


LED简介

LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流
越大,其亮度越强,但若电流过大, 会烧毁二极管,一般我们控制在 3 mA-20mA
之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极
管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光
时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降”。
下图左右分别为直插式发光二极管和贴片式发光二极管实物图。发光二极管正极
又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为
阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记,通常有
标记的一端为阴极。

 

LED模块 

电路图

实物图

 

 

 

管脚:

D1------P2^0

D2------P2^1

D3------P2^2

D4------P2^3

D5------P2^4

D6------P2^5

D7------P2^6

D8------P2^7

函数:

延时函数

void delay(u16 i)
{
while(i--);
}

左右移函数

要使用左右移函数应添加头文件:  #include<intrins.h>

左移函数是_crol_(),右移函数是_cror_()。

循环左移函数,_crol_(a,b);a 是左移的值,b 是左移的位数。包含在
instrins.h 库函数里面。


循环右移函数,_cror_(a,b);a 是右移的值,b 是右移的位数。包含在
instrins.h 库函数里面。

for(i=0;i<7;i++) //将 led 左移一位
{
  led=_crol_(led,1);
  delay(50000); //大约延时 450ms
}



for(i=0;i<7;i++) //将 led 右移一位
{
  led=_cror_(led,1);
  delay(50000); //大约延时 450ms
}

设计

点亮LED

首先点亮一个

#include "reg52.h"    

sbit led=P2^1;	   


void main()
{
	while(1)
	{
			led=0;		//0为点亮,1为灭。	
	}		
}

接着点亮两个

#include "reg52.h"    

sbit led1=P2^1;	   
sbit led2=P2^2;	 

void main()
{
	while(1)
	{
			led1=0;	
		    led2=0;	
	}		
}

以此类推......

LED闪烁

#include "reg52.h"			 
typedef unsigned int u16;	  
typedef unsigned char u8;


sbit led=P2^0;		 


void delay(u16 i)   //延时函数
{
	while(i--);	
}

void main()
{
	while(1)
	{
		led=0;
		delay(50000); //大约延时450ms
		led=1;
		delay(50000); //大约延时450ms	
	}		
}

流水灯

效果:led从D1亮到D8循环

#include "reg52.h"			
#include <intrins.h>		

typedef unsigned int u16;	  
typedef unsigned char u8;

#define led P2	  

void delay(u16 i)
{
	while(i--);	
}
void main()
{
	u8 i=0;
	led=0xfe;
	delay(50000); 
	while(1)
	{	
		for(i=0;i<8;i++)
		{
			led=_crol_(led,1);   
            delay(50000);
	    }		
	
  }
}

效果:led从D1亮到D8再从D8亮到D1

#include "reg52.h"			
#include <intrins.h>		

typedef unsigned int u16;	  
typedef unsigned char u8;

#define led P2	  

void delay(u16 i)
{
	while(i--);	
}
void main()
{
	u8 i=0;
	led=0xfe;
	delay(50000); 
	while(1)
	{	
		for(i=0;i<8;i++)
		{
			led=_crol_(led,1);   
      delay(50000);
	  }		
		for(i=0;i<8;i++)
		{
			led=_cror_(led,1);  
      delay(50000);
	  }		
  }
}