C51+八位花样流水灯
时间: 2023-12-12 21:34:46 浏览: 101
以下是C51+八位花样流水灯的代码实现和详细步骤:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^1; // 定义K1按键
sbit K2 = P3^0; // 定义K2按键
sbit K3 = P3^2; // 定义K3按键
sbit K4 = P3^3; // 定义K4按键
uchar code table[] = { // 定义显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void delay(uint xms) { // 延时函数
uint i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main() {
uchar i = 0, j = 0, k = 0, l = 0; // 定义计数器
while (1) {
if (K1 == 0) { // K1按下
delay(10); // 延时去抖
if (K1 == 0) { // 再次判断是否按下
while (!K1) {} // 等待按键释放
while (1) { // K1循环左移
P0 = table[i];
delay(500);
i++;
if (i == 8) i = 0;
if (K2 == 0 || K3 == 0 || K4 == 0) break; // 判断其他按键是否按下
}
}
}
if (K2 == 0) { // K2按下
delay(10); // 延时去抖
if (K2 == 0) { // 再次判断是否按下
while (!K2) {} // 等待按键释放
while (1) { // K2循环右移
P0 = table[j];
delay(500);
if (j == 0) j = 8;
j--;
if (K1 == 0 || K3 == 0 || K4 == 0) break; // 判断其他按键是否按下
}
}
}
if (K3 == 0) { // K3按下
delay(10); // 延时去抖
if (K3 == 0) { // 再次判断是否按下
while (!K3) {} // 等待按键释放
while (1) { // K3两侧到中心来回点亮
P0 = table[k];
P0 = table[l];
delay(500);
if (k == 7) k = 0;
else k++;
if (l == 0) l = 7;
else l--;
if (K1 == 0 || K2 == 0 || K4 == 0) break; // 判断其他按键是否按下
}
}
}
if (K4 == 0) { // K4按下
delay(10); // 延时去抖
if (K4 == 0) { // 再次判断是否按下
while (!K4) {} // 等待按键释放
while (1) { // K4单双数位置交替点亮
P0 = 0x55;
delay(500);
P0 = 0xaa;
delay(500);
if (K1 == 0 || K2 == 0 || K3 == 0) break; // 判断其他按键是否按下
}
}
}
}
}
```
步骤:
1. 定义K1、K2、K3、K4按键和显示表。
2. 编写延时函数。
3. 在主函数中,使用while(1)循环,不断检测按键是否按下。
4. 如果K1按下,进入K1循环左移的代码块,不断将显示表中的数码依次往左移动,并判断其他按键是否按下。
5. 如果K2按下,进入K2循环右移的代码块,不断将显示表中的数码依次往右移动,并判断其他按键是否按下。
6. 如果K3按下,进入K3两侧到中心来回点亮的代码块,不断将显示表中的数码从两侧到中心来回点亮,并判断其他按键是否按下。
7. 如果K4按下,进入K4单双数位置交替点亮的代码块,不断将显示表中的数码单双数位置交替点亮,并判断其他按键是否按下。
8. 如果其他按键按下,跳出当前代码块,回到while(1)循环。
阅读全文