要求在延时期间按下按键,小灯也能点亮
时间: 2024-03-13 15:43:14 浏览: 51
即拍延时小夜灯
根据您的要求,以下是修改后的代码:
```c
#include <msp430.h>
volatile int count = 0; // 定义计数器变量
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1DIR |= BIT2; // P1.2设为输出
P7REN |= BIT0; // P7.0设为输入
P7OUT |= BIT0; // P7.0上拉电阻
while (1)
{
if ((P7IN & BIT0) == 0) // 检测按键是否按下
{
count++; // 计数器加1
__delay_cycles(1000); // 延时去抖
while ((P7IN & BIT0) == 0); // 等待按键松开
}
if (count == 1) // 第1次按键
{
int i;
for (i = 0; i < 30000; i++) // 延时30秒
{
if ((P7IN & BIT0) == 0) // 检测按键是否按下
{
count++; // 计数器加1
__delay_cycles(1000); // 延时去抖
while ((P7IN & BIT0) == 0); // 等待按键松开
break; // 跳出循环
}
__delay_cycles(1000); // 延时1毫秒
}
if (i == 30000) // 30秒内未按下按键
{
P1OUT &= ~BIT2; // 小灯熄灭
}
}
else if (count == 2) // 第2次按键
{
P1OUT |= BIT2; // 小灯点亮
count = 0; // 计数器清零
}
}
}
```
修改后的代码中,使用了一个for循环来实现延时,并在循环内部判断是否有按键按下。如果在延时期间按下按键,则计数器加1,跳出循环。如果在30秒内没有按下按键,则熄灭小灯。这样就可以实现在延时期间按下按键,小灯也能点亮的功能了。
阅读全文