代码翻译,尽可能注明代码含义

#include <LedControl.h>
#include <MsTimer2.h>

#define u8 unsigned char
#define u16 unsigned int

u8 led_pin=4;

int pinInterrupt = 2;

u16 count = 0,t=100,jud;

int DIN = 0;
int CS =  1;
int CLK = 3;

LedControl lc=LedControl(DIN,CLK,CS,1);

byte  num_0[8]={B00000000,B00000000,B01111100,B01000100,B01111100,B00000000,B00000000,B00000000},
      num_1[8]={B00000000,B00000000,B00000000,B01111110,B01111110,B00000000,B00000000,B00000000},
      num_2[8]={B00000000,B00000000,B01110100,B01010100,B01010100,B01011100,B00000000,B00000000},
      num_3[8]={B00000000,B00000000,B01010100,B01010100,B01010100,B01111100,B00000000,B00000000},
      num_4[8]={B00000000,B00000000,B00011100,B00010000,B00010000,B01111100,B00000000,B00000000},
      num_5[8]={B00000000,B00000000,B01011100,B01010100,B01010100,B00100100,B00000000,B00000000};

u8 k,flag_1=0;

 void onChange()
 {
      delay(50);
    flag_1 = ~flag_1;
 }

 void wait()
 {
  while(flag_1);
  
 }
void setup() 
{
    lc.shutdown(0,false);
  lc.clearDisplay(0);
  for(led_pin=4;led_pin<14;led_pin++)
  {
      pinMode(led_pin,OUTPUT);  
  }

  // put your setup code here, to run once:

 pinMode(pinInterrupt,INPUT);
 attachInterrupt(digitalPinToInterrupt(pinInterrupt),onChange,CHANGE);
 MsTimer2::set(100,onTimer);
  MsTimer2::start();
  lc.shutdown(0,false);                  
  lc.setIntensity(0,3);                      
  lc.clearDisplay(0);                       
  
}
u8 a;

void loop() 
{
  for(led_pin=4;led_pin<14;led_pin++)
  {
    wait();
    digitalWrite(led_pin,LOW);    
    delay(analogRead(A0));
  }

    if(led_pin==14)
  led_pin=4;

  for(led_pin=4;led_pin<14;led_pin++)
  {
    wait();
    digitalWrite(led_pin,HIGH);    
    delay(analogRead(A0));
  }
  
  
}

void onTimer()
{
  count=analogRead(A0);
  count=count/200;

  switch(count)
  {
    case 5:
          lc.clearDisplay(0);  
         for (k=0;k<8;k++)         
        lc.setRow(0,k,num_5[k]); break;

    case 4:
          lc.clearDisplay(0);  
         for (k=0;k<8;k++)         
        lc.setRow(0,k,num_4[k]); break;

    case 3:
          lc.clearDisplay(0);  
         for (k=0;k<8;k++)         
        lc.setRow(0,k,num_3[k]); break;

    case 2:
          lc.clearDisplay(0);  
         for (k=0;k<8;k++)         
        lc.setRow(0,k,num_2[k]); break;

    case 1:
          lc.clearDisplay(0);  
          for (k=0;k<8;k++)         
        lc.setRow(0,k,num_1[k]); break;
    case 0:
          lc.clearDisplay(0);  
          for (k=0;k<8;k++)         
        lc.setRow(0,k,num_0[k]); break;

          }}

#include <LedControl.h>   //导入LED库
#include <MsTimer2.h>       //导入库

#define u8 unsigned char    //定义u8代替 unsigned char
#define u16 unsigned int    //定义u16代替 unsigned int

u8 led_pin = 4; //定义led针脚为4号脚

int pinInterrupt = 2;   //定义中断针脚为2号脚

u16 count = 0, t = 100, jud;    //定义三个unsigned int类型变量 并为前两个赋值

int DIN = 0;    //定义整形变量并赋值(这三个实际上时控制74HC595的三个引脚号)
int CS = 1;     //定义整形变量并赋值(这三个实际上时控制74HC595的三个引脚号)
int CLK = 3;    //定义整形变量并赋值(这三个实际上时控制74HC595的三个引脚号)

LedControl lc = LedControl(DIN, CLK, CS, 1);   //实例化led控制对象

