目录
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);
}
}
}