// 引入必要的库
#include <SevSeg.h>

// 数码管的引脚连接
#define DIGIT_1 2
#define DIGIT_2 3
#define DIGIT_3 4
#define DIGIT_4 5
#define SEGMENT_A 6
#define SEGMENT_B 7
#define SEGMENT_C 8
#define SEGMENT_D 9
#define SEGMENT_E 10
#define SEGMENT_F 11
#define SEGMENT_G 12
#define SEGMENT_DP 13

// 创建数码管对象
SevSeg sevseg;

void setup() {
  // 设置数码管引脚
  byte numDigits = 4;
  byte digitPins[] = {DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4};
  byte segmentPins[] = {SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_DP};
  
 
  byte hardwareConfig = COMMON_ANODE; //四位共阴极七段数码管
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins);
  
}

void loop() {
 //显示-9~-1
 for(int j=-9;j<=-1;j=j+1){
  for (int i=1;i<=500;i++){
    sevseg.setNumber(j);
    sevseg.refreshDisplay();
    delay(1);
    sevseg.blank();
  }
  
 }


 //显示-0.9~-0.1
 for(float j=-0.9;j<0;j=j+0.1){
  for (int i=1;i<=800;i++){
    sevseg.setNumberF(j,1);//一位小数
    sevseg.refreshDisplay();
    delay(1);
    sevseg.blank();
  }
  
 }

 //显示0~20
 for(int j=0;j<=20;j++){
 
  if ( isPrime(j) ){
    for (int k=1;k<=3;k++){
      for (int i=1;i<=800;i++){
        sevseg.setNumber(j);
        sevseg.refreshDisplay();
        delay(1);
        sevseg.blank();
      }
      delay(500);
    }
  }
  else{
    for (int i=1;i<=800;i++){
      sevseg.setNumber(j);
      sevseg.refreshDisplay();
      delay(1);
      sevseg.blank();
    }
    
  }
 }
}

int isPrime(int num) {
    // 如果数字小于等于1,则不是质数
    if (num <= 1) {
        return 0;
    }
    // 对2进行特殊处理
    if (num == 2) {
        return 1;
    }
    // 如果能被2整除,那么不是质数
    if (num % 2 == 0) {
        return 0;
    }
    // 循环检查是否能被奇数整除
    for (int i = 3; i * i <= num; i += 2) {
        if (num % i == 0) {
            return 0;
        }
    }
    // 如果都不能整除,则是质数
    return 1;
}