// 定义数码管的引脚
int seg[] = {27, 26, 25, 33, 32, 2, 4};
// 定义蛇的状态,每个元素表示一个数码管的状态,0为不亮,1为亮
int snake[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00};
// 定义数码管位选的引脚
int s1 = 19, s2 = 18, s3 = 5, s4 = 15;
int i, j, k, s, t, f; // 定义一些变量
unsigned current_time;
int ti;
void setup()
{
// 设置数码管引脚为输出
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(s4, OUTPUT);
for (i = 0; i < 7; i++)
{
pinMode(seg[i], OUTPUT);
digitalWrite(seg[i], HIGH); // 将数码管引脚全部设为高电平
}
}
void display(int a )
{
for (i = 0; i < 7; i++)
{
if (a % 2 == 0) // 如果最后一位是0,表示该位不亮
{
digitalWrite(seg[i], HIGH);
}
else // 如果最后一位是1,表示该位亮
{
digitalWrite(seg[i], LOW);
}
a=a/2; // 右移一位,检查下一位
}
}
void loop()
{
for(t=0;t<500;t++){ // 显示每个数码管的状态
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
digitalWrite(s4, HIGH);
for(int f=0;f<=k;f++)
{
display(snake[f]); // 根据蛇的状态显示数码管
}
delay(1);
}
k++; // 下一次显示下一个数码管
if(k>6) // 如果已经显示完所有数码管,重新从第一个开始显示
{
k=0;
}
}