pic单片机实现按键按下后,灯每隔1s闪烁一次
时间: 2024-05-12 11:20:58 浏览: 65
单片机闪烁灯,间隔0.2秒
以下是一个基于PIC单片机的代码,实现了按下按键后,灯每隔1秒闪烁一次:
```c
#include <xc.h>
#include <pic16f877a.h>
// 定义晶振频率和延时函数
#define _XTAL_FREQ 4000000
#define DELAY_MS(ms) __delay_ms(ms)
// 配置端口
void init_ports() {
TRISB = 0b00000001; // RB0(即按键)设为输入,其余设为输出
PORTB = 0b00000000; // 所有输出置为低电平
}
// 延时函数,单位为毫秒
void delay(unsigned int ms) {
while (ms--) {
DELAY_MS(1);
}
}
// 切换LED状态
void toggle_led() {
PORTB ^= 0b00000010; // 利用异或运算切换LED状态
}
int main() {
init_ports(); // 配置端口
while (1) { // 主循环
if (!RB0) { // 如果按键被按下
delay(1000); // 延时1秒
toggle_led(); // 切换LED状态
}
}
return 0;
}
```
在这个代码中,我们利用了`__delay_ms()`函数实现了延时,相当于在每次LED状态切换后暂停了1秒。同时,我们使用了`PORTB`寄存器来控制LED的亮灭,使用了`TRISB`寄存器来配置端口。当按键被按下时,程序会进入延时函数,并在延时结束后切换LED状态。由于程序会一直循环执行,因此按键按下后,LED每隔1秒就会闪烁一次。
阅读全文