b) 流水灯式显示1s:1→1、2→1、2、3→1、2、3、4→…→1、2、3、4、5、6、7、8,全部闪烁显示3s后,逆序熄灭
时间: 2023-07-10 08:14:20 浏览: 45
以下是基于C语言的流水灯式显示程序,可以实现你所描述的功能:
```c
#include <reg52.h> // 8051寄存器头文件
// 定义数码管码表
unsigned char code LED_TBL[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
// 延时函数
void delay(unsigned int t) {
unsigned int i, j;
for(i=0; i<t; i++) {
for(j=0; j<125; j++) {
// do nothing
}
}
}
void main() {
unsigned char i, j, k;
unsigned char cnt = 1;
unsigned char dir = 1;
while(1) {
// 顺序显示
for(i=0; i<cnt; i++) {
P0 = LED_TBL[i];
delay(1000);
}
// 全部闪烁
for(i=0; i<8; i++) {
P0 = 0xFF;
delay(200);
P0 = 0x00;
delay(200);
}
// 逆序熄灭
for(i=cnt; i>0; i--) {
P0 = LED_TBL[i-1];
delay(1000);
}
// 更新计数器和方向
if(dir == 1) {
cnt++;
if(cnt == 8) {
dir = 0;
}
} else {
cnt--;
if(cnt == 1) {
dir = 1;
}
}
}
}
```
上述代码使用了一个计数器cnt和一个方向标志dir来控制流水灯的顺序和逆序。在顺序显示和逆序熄灭的过程中,使用了一个for循环和延时函数来实现1秒钟的延时。在全闪烁的过程中,使用了一个for循环和延时函数来交替控制灯的开关,实现闪烁的效果。