单片机用for循环写闪烁灯
时间: 2024-09-06 17:03:15 浏览: 19
单片机上使用for循环控制LED灯闪烁通常涉及到定时器和中断机制。这里假设你是在8051系列或者类似的单片机环境中,例如Arduino Uno。
首先,你需要设置一个计数器或者定时器,比如用PIT(Programmable Interval Timer)。然后通过定时器溢出中断服务函数(Timer Overflow ISR),每到达某个时间间隔就改变LED的状态。
```c
#include <avr/io.h>
#include <util/delay.h>
// 定义LED和定时器的相关寄存器地址
#define PORTB DDRB // 输出数据端口
#define PIN_B0 PB0 // LED连接到PB0
void setup() {
DDRB |= (1 << PIN_B0); // 设置PB0为输出
TCCR1B = (1 << CS10) | (1 << WGM12); // 使用模式2,16MHz时钟分频为1024,定时1ms
TIMSK1 = (1 << TOIE1); // 开启定时器1溢出中断
}
ISR(TIMER1_OVF_vect) { // 定时器1溢出中断处理函数
static uint8_t state = 0; // 定义一个状态变量,0代表熄灭,1代表点亮
PORTB ^= (1 << PIN_B0); // 切换LED状态
if (++state > 2) state = 0; // 每两个周期切换状态,形成闪烁效果
_delay_ms(100); // 等待下一个周期
}
int main(void) {
sei(); // 启动全局中断
while (1); // 无限循环
}
```