点亮LED灯
由8位寄存器发出控制电平,来控制LED灯的开关。因LED灯的正极已经接通,只要将另一端接通负极,形成电势差,就能将LED灯点亮,所以,寄存器发出低电平就能将相对于的LED灯点亮。
对应的,是八位寄存器,所以1111 1111为全高电平,但是二进制不利于编写,所以将其转化成两位十六进制来进行编译,且对LED灯进行控制的变量为P2,如P2=0xFE,则是对第一个LED灯进行点亮
#include <REGX52.H>
void main()
{
P2=0xFE;
}
LED灯闪烁
可以通过开关LED灯来实现,但是因为开关频率过快,人眼无法识别出来,这时在开关的间隙,需要加一个延时器,就能实现LED的闪烁
#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流水灯基础代码
#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;//1111 1110
Delay500ms();
P2=0xFD;//1111 1101
Delay500ms();
P2=0xFB;//1111 1011
Delay500ms();
P2=0xF7;//1111 0111
Delay500ms();
P2=0xEF;//1110 1111
Delay500ms();
P2=0xDF;//1101 1111
Delay500ms();
P2=0xBF;
Delay500ms();
P2=0x7F;
Delay500ms();
}
}
LED流水灯Plus版
下面代码可以输入数值来控制流水灯的快慢,当输入数值越大,误差则越大,所以仍有改进空间
#include <REGX52.H>
#include <INTRINS.H>
void Delay1ms(int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1){
P2=0xFE;//1111 1110
Delay1ms(1000);
P2=0xFD;//1111 1101
Delay1ms(1000);
P2=0xFB;//1111 1011
Delay1ms(1000);
P2=0xF7;//1111 0111
Delay1ms(400);
P2=0xEF;//1110 1111
Delay1ms(400);
P2=0xDF;//1101 1111
Delay1ms(400);
P2=0xBF;
Delay1ms(400);
P2=0x7F;
Delay1ms(400);
}
}