// 定义引脚
const int loadPin = 2;
const int clockPin = 3;
const int dataPin = 4;
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 设置引脚模式
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
// 初始状态
digitalWrite(loadPin, HIGH);
digitalWrite(clockPin, LOW);
}
void loop() {
byte buttonStates = readButtons();
// 检测每个按钮是否按下
for (int i = 0; i < 8; i++) {
if (bitRead(buttonStates, i) == 1) {
Serial.print("按钮 D");
Serial.print(i);
Serial.println(" 被按下了");
}
}
// 打印每个按钮状态
for (int i = 0; i < 8; i++) {
Serial.print(bitRead(buttonStates, i));
Serial.print(" ");
}
Serial.println();
delay(50);
}
byte readButtons() {
byte states = 0;
// 加载数据
digitalWrite(loadPin, LOW);
delayMicroseconds(2);
digitalWrite(loadPin, HIGH);
// 读取数据
for (int i = 0; i < 8; i++) {
states |= (digitalRead(dataPin) << i);
digitalWrite(clockPin, HIGH);
delayMicroseconds(2);
digitalWrite(clockPin, LOW);
}
return states;
}