byte  num_0[8] = { B00000000,B00000000,B01111100,B01000100,B01111100,B00000000,B00000000,B00000000 }, //定义数组 用于让led显示0
num_1[8] = { B00000000,B00000000,B00000000,B01111110,B01111110,B00000000,B00000000,B00000000 },     //定义数组 用于让led显示1
num_2[8] = { B00000000,B00000000,B01110100,B01010100,B01010100,B01011100,B00000000,B00000000 }, //定义数组 用于让led显示2
num_3[8] = { B00000000,B00000000,B01010100,B01010100,B01010100,B01111100,B00000000,B00000000 }, //定义数组 用于让led显示3
num_4[8] = { B00000000,B00000000,B00011100,B00010000,B00010000,B01111100,B00000000,B00000000 }, //定义数组 用于让led显示4
num_5[8] = { B00000000,B00000000,B01011100,B01010100,B01010100,B00100100,B00000000,B00000000 }; //定义数组 用于让led显示5

u8 k, flag_1 = 0;   //定义状态变量

void onChange() //定义函数
{
    delay(50);  //延时50ms
    flag_1 = ~flag_1;   //更改flag1状态取反
}

void wait() //定义函数
{
    while (flag_1); //只要flag1为0就一直循环

}
void setup()    //arduino主函数 用于初始化
{
    lc.shutdown(0, false);  //led点阵初始化
    lc.clearDisplay(0); //led点阵清空
    for (led_pin = 4; led_pin < 14; led_pin++)  //循环便利led引脚
    {
        pinMode(led_pin, OUTPUT);   //设置引脚模式为输出(推挽模式)
    }

    // put your setup code here, to run once:

    pinMode(pinInterrupt, INPUT);   //设置输入中断引脚
    attachInterrupt(digitalPinToInterrupt(pinInterrupt), onChange, CHANGE); //定义中断引脚发生改变时调用onChang函数
    MsTimer2::set(100, onTimer);    //设置定时器中断
    MsTimer2::start();  //开启定时器
    lc.shutdown(0, false);  //关闭点阵
    lc.setIntensity(0, 3);  //设置点阵亮度
    lc.clearDisplay(0); //清空显示

}
u8 a;

void loop()//arduino主循环
{
    for (led_pin = 4; led_pin < 14; led_pin++)  //跑马灯循环
    {
        wait();//等待函数 等待flag1变1
        digitalWrite(led_pin, LOW); //将对应的led熄灭 (如果是开漏输出则点亮)
        delay(analogRead(A0));  //按照读取的模拟量延时 模拟量越大 延时越长
    }

    if (led_pin == 14)  //跑马灯的溢出处理将最后一位赋值给起始位置
        led_pin = 4;    //跑马灯的溢出处理将最后一位赋值给起始位置

    for (led_pin = 4; led_pin < 14; led_pin++)  //跑马灯循环
    {
        wait();//等待函数 等待flag1变1
        digitalWrite(led_pin, HIGH);//将对应的led点亮  (如果是开漏输出则熄灭)  与之前的相反
        delay(analogRead(A0));//按照读取的模拟量延时 模拟量越大 延时越长
    }


}

void onTimer() //时间中断触发时执行
{
    count = analogRead(A0); //读取模拟量
    count = count / 200;    //模拟量转换 转换后量程0-5 代表0-5V电压

    switch (count) //根据模拟量转换值跳转
    {
    case 5: //电压为5V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++) //8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_5[k]); break;  //写单行的点阵值 最终实现显示数字“5” 然后跳出选择

    case 4://电压为4V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++)//8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_4[k]); break;//写单行的点阵值 最终实现显示数字“4”  然后跳出选择

    case 3://电压为3V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++)//8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_3[k]); break;//写单行的点阵值 最终实现显示数字“3”  然后跳出选择

    case 2://电压为2V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++)//8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_2[k]); break;//写单行的点阵值 最终实现显示数字“2”  然后跳出选择

    case 1://电压为1V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++)//8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_1[k]); break;//写单行的点阵值 最终实现显示数字“1”  然后跳出选择
    case 0://电压为0V时
        lc.clearDisplay(0);//清空原有显示
        for (k = 0; k < 8; k++)//8次循环 用于操作8行的点阵
            lc.setRow(0, k, num_0[k]); break;//写单行的点阵值 最终实现显示数字“0”  然后跳出选择

    }
}