基于arduino的8阶光立方程序与设计图
#define L 8//长:端口初值
#define W 0//宽:端口初值
#define H 14//高:端口初值
#define V 100//单灯点亮时间
#define U 500//回型点亮快慢
void setup()//初始化端口
{
for(int i=L;i<L+3;i++)//确定输出口:长
{
pinMode(i, OUTPUT);
}
for(int j=W;j<W+8;j++)//确定输出口:宽
{
pinMode(j, OUTPUT);
}
for(int k=H;k<H+8;k++)//确定输出口:高
{
pinMode(k, OUTPUT);
}
}
void Long(int l)//长1-8个,扫描实现
{
switch(l)
{
case 1:
digitalWrite(L, LOW);
digitalWrite(L+1, LOW);
digitalWrite(L+2, LOW);
break;
case 2:
digitalWrite(L, HIGH);
digitalWrite(L+1, LOW);
digitalWrite(L+2, LOW);
break;
case 3:
digitalWrite(L, LOW);
digitalWrite(L+1, HIGH);
digitalWrite(L+2, LOW);
break;
case 4:
digitalWrite(L, HIGH);
digitalWrite(L+1, HIGH);
digitalWrite(L+2, LOW);
break;
case 5:
digitalWrite(L, LOW);
digitalWrite(L+1, LOW);
digitalWrite(L+2, HIGH);
break;
case 6:
digitalWrite(L, HIGH);
digitalWrite(L+1, LOW);
digitalWrite(L+2, HIGH);
break;
case 7:
digitalWrite(L, LOW);
digitalWrite(L+1, HIGH);
digitalWrite(L+2, HIGH);
break;
case 8:
digitalWrite(L, HIGH);
digitalWrite(L+1, HIGH);
digitalWrite(L+2, HIGH);
break;
default:
break;
}
}
void Wide(int w)//宽1-8行
{
digitalWrite(W+w-1, HIGH);
}
void High(int h)//高1-8层
{
digitalWrite(H+h-1, HIGH);
}
void Trundown()//关掉灯
{
for(int t=0;t<8;t++)
{
digitalWrite(H+t, LOW);
digitalWrite(W+t, LOW);
}
Lock();
}
void HWcutoff()//高宽初始化
{
for(int t=0;t<8;t++)
{
digitalWrite(H+t, LOW);
digitalWrite(W+t, LOW);
}
}
void Lighten(int l,int w,int h)//点亮坐标点
{
Long(l);
Wide(w);
High(h);
delay(V);
Trundown();
}
void Lock()//锁存扫描
{
for(int i=1;i<=8;i++)
Long(i);
}
void All_light()//全亮
{
for(int i=1;i<=8;i++)
Wide(i);
for(int j=1;j<=8;j++)
High(j);
for(int k=1;k<=8;k++)
Long(k);
}
void Liushuideng()//流水灯:依次点亮
{
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
for(int k=1;k<=8;k++)
Lighten(j,k,i);
}
void huayang_1()
{
hui(1,8);
delay(U);
Trundown();
hui(2,7);
delay(U);
Trundown();
hui(3,6);
delay(U);
Trundown();
hui(4,5);
delay(U);
Trundown();
hui(1,8);
delay(U);
Trundown();
hui(2,7);
delay(U);
Trundown();
hui(3,6);
delay(U);
Trundown();
hui(4,5);
delay(U);
Trundown();
hui(3,6);
delay(U);
Trundown();
hui(2,7);
delay(U);
Trundown();
hui(1,8);
delay(U);
Trundown();
hui(4,5);
delay(U);
Trundown();
hui(3,6);
delay(U);
Trundown();
hui(2,7);
delay(U);
Trundown();
hui(1,8);
delay(U);
Trundown();
}
void hui(int m,int n)//回字型
{
Long(m);
HWcutoff();
for(int i=m;i<=n;i++)
Wide(i);
for(int j=m;j<=n;j++)
High(j);
for(int i=m+1;i<=n-1;i++)
{
Long(i);
HWcutoff();
Wide(m);Wide(n);
High(m);High(n);
}
Long(n);
HWcutoff();
for(int i=m;i<=n;i++)
Wide(i);
for(int j=m;j<=n;j++)
High(j);
}
void loop() {
All_light();
delay(5000);
Trundown();
Liushuideng();
huayang_1();
}