我想不按键的时候LED2灯(对应P1.6引脚)亮,LED1灯(对应P1.0引脚)灭。
按下按键后两灯互换状态并延迟30s左右,再复位。
程序已经写好了,但不知道哪里出了点问题,不能实现我这个功能,帮忙看一下,谢谢!
#include <msp430g2553.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1OUT &= ~BIT0; //设置p1.0输出置地
P1OUT |= BIT6; //设置p1.6输出置高
P1OUT &= ~BIT0; //设置p1.0输出置地
P1DIR |= BIT6; //设置p1.6为输入
P1DIR &= ~BIT3; //设置p1.3为输入
P1REN |= BIT3; //使能内部电阻
P1OUT|=BIT3; //电阻上拉
int CLO();
RE_2: while(1)
{
switch(P1IN & BIT3)
{
case 0:
{
P1OUT |= BIT0; //p1.0开灯
P1OUT &= ~BIT6; //p1.6关灯
CLO();
P1OUT &= ~BIT0; //p1.0关灯
P1OUT |= BIT6; //p1.6开灯
break;
}
case 1:break;
}
goto RE_2;
}
}
int CLO() //延迟30s
{
int i=1;
while(1)
{
while(i<60) //12 *5s=60s
{
__delay_cycles(500000); //5s
i++;
}
}
}
建议先写个初始化函数,然后按键按下设置一个标志位,通过判断标志位来控制引脚,不过看你好像没有加消抖...最好加个消抖吧! 而且你CLO()里面有一个死循环,跳不出去的
程序进了CLO()还能出来吗?看样子你的按键也不是写的中断,那进了CLO后应该没办法离开处理其它逻辑了。
按钮消抖,
while(1)
{
}
死了。
http://www.enmaking.com/article/ar_GaD69HfQ http://www.enmaking.com/article/ar_GaD69HfQ 这是stm32的按键扫描可以借鉴下