003-流水灯效果
流水灯效果
- 功能:实现LED模块的流水灯效果
方案一:从左至右依次每次亮一个小灯(直接IO口给对应亮灭小灯赋值)
#include<reg52.h>
void main()
{
unsigned int i;
while(1)
{
P2 = 0xFE; //第一个灯亮
for(i=0; i<20000; i++); //延时
P2 = 0xFD; //第二个灯亮
for(i=0; i<20000; i++); //延时
P2 = 0xFB;
for(i=0; i<20000; i++);
P2 = 0xF7;
for(i=0; i<20000; i++);
P2 = 0xEF;
for(i=0; i<20000; i++);
P2 = 0xDF;
for(i=0; i<20000; i++);
P2 = 0xBF;
for(i=0; i<20000; i++);
P2 = 0x7F;
for(i=0; i<20000; i++);
}
}
方案二:从左至右依次每次亮一个小灯(采用移位的方式实现流水效果)
#include<reg52.h>
void main()
{
unsigned char cnt = 0;
unsigned int i;
while(1)
{
P2 = ~(0x01 << cnt);
for(i=0; i<30000; i++);
cnt++;
if(cnt>7)
{
cnt = 0;
}
}
}
方案三:从右至左依次每次灭一个小灯(采用移位的方式实现流水效果)
#include<reg52.h>
void main()
{
unsigned char cnt = 0;
unsigned int i;
while(1)
{
P2 = (0x80 >> cnt);
for(i=0; i<30000; i++);
cnt++;
if(cnt>7)
{
cnt = 0;
}
}
}
方案四:控制LED模块先流水左移,紧接着右移
#include<reg52.h> //头文件
//控制LED模块先流水左移,紧接着右移
void main() //主函数
{
unsigned int i;
unsigned char kong_zhi = 0x01; //控制小灯初始状态
unsigned char direction = 0; //控制移动方向:0左移;1右移
while(1)
{ //流水循环
P2 = ~kong_zhi; //初始:控制小灯的开关
for(i=0; i<30000; i++); //延时
if(direction == 0) //如果direction为0,左移
{
kong_zhi = kong_zhi << 1;
if(kong_zhi == 0x80) //判断是否左移到头,如果是,改变移动方向
{
direction = 1;
}
}
else //如果direction为1,右移
{
kong_zhi = kong_zhi >> 1;
if(kong_zhi == 0x01) //判断是否右移到头,如果是,改变移动方向
{
direction = 0;
}
}
}
}
本文来自博客园,作者:shihao_Yang,转载请注明原文链接:https://www.cnblogs.com/Yang-shihao/p/14352250.html