数码管显示(静态+动态),按下k1k2数码管数字加一,按下k3k4数码管数字减一,k1k3控制数码管左四位,k2k4控制数码管右四位。(加需要能加到100,减需要能减到-10)。怎么写代码
时间: 2023-04-05 19:03:51 浏览: 196
以下是一个可能的代码实现,但并不保证完全正确或最优:
```
#include <Arduino.h>
const int digitPins[] = {2, 3, 4, 5}; // 数码管位选引脚
const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; // 数码管段选引脚
const int k1Pin = A0;
const int k2Pin = A1;
const int k3Pin = A2;
const int k4Pin = A3;
int digits[8] = {0}; // 数码管显示的数字
int currentDigit = 0; // 当前位选的数码管
int currentNumber = 0; // 当前显示的数字
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(k1Pin, INPUT_PULLUP);
pinMode(k2Pin, INPUT_PULLUP);
pinMode(k3Pin, INPUT_PULLUP);
pinMode(k4Pin, INPUT_PULLUP);
}
void loop() {
// 按下 k1 或 k2,数字加一
if (digitalRead(k1Pin) == LOW || digitalRead(k2Pin) == LOW) {
currentNumber++;
if (currentNumber > 100) {
currentNumber = 0;
}
}
// 按下 k3 或 k4,数字减一
if (digitalRead(k3Pin) == LOW || digitalRead(k4Pin) == LOW) {
currentNumber--;
if (currentNumber < -10) {
currentNumber = 100;
}
}
// 拆分数字到数组中
int n = currentNumber;
for (int i = 7; i >= 0; i--) {
digits[i] = n % 10;
n /= 10;
}
// 显示数字
digitalWrite(digitPins[currentDigit], LOW);
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digits[currentDigit * 2 + i / 4] & (1 << (i % 4)));
}
digitalWrite(digitPins[currentDigit], HIGH);
// 切换位选
currentDigit++;
if (currentDigit >= 4) {
currentDigit = 0;
}
// 稍作延时
delay(5);
}
```
阅读全文