一、点亮一个LED灯
#include <REGX52.H>
void main()
{
P2=0xFE; //1111 1110
}
这是使第一个LED灯亮。
点亮一个LED
二、LED闪烁
先看一下大家经常会犯的错误;
#include <REGX52.H>
void main()
{
while(1)
{
P2=0xFE;
P2=0xFF;
}
}
那么看到的样子和点亮的是一样的,因为他的频率太快了,所以人眼看不到他在闪烁。所以我们可以让他在每次执行完亮后延时.那么就要调用延时函数。代码如下:
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}
那么第一个LED灯就会闪烁。
闪烁
三、LED流水灯
只需要在第一部分与第二部分的基础上,稍加改进。第二灯亮,,对应的二进制应该是1111 1101,16进制就应该是 0xFD;其他推理可得。并且在前面一个灯熄灭之前要延时。
上代码:
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
Delay1ms(500);
P2=0xFD;//1111 1101
Delay1ms(500);
P2=0xFB;//1111 1011
Delay1ms(500);
P2=0xF7;//1111 0111
Delay1ms(500);
P2=0xEF;//1110 1111
Delay1ms(500);
P2=0xDF;//1101 1111
Delay1ms(500);
P2=0xBF;//1011 1111
Delay1ms(500);
P2=0x7F;//0111 1111
Delay1ms(500);
}
}
那么就会变成这样
流水灯
四、独立按键控制亮灭
只需要找到独立按键在单片机中的位置,使得当按下,让灯亮。这里用if语句就可以很容易解决
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0)
{
P2_0=0;
}
else
P2_0=1;
}
}
那么就是这样:
独立按键控制亮灭