pic单片机定时器2实现按键按下松开后led灯一直闪烁,闪烁频率1s一次
时间: 2024-05-11 15:14:00 浏览: 6
以下是用PIC单片机定时器2实现按键按下松开后LED灯一直闪烁,闪烁频率1s一次的代码:
```
#include <xc.h>
#include <pic16f877a.h>
// 定义LED灯的端口
#define LED PORTBbits.RB0
// 定义按键的端口
#define KEY PORTBbits.RB1
// 定义定时器2的初值
#define TMR2_INIT 131
// 定义计数器的初值
#define CNT_INIT 0
// 定义计数器的上限,用于控制闪烁频率
#define CNT_MAX 125
// 定义闪烁状态
#define LED_ON 1
#define LED_OFF 0
// 中断服务程序
void interrupt ISR(void)
{
// 定时器2溢出中断
if(TMR2IF)
{
// 将计数器加1
TMR2IF = 0;
TMR2 = TMR2_INIT;
CNT++;
// 如果计数器超过了上限,则改变LED灯的状态并重置计数器
if(CNT >= CNT_MAX)
{
CNT = CNT_INIT;
if(LED == LED_ON)
LED = LED_OFF;
else
LED = LED_ON;
}
}
}
void main()
{
// 初始化端口
TRISB = 0b00000010;
PORTB = 0;
// 初始化定时器2
T2CON = 0b00000100;
PR2 = 255;
TMR2 = TMR2_INIT;
// 初始化中断
INTCON = 0b11000000;
PIE1 = 0b00000100;
// 初始化计数器和LED灯
CNT = CNT_INIT;
LED = LED_OFF;
while(1)
{
// 按键按下
if(KEY == 0)
{
// 等待按键松开
while(KEY == 0);
// 改变LED灯的状态
if(LED == LED_ON)
LED = LED_OFF;
else
LED = LED_ON;
}
}
}
```