谁来帮帮我 帮我开心你

设计并制作一个电路(2)
由4个数码管组成,上电无显示,红色L
E 亮,说明可以输入数据;
2、第一次按下K1,最#边的数码管显示
0,其他数码管不亮,第二次按下K1,数
码管显示01,其他数码管不亮,第三次按
下 1,数码管显示012,以此类推,直到
数码管显示0123并锁定状态,即此时 1无
效;
3、按下K2恢复初始状态

刚刚回答过了


int count = 0; //计数器初始值为0
bool lock = false; //锁定状态初始值为false

void setup()
{
  pinMode(2, OUTPUT); //设置LED为输出模式
  digitalWrite(2, HIGH); //红色LED初始亮
}

void loop()
{
  if (!lock) //未锁定状态
  {
    if (digitalRead(3) == LOW) //检测K1是否按下
    {
      count++; //计数器加1
      if (count > 3) //计数器大于3,锁定状态
      {
        lock = true; //锁定状态为true
      }
    }
    if (digitalRead(4) == LOW) //检测K2是否按下
    {
      count = 0; //计数器清零
      lock = false; //锁定状态为false
    }
  }
  display(count); //在数码管上显示计数器的值
}

void display(int num) //数码管显示函数
{
  int digit[] = {9, 10, 11, 12}; //定义数码管引脚
  int code[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //定义数码管显示码
  for (int i = 0; i < 4; i++)
  {
    digitalWrite(digit[i], LOW); //数码管引脚为低电平
    delay(5); //延时5ms
    digitalWrite(digit[i], HIGH); //数码管引脚为高电平
    digitalWrite(13, LOW); //点亮所有数码管
    shiftOut(8, 9, MSBFIRST, code[num % 10]); //将个位数显示在数码管上
    shiftOut(8, 9, MSBFIRST, code[num / 10]); //将十位数显示在数码管上
    delay(10); //延时10ms
    digitalWrite(13, HIGH); //熄灭所有数码管
  }
}