LED流水灯
不多bb,先上代码让大家看看
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define led P2
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i = 0;
led = 0xfe;
delay(50000);
while(1)
{
for(i=0;i<7;i++)
{
led = _crol_(led,1);
delay(50000);
}
for(i=0;i<7;i++)
{
led = _cror_(led,1);
delay(50000);
}
}
}
LED流水灯,这里使用到一个特殊的库函数(intrins.h),提供了左移右移函数。这里的P2口控制8盏LED灯,所以直接对整个P2口操作。
首先0xfe是十六进制,对应的二进制是1111 1110,最低位为第一盏灯,低电平点亮。
通过左移函数_crol_(led,1)让0在for循环中不断左移不断点亮下一个灯熄灭上一个灯,达到流水灯效果。
因为左移结束后,八盏灯的电平状态是,0111 1111,所以再动用右移函数_crol_(led,1)让上述操作反方向再次进行一遍,这样子左右来回循环,达到了流水灯的简易效果。