51之旅的第一步,亮灯。但我们不仅仅只是亮一个灯就够了,我们亮就要亮出花样出来,接下来我来说几种常见的形式。
最终所要实现的效果:当按下A键对应A灯亮,按下B键对应B灯亮,按下C键对应C灯亮,按下D键对应D灯亮。
就选四个键,多了自己写,原理都一样。
原理支撑:对于嵌入的LED,低电平亮,高电平灭(这个大部分这样,实际情况不放心可以自己测一下,分别给个高低的电平看看那个亮)。对于独立按键来说,当按键按下,按键所接对应引脚变为低电平。
接线:LED:L1接P1.0,L2接P1.1,L3接P1.2,L4接P1.3。按键:K1接P0.0,K2接P0.1,K3接P0.2,K4接P0.3。
好了,原理跟接线都完成了,接下来思路就是:当K1按下时,P0.0变成低电平,此时P1.0应变位低电平,L1亮。即实现了按下K1时L1亮。此时问题就转化成了判断P0.0是否为低电平,实现很简单,没错,用个if语句足以。
sbit p00 = P0^0;
if(p00 == 0){
}
这里需注意一点,为了减少误触的风险,应当设置防抖动。所以最后一个完整过程的代码实现应为:
sbit p00 = P0^0;
sbit p10 = P1^0;
if(p00 == 0){
delay_ms(10);
if(p00 == 0){
p10 = 0;
}
}
注意,上面的delay代表延时,这个函数得自己写。
带上头文件,最后得完完整整得程序应为:
#include
sbit p00 = P0^0;
sbit p10 = P1^0;
void delay_ms(unsigned int n)
{
int i,y;
for(i=n;i>0;i--)
for(y=114;y>0;y--);
}
void main()
{
while(1)
{
if(p00 == 0){
delay_ms(10);
if(p00 == 0){
p10 = 0;
}
}
}
}
四个的话,改变引脚重复四次就可以了。我就不多说了。
接下来,进行下一个,跑马灯。
最终效果:当第一个灯亮,其余灯灭,接着第二个灯亮,同时第一个灯灭,接下来是第三个····当最后一个灯亮完,重复整个过程,再来一遍。
原理支撑:灯亮的原理同上,emmm,好像只要说这个就行。
接线:讲L1-L8对应接在P1.0-P1.7上。
实现上述过程,主要是通过位运算来完成。通过左移右移来实现灯灭灯亮。
在这之前介绍一种用法:
P1 = 0xfe;
上面代表着,将P1的第一位置为0,也就是P1.0为0,其余位置为1。
有了上面的基础,这我也不多说,大概差不多,我直接给出完整的程序:
#include
void delay_ms(unsigned int n)
{
int i,y;
for(i=n;i>0;i--)
for(y=114;y>0;y--);
}
void main(void)
{
while(1)
{
P1 = 0xfe;
delay_ms(1000);
while(P1 != 0xf7)
{
P1 <<= 1;
P1 |= 0x01;
delay_ms(1000);
}
P1 = 0x7f;
delay_ms(1000);
while(P1 != 0xef)
{
P1 >>= 1;
P1 |= 0x80;
delay_ms(1000);
}
}
}
ok,跑马灯咋也完成了,接下来进行最后一项,呼吸灯。
最终效果:实现灯的由暗到亮并且由亮到暗的逐渐变化。
原理:emmm,我们采用for循环的方式来进行呼吸灯的实现。两个for循环,总的循环次数不变。假设,总的循环次数为500,当亮为500时,暗为0;当亮为200时,暗为300;当亮为0时,暗为500。如果开始是从亮为0开始循环,即实现的是由暗到亮,如果从亮为500开始,即实现的是由亮到暗。然后你想象一下,两者一结合,是不是就是一个从暗到亮然后亮到暗的完整过程,然后不断重复此过程,好了,恭喜你,呼吸灯你完成了。
接线:我们只实现一个灯的呼吸灯,所以我们只接一个脚就可以了。将L1接在P1.0上。
感觉差不多,原理中应该说的很详细了,接下来接触程序:
#include
sbit p10 = P1^0;
void main(void)
{
int time = 200;
int i,j=0;
while(1)
{
p10 = 0;
for(i=0;i<time-j;i++);
p10 = 1;
for(i=0;i<j;i++);
j++;
if(j == time)
{
while(j>0)
{
p10 = 0;
for(i=0;i<time-j;i++);
p10 = 1;
for(i=0;i<j;i++);
j--;
}
}
}
}
上面的time是做一次呼吸灯要的时间,不可过长,也不可过短,这个自己改几个值试一下,找到最佳的值。导致这个原因是,晶振的不同。
好了,呼吸灯现在你也完成了。到这基本也结束了。
怎么样,是不是很开森。到这,这个LED基本你也完溜了。
接下来,自己去找一些更好玩的玩法。