const int dataPin = 2;
const int clockPin = 4;
const int latchPin = 12;
const int keyPin = 13;
int preKeyVal = 1;
int keyState = 1; // 通常按键未按下时状态为 HIGH
unsigned long preTime = 0;
int debounceDelay = 10;
int keyNum = 0; // 保存按键次数
int stepNum = 1; // 数据变化的步长值
boolean firstFlag = true; // keyNum 第一次为 1
byte NUM[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0x00}; // 修正 0x0 为 0x00
void setup() {
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(keyPin, INPUT);
// 等待按键释放
while (digitalRead(keyPin)) { //1的时候永远循环
//displayDigit(10);
}
// 显示数字 0 到 9
for (int i = 9; i >= 0; i--) {
displayDigit(i);
delay(300);
}
}
void loop() {
getKeyState();
displayDigit(keyNum);
}
void getKeyState() {
int keyVal = digitalRead(keyPin);
if (keyVal != preKeyVal) {
preTime = millis();
preKeyVal = keyVal;
}
if ((millis() - preTime) > debounceDelay) {
if (keyVal != keyState) {
keyState = keyVal;
if (keyVal == HIGH) { // 按键按下
keyNum += stepNum;
if(keyNum==5){
stepNum=-1;
}
if(keyNum==1){
stepNum=1;
}
/* keyNum += stepNum;
if (!firstFlag) {
if ((keyNum == 1) || (keyNum == 5)) { //if ((keyNum == 1) || (keyNum == 5))
stepNum = -stepNum; //没有十年脑血栓想不出来,不适合小初
}
}
firstFlag = false; */
}
}
}
}
void displayDigit(byte num) {
shiftOut(dataPin, clockPin, LSBFIRST, ~NUM[num]);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}