32最小系统板 1个按键控制八个流水灯速度 一个数码管显示
时间: 2023-05-31 15:06:21 浏览: 95
当前流水灯速度。
以下是一个可能的32最小系统板的代码:
```c
#include <reg52.h>
sbit KEY = P3^2;
sbit LED = P1^0;
sbit DIGIT_SEL = P1^1;
sbit DIGIT = P1^2;
unsigned char speed = 0; // 0-7
unsigned char digit = 0; // 0-3
unsigned char code LED_PATTERN[8] = {
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
};
unsigned char code DIGIT_PATTERN[4] = {
0xC0, 0xF9, 0xA4, 0xB0
};
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 125; j++);
}
}
void main() {
while (1) {
if (!KEY) {
delay(10);
if (!KEY) {
speed++;
if (speed > 7) {
speed = 0;
}
}
while (!KEY);
}
LED = LED_PATTERN[digit];
delay(100 - 10 * speed);
LED = 0;
digit++;
if (digit > 7) {
digit = 0;
}
DIGIT_SEL = 1;
DIGIT = DIGIT_PATTERN[speed >> 1]; // 显示速度的十位
DIGIT_SEL = 0;
delay(2);
DIGIT_SEL = 1;
DIGIT = DIGIT_PATTERN[speed & 0x01]; // 显示速度的个位
DIGIT_SEL = 0;
delay(2);
}
}
```
这个代码使用了一个`delay`函数来实现延时,每次循环中检测按键状态,如果按键按下,则速度加一,并且在0-7之间循环。然后每次循环中点亮一个流水灯,并且在数码管上显示当前速度。注意到数码管有四个数字,但是只需要显示两个数字,因此使用了两个`DIGIT_PATTERN`来分别表示速度的十位和个位。在每次循环中,先点亮一个数码管的选择端口,然后将对应的数码`DIGIT_PATTERN`输出到数码管的数据端口,最后延时一段时间后,再将选择端口拉低,表示显示下一个数码。
阅读全文