仿真电路图1:
附:http://www.jh-tec.cn/archives/7471
具有6种模式
1.从中间分别向两边散开流动;
2.从两边分别向中间聚拢流动;
3.两个灯向从左边向右边流动;
4.两个灯向从右边向左边流动;
5.一个灯向从左边向右边流动;
6.一个灯向从右边向左边流动;
仿真电路图2:
根据一个按键的输入来实现以下4种显示状态的切换:
1)全亮
2)全部闪烁
3)至左而右流水灯循环(第1、3、5、7奇数个发光二极管亮灭)
4)至右而左流水灯循环(第8、6、4、2偶数个发光二极管亮灭)
部分参考代码
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int i)
{
while(i--);
}
void move_l(unsigned char p)
{
unsigned char i;
P1=p;
for(i=0;i<8;i++)
{
delay(20000);
P1=_crol_(P1,1);
}
}
void move_r(unsigned char p)
{
unsigned char i;
P1=p;
for(i=0;i<8;i++)
{
delay(20000);
P1=_cror_(P1,1);
}
}
void move_to_m(unsigned char p)
{
unsigned char i;
for(i=0;i<4;i++)
{
P1=((p<<i)&0x0F)|(0xF0&(p>>i));
delay(20000);
}
}
void move_from_m(unsigned char p)
{
unsigned char i;
for(i=0;i<4;i++)
{
P1=((p&0xF0)<<i)|((p&0x0F)>>i);
delay(20000);
}
}
void main()
{
unsigned char sw;
while(1)
{
sw=P0&0x3f;
switch(sw)
{
case 0x3e:move_l(0xfe);break;
case 0x3d:move_r(0x7f);break;
case 0x3b:move_l(0xfc);break;
case 0x37:move_r(0x3f);break;
case 0x2f:move_to_m(0x7e);break;
case 0x1f:move_from_m(0xe7);break;
default:P1=0xff;break;
}
}
}