基于at89c51单片机的16个led流水灯程序,首先要求led灯依次轮流点亮,然后间隔一个依次点亮,然后全亮全灭交替,然后自主设计三种花样,最后循环以上花样
时间: 2023-10-09 20:10:10 浏览: 208
02_点亮LED1_电量LED_
好的,这是一个基于AT89C51单片机的16个LED流水灯程序,实现了你的所有要求:
```c
#include <reg51.h>
// 定义IO口
#define LED P1
// 延时函数
void delay(unsigned int time) {
unsigned int i, j;
for (i = 0; i < time; i++)
for (j = 0; j < 125; j++);
}
// 点亮一个LED
void light_on(int index) {
LED = ~(1 << index);
}
// 熄灭一个LED
void light_off(int index) {
LED = 0xff;
}
// 点亮所有LED
void all_on() {
LED = 0x00;
}
// 熄灭所有LED
void all_off() {
LED = 0xff;
}
// 16个LED流水灯
void flow_led() {
int i;
for (i = 0; i < 16; i++) {
light_on(i);
delay(50);
light_off(i);
}
}
// 16个LED间隔一个流水灯
void interval_led() {
int i;
for (i = 0; i < 16; i += 2) {
light_on(i);
}
delay(500);
for (i = 0; i < 16; i += 2) {
light_off(i);
}
}
// 全亮全灭交替
void all_on_off() {
all_on();
delay(500);
all_off();
delay(500);
}
// 自主设计三种花样
void pattern1() {
int i;
for (i = 0; i < 16; i += 3) {
light_on(i);
}
delay(500);
for (i = 0; i < 16; i += 3) {
light_off(i);
}
}
void pattern2() {
int i;
for (i = 0; i < 8; i++) {
light_on(i);
light_on(15 - i);
delay(50);
light_off(i);
light_off(15 - i);
}
}
void pattern3() {
int i;
for (i = 0; i < 16; i++) {
light_on(i);
delay(50);
light_off(i);
delay(50);
}
}
void main() {
while (1) {
flow_led();
interval_led();
all_on_off();
pattern1();
pattern2();
pattern3();
}
}
```
这个程序定义了一些宏和函数来实现各种效果。在主函数中,程序不断循环执行各种效果,直到程序停止。注意,由于AT89C51单片机的时钟频率为12MHz,因此延时函数的参数需要根据具体的情况进行调整。
阅读全文