控制流水灯每两个一组依次亮灭的c语言代码
时间: 2024-09-14 10:09:42 浏览: 42
单片机C语言Proteus仿真实例TIMER0控制流水灯
在C语言中,控制流水灯每两个一组依次亮灭,通常会使用定时器和位操作来实现。这里是一个简单的示例,假设我们有8个LED灯,分为4组,每组两个:
```c
#include <avr/io.h>
#include <util/delay.h> // 使用延时函数
#define F_CPU 16000000UL // 设置CPU频率
#define LED_PORT DDRB // 灯泡端口定义
#define LED_DDR PORTB // 端口方向寄存器定义
#define GROUP_SIZE 2
void delay_ms(int ms) {
int i;
for (i = 0; i < ms * 5; ++i); // 延迟时间
}
void turn_on_leds(uint8_t group) {
LED_DDR &= ~(1 << (group * GROUP_SIZE)); // 关闭所有灯
LED_DDR |= (1 << (group * GROUP_SIZE + 1)); // 开启第一个灯
LED_DDR |= (1 << (group * GROUP_SIZE)); // 开启第二个灯
}
void main() {
uint8_t group = 0;
sei(); // 初始化中断处理
DDRB = 0; // 设置初始状态全关
while(1) { // 无限循环
turn_on_leds(group);
_delay_ms(500); // 亮500毫秒
LED_DDR &= ~(1 << (group * GROUP_SIZE)); // 关闭当前组
group = (group + 1) % GROUP_SIZE; // 切换到下一组
if (group == 0) { // 如果回到第一组,再等一轮
_delay_ms(500); // 暂停一段时间
}
}
}
```
阅读全文