静态数码管显示的按键控制直流电机转速程序
时间: 2023-11-19 17:02:49 浏览: 33
以下是一个简单的实现,使用4位7段静态数码管显示电机转速,按键控制电机转速增加或减少:
```C++
// 定义数码管引脚
#define SEG_A 2
#define SEG_B 3
#define SEG_C 4
#define SEG_D 5
#define SEG_E 6
#define SEG_F 7
#define SEG_G 8
// 定义按键引脚
#define KEY_UP 9
#define KEY_DOWN 10
// 定义电机引脚
#define MOTOR_PIN 11
// 定义电机速度变量
int motor_speed = 0;
void setup() {
// 设置数码管引脚为输出
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
// 设置按键引脚为输入
pinMode(KEY_UP, INPUT_PULLUP);
pinMode(KEY_DOWN, INPUT_PULLUP);
// 设置电机引脚为输出
pinMode(MOTOR_PIN, OUTPUT);
// 初始化数码管显示
displayNumber(motor_speed);
}
void loop() {
// 检测按键状态
if(digitalRead(KEY_UP) == LOW) {
// 按下增加速度按键
motor_speed++;
if(motor_speed > 255) {
motor_speed = 255;
}
displayNumber(motor_speed);
}
if(digitalRead(KEY_DOWN) == LOW) {
// 按下减少速度按键
motor_speed--;
if(motor_speed < 0) {
motor_speed = 0;
}
displayNumber(motor_speed);
}
// 控制电机转速
analogWrite(MOTOR_PIN, motor_speed);
}
// 显示数字函数
void displayNumber(int number) {
// 定义数码管数字编码
byte displayDigits[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
};
// 分离数字的每一位并显示
digitalWrite(SEG_A, bitRead(displayDigits[number / 100], 0));
digitalWrite(SEG_B, bitRead(displayDigits[number / 100], 1));
digitalWrite(SEG_C, bitRead(displayDigits[number / 100], 2));
digitalWrite(SEG_D, bitRead(displayDigits[number / 100], 3));
digitalWrite(SEG_E, bitRead(displayDigits[number / 100], 4));
digitalWrite(SEG_F, bitRead(displayDigits[number / 100], 5));
digitalWrite(SEG_G, bitRead(displayDigits[number / 100], 6));
}
```
在这个程序中,我们使用了一个变量 `motor_speed` 来存储电机速度,初始值为0。我们还定义了两个按键,一个用于增加速度,另一个用于减少速度。当按下按键时,我们会修改 `motor_speed` 的值,并使用 `displayNumber()` 函数更新数码管显示。在 `loop()` 函数中,我们使用 `analogWrite()` 函数来控制电机转速,其值等于 `motor_speed`。
`displayNumber()` 函数使用了一个字节数组 `displayDigits[]` 来存储数码管数字编码。我们将 `number` 参数分离成三个数字,分别显示在三个数码管上。
请注意,这只是一个简单的示例程序,没有使用任何电机控制电路保护措施,实际应用中需要根据具体情况进行改进。