点亮LED:由原理图我们知道,只需要给LED一个低电平就可以点亮。举个例子,如果我们想点亮第一个LED灯,我们只需要令第一个LED灯为低电平,转换成二进制就是P2 = 1111 1110,(这种写法是不对的,他会默认你为十进制)P2 = 0xFE才是正确的。
点亮第一个LED代码
#include <STC89C5xRC.H>
void main()
{
P2 = 0xFE;
}
LED闪烁:就是在第一个的基础上加入延时函数。
我们可以在这里设置我们的延时函数。
LED闪烁代码
#include <STC89C5xRC.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灯一个接一个的亮起,就能实现流水灯的效果。但在这里我们实现一个高阶操作,通过改变延时函数控制LED灯的快慢。
LED流水灯代码
#include <STC89C5xRC.H>
#include <INTRINS.H>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms) //这里加了一个循环,通过改变形参改变延时时间
{ //假如我们输入300,进入这个循环会延时1ms,
i = 2; //然后300变成299,在进入这个循环,如此往复循环300ms。
j = 239;
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);
}
}