
arduino// 定义控制LED的引脚数组
int num = 100;
const int ledPins[] = {16, 5, 4, 0, 2};
// 计算引脚的数量,方便循环遍历
const int ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
const int state[] = {2, 2, 2, 2, 2, 2, 2, 1, 0, 2, 2, 1, 2, 0, 2,
2, 1, 0, 2, 2, 2, 0, 1, 2, 2, 2, 2, 0, 1, 2, 2, 0, 2,
1, 2, 2, 0, 2, 2, 1, 2, 2, 0, 2, 1, 2, 2, 2, 0, 1,
1, 0, 2, 2, 2, 0, 1, 2, 2, 2, 1, 2, 0, 2, 2, 0, 2, 1,
2, 2, 1, 2, 2, 0, 2, 0, 2, 2, 1, 2, 0, 2, 2, 2, 1
};
void setstate(int data)
{
for (int i = 0; i < ledCount; i++)
{
if (state[data * 5 + i] == 1)
{
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], HIGH);
}
else if (state[data * 5 + i] == 0)
{
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
else if (state[data * 5 + i] == 2)
{
pinMode(ledPins[i], INPUT);
digitalWrite(ledPins[i], LOW);
}
else if (state[data * 5 + i] == 3)
{
pinMode(ledPins[i], INPUT);
digitalWrite(ledPins[i], HIGH);
}
}
delay(1);
}
void setup()
{
// 遍历数组,将所有LED引脚设置为输出模式
for (int i = 0; i < ledCount; i++)
{
pinMode(ledPins[i], OUTPUT);
// 初始状态设为高电平(熄灭),防止上电瞬间误亮
digitalWrite(ledPins[i], HIGH);
}
Serial.begin(115200);
}
void loop()
{
int num100, num10, num1;
num100 = (num / 100) % 10;
num10 = (num / 10) % 10;
num1 = num % 10;
if ((num100) == 1)
{
setstate(1);
}
if ((num100) == 1)
{
setstate(2);
}
if ((num10 == 0) || (num10 == 2) || (num10 == 3) || (num10 == 5) ||
(num10 == 6) || (num10 == 7) || (num10 == 8) || (num10 == 9))
{
if(num>9)setstate(3);
}
if ((num10 == 0) || (num10 == 1) || (num10 == 2) || (num10 == 3) ||
(num10 == 4) || (num10 == 7) || (num10 == 8) || (num10 == 9))
{
if(num>9)setstate(4);
}
if ((num10 == 0) || (num10 == 1) || (num10 == 3) || (num10 == 4) ||
(num10 == 5) || (num10 == 6) || (num10 == 7) || (num10 == 8) ||
(num10 == 9))
{
if(num>9)setstate(5);
}
if ((num10 == 0) || (num10 == 2) || (num10 == 3) || (num10 == 5) ||
(num10 == 6) || (num10 == 8) || (num10 == 9))
{
if(num>9)setstate(6);
}
if ((num10 == 0) || (num10 == 2) || (num10 == 6) || (num10 == 8))
{
if(num>9)setstate(7);
}
if ((num10 == 0) || (num10 == 4) || (num10 == 5) || (num10 == 6) ||
(num10 == 8) || (num10 == 9))
{
if(num>9)setstate(8);
}
if ((num10 == 2) || (num10 == 3) || (num10 == 4) || (num10 == 5) ||
(num10 == 6) || (num10 == 8) || (num10 == 9))
{
if(num>9)setstate(9);
}
if ((num1 == 0) || (num1 == 2) || (num1 == 3) || (num1 == 5) ||
(num1 == 6) || (num1 == 7) || (num1 == 8) || (num1 == 9))
{
setstate(10);
}
if ((num1 == 0) || (num1 == 1) || (num1 == 2) || (num1 == 3) ||
(num1 == 4) || (num1 == 7) || (num1 == 8) || (num1 == 9))
{
setstate(11);
}
if ((num1 == 0) || (num1 == 1) || (num1 == 3) || (num1 == 4) ||
(num1 == 5) || (num1 == 6) || (num1 == 7) || (num1 == 8) ||
(num1 == 9))
{
setstate(12);
}
if ((num1 == 0) || (num1 == 2) || (num1 == 3) || (num1 == 5) ||
(num1 == 6) || (num1 == 8) || (num1 == 9))
{
setstate(13);
}
if ((num1 == 0) || (num1 == 2) || (num1 == 6) || (num1 == 8))
{
setstate(14);
}
if ((num1 == 0) || (num1 == 4) || (num1 == 5) || (num1 == 6) ||
(num1 == 8) || (num1 == 9))
{
setstate(15);
}
if ((num1 == 2) || (num1 == 3) || (num1 == 4) || (num1 == 5) ||
(num1 == 6) || (num1 == 8) || (num1 == 9))
{
setstate(16);
}
if (Serial.available() > 0)
{
// parseInt() 会读取串口数据中的第一个有效整数
// 它会自动跳过10非数字字符(比如回车、换行符)
num = Serial.parseInt();
// 在这里你可以把 num 传递给数码管显示函数
// 例如:displayNumber(num);
}
}
本文作者:Kellermen
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!