能不能帮我改进以上代码,让数码管可以跟随led灯闪烁在八种按键时切换,分别显示1-8的数字,代表什么模式切换
时间: 2024-03-10 10:50:38 浏览: 54
用菜单键选择单独的数码管闪烁,+1或-1
好的,我可以帮你改进这段代码,让数码管显示可以跟随 LED 灯的闪烁,并且在八种按键时切换,分别显示 1-8 的数字,代表不同的模式切换。以下是修改后的代码:
```c
#include <reg51.h>
unsigned char m[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管对应数字的编码
void delay(unsigned int xms) {
unsigned int i, j;
for(i=0; i<xms; ++i)
for(j=0; j<110; ++j);
}
void delay1ms(unsigned char c) {
unsigned char a,b;
for(c ;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main() {
unsigned char mode = 1; // 初始模式为1
while(1) {
// 检测按键输入
if(P0 == 0xFE) { // 第一种按键模式
mode = 1;
P2 = m[1]; // 显示数字1
} else if(P0 == 0xFD) { // 第二种按键模式
mode = 2;
P2 = m[2]; // 显示数字2
} else if(P0 == 0xFB) { // 第三种按键模式
mode = 3;
P2 = m[3]; // 显示数字3
} else if(P0 == 0xF7) { // 第四种按键模式
mode = 4;
P2 = m[4]; // 显示数字4
} else if(P0 == 0xEF) { // 第五种按键模式
mode = 5;
P2 = m[5]; // 显示数字5
} else if(P0 == 0xDF) { // 第六种按键模式
mode = 6;
P2 = m[6]; // 显示数字6
} else if(P0 == 0xBF) { // 第七种按键模式
mode = 7;
P2 = m[7]; // 显示数字7
} else if(P0 == 0x7F) { // 第八种按键模式
mode = 8;
P2 = m[8]; // 显示数字8
}
// LED 灯闪烁
P1 = 0x00; // LED 灯全部熄灭
delay(200);
P1 = 0xFF; // LED 灯全部点亮
delay(200);
// 根据模式切换数码管显示
switch(mode) {
case 1:
P2 = m[1]; // 显示数字1
break;
case 2:
P2 = m[2]; // 显示数字2
break;
case 3:
P2 = m[3]; // 显示数字3
break;
case 4:
P2 = m[4]; // 显示数字4
break;
case 5:
P2 = m[5]; // 显示数字5
break;
case 6:
P2 = m[6]; // 显示数字6
break;
case 7:
P2 = m[7]; // 显示数字7
break;
case 8:
P2 = m[8]; // 显示数字8
break;
}
}
}
```
在这段代码中,我添加了一个变量 `mode` 来表示当前的模式,初始为 1。在每次检测到按键输入时,根据按键的不同,改变 `mode` 的值,并在数码管上显示相应的数字。同时,在 LED 灯上进行闪烁。在每次循环中,根据 `mode` 的值来切换数码管的显示。
阅读全文