2019-03-24 09:31发布
mengxp 发表于 2015-11-4 17:32 //由于用到了看门狗所以需要外接32768晶振 #pragma vector=WDT_VECTOR __interrupt void WDT_ISR(void) ...
最多设置5个标签!
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
//唤醒PCU
LPM0_EXIT;
}
void Sleep16ms(void)
{
WDTCTL = WDT_ADLY_16; //看门狗16ms
LPM0; //cpu睡眠等狗叫
WDTCTL = WDTPW + WDTHOLD; //关狗
}
#define BUTTON_DOWN !(P1IN & BIT3)
#define BUTTON_UP (P1IN & BIT3)
int IsButtonDown(void)
{
//检查按钮是否被按下 低电平按下
if(BUTTON_DOWN)
{
//等待16ms
Sleep16ms();
if(BUTTON_DOWN)
{
//确实按下了
return 1;
}
}
return 0;
}
int IsButtonUp(void)
{
//检查按钮是否抬起 高电平抬起
if(BUTTON_UP)
{
//等待16ms
Sleep16ms();
if(BUTTON_UP)
{
//确实抬起了
return 1;
}
}
return 0;
}
//低电平LED亮,高电平LED灭
void ChangeLED()
{
if(P1OUT & BIT0)
{
//1.0灭的,点亮他
P1OUT &= ~BIT0;
//熄灭1.6
P1OUT |= BIT6;
}
else
{
//1.0亮的,熄灭他
P1OUT |= BIT0;
//点亮1.6
P1OUT &= ~BIT6;
}
}
int main()
{
//先关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
//配置GPIO
P1DIR |= BIT0 | BIT6; //P1.0 P1.6输出
P1DIR &= ~BIT3; //P1.3输入
while(1)
{
//等待按键被按下
if(IsButtonDown())
{
//灯切换
ChangeLED();
//等待按键抬起
while(!IsButtonUp)
{
Sleep16ms();
}
}
//睡16ms先
Sleep16ms();
}
}
十分感谢
一周热门 更多>