本项目提供了一种实现8个LED灯依次亮起和熄灭(即流水灯效果)的方法,并展示了通过不同的编程技巧来增加更多样化的动态显示效果。
下面是用于实现多种花样效果的8灯流水灯代码:
```c
#include
unsigned char code seg[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe, 0xff,
0xff, 0x00, 0x55, 0x55, 0xaa, 0xaa}; // ROM中定义的花样数据
void delay(unsigned int cnt) {
while (--cnt);
}
int main() {
unsigned char i;
while (1) {
P2 = 0xFE; // 第一个LED亮
for(i=0;i<8;i++) {
delay(10000);
P2 <<= 1;
}
P2 = 0x7F; // 第七个LED亮
for(i=0;i<8;i++) {
delay(10000);
P2 >>= 1;
}
P2 = 0xFE; // 第一个LED亮
for (i=0; i < 8 ; i++){
delay(10000);
P2 <<= 1;
P2 |= 0x01;
}
P2 = 0x7F; // 第七个LED亮
for(i=0;i<8;i++) {
delay(10000);
P2 >>= 1;
P2 |= 0x80;
}
/*以下代码通过查表方法来获取花样参数*/
for (i = 0; i < 16 ; i++){
delay(20000);
P2 = seg[i];
}
}
}
```
接下来是流星雨效果的实现:
```c
#include
#include
#define uint unsigned int
void delay(uint n) {
while(n--);
}
int main() {
mmm:
P1 = 0xFE;
delay(15000);
while (1){
P1 = P1 << 1;
delay(15000);
if(P1 == 0x0) {
P1 = 0x82;
goto mm;
}
}
mm:
while (1){
P1=_crol_(P1, 1)+1;
delay(15000);
if(P1==0xff)
{delay(350);goto mmm;}
}
}
```
以上代码展示了如何使用查表方法来实现LED灯的多种花样效果,以及一种特殊的流星雨灯光效果。