今天简单地介绍一下发光二极管,发光二极管看似简单,但是在市场中也有很多应用。比如说,在大家经常使用的充电器就有发光二极管的应用,如下图所示:
这就是简易充电器电路,其中LED也就是发光二极管既起到半波整流的作用又兼做指示灯。同样的原理,发光二极管还可以给灯具开关做指示灯、给工业设备配电箱做指示灯以及用共阴极双色LED对电源插座指示等等。
接下来,简单地说一下c语言程序。
大体而言,可以采用位操作与总线操作两种方式写程序,比如让第一个发光二极管亮:
(1)、位操作(2)总线操作
#include#include
sbitD1=P1^0;voidmain()
voidmain(){P1=0xfd;
{D1=0;}
}
在此基础上,添加一些循环、延时就可以让其闪烁,如让第一个二极管闪烁的三种方法:
法一:#include
sbitP1_1=P1^0;
voidmain()
{unsignedinti;
while(1)
{P1_1=0;
for(i=1;i<10000;i++);
P1_1=1;
for(i=1;i<10000;i++);
}}
法二:#include
sbitP1_1=P1^0;
voidyanshi();
voidmain()
{while(1)
{P1_1=0;
yanshi();
P1_1=1;
yanshi();}}
voidyanshi()
{unsignedinti;
for(i=0;i<10000;i++);}
法三:#include
voidmain()
{while(1)
{
inti;i=50000;
P1=0xfe;
while(i--);
P1=0xff;
i=50000;
while(i--);
}
}
当然,还有更好玩的,比如非常好看的流水灯,其实原理跟上面一样:
法一:直接法
#include
sbitP1_1=P1^0;
voidyanshi();
voidmain()
{while(1)
{P1=0xfe;
yanshi();
P1=0xfd;
yanshi();
P1=0xfb;
yanshi();
P1=0xf7;
yanshi();
P1=0xef;
yanshi();
P1=0xdf;
yanshi();
P1=0xbf;
yanshi();
P1=0x7f;
yanshi();
}}
voidyanshi()
{unsignedinti;
for(i=0;i<10000;i++);}
法二:使用数组
#include
unsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voidyanshi();
voidmain()
{unsignedinti;
while(1)
{
for(i=0;i<8;i++)
{P1=table[i];(注意,在这里的大括号是一定要加的,否则你就out了)
yanshi();
}}}
voidyanshi()
{unsignedinti;
for(i=0;i<10000;i++);}
法三:左移右移
#include
unsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedinti;
voidyanshi();
voidmain()
{P1=0xfe;
while(1)
{P1=P1<1;
P1=P1|0x01;(因为是左移而不是循环左移,所以要末位置一,这样的结果也会导致最后只挨个量一次)
yanshi();}
}
voidyanshi()
{unsignedinti;
for(i=0;i<10000;i++);}
其实想想并不是很难,就是赋值控制亮灭,主要是记住延时那个函数,最后调用就可以了,在这个基础上再拓展一下,双灯左移右移闪烁,也就是双灯左移7次,右移7次,然后全闪7次,程序如下:
#include
voidDelay(unsignedinti);
voidmain()
{unsignedchari;
unsignedchartemp;
while(1)
{temp=0xfc;
P1=temp;
for(i=0;i<7;i++)
Delay(50000);
{temp<=1;
temp=temp|0x01;
P1=temp;}之所以加入temp做中间变量,防止直接操作端口造成的短暂闪烁
Temp=0x3f;
P1=temp;
For(i=0;i<7;i++)
{Delay(50000);
Temp>>=1;
Temp|=0x80;
P1=temp;}
For(i=0;i<3;i++)
P1=0xff;
Delay(50000);
P1=0x00;
Delay(50000);}
}}
voidDelay(unsignedinti)
{
while(--i);
}
这么一分析,发光二极管真的很简单,赋值端口,控制亮灭,延时,调用函数,基本上就可以了,最重要的是c语言简单知识的一些规范,这都是入门的,不难理解,细心一些就好了,个人觉得比较好的还是自己写程序去调试,调试次数多了,自然而然就熟悉了,孰能生巧,对很多事情都是亘古不变的真理,学习更是如此。