#include <msp430x14x.h>
#include "config.h"
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
void key_process_3(void);
void key_check(void);
uint key_value=0x00;
void main()
{
WDT_Init();
Clock_Init();
Port_init();
delay_ms(100);
key_value=0x00;
_EINT();
LPM3;
while(1){
P1IE &=~0x0f;
P1IFG &=~0x0f;
key_check();
if(key_value==0x01)
{
key_process_0();
}
if(key_value==0x02)
{
key_process_1();
}
if(key_value==0x03)
{
key_process_2();
}
if(key_value==0x04)
{
key_process_3();
}
key_value=0x00;
P1IE |=0x0f;
P1IFG &=~0x0f;
LPM3;
}
}
void key_check(void)
{
delay_ms(100);
if(0xff!=P1IN|0xf0)
{
while(0xff!=P1IN|0xf0);
}
else
{
key_value=0x00;
}
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT_1(void)
{
switch(P1IFG&0x0f)
{
case 0x01:key_value=0x01;
break;
case 0x02:key_value=0x02;
break;
case 0x04:key_value=0x03;
break;
case 0x08:key_value=0x04;
break;
default:P1IFG=0x00;
break;
}
P1IFG &=~0x0f;
LPM3_EXIT;
}
void key_process_0(void)
{
P6OUT &=~BIT0;
delay_ms(1000);
P6OUT |=BIT0;
delay_ms(1000);
P6OUT &=~BIT0;
delay_ms(1000);
P6OUT |=BIT0;
}
void key_process_1(void)
{
P6OUT &=~BIT1;
delay_ms(1000);
P6OUT |=BIT1;
delay_ms(1000);
P6OUT &=~BIT1;
delay_ms(1000);
P6OUT |=BIT1;
}
void key_process_2(void)
{
P6OUT &=~BIT2;
delay_ms(1000);
P6OUT |=BIT2;
delay_ms(1000);
P6OUT &=~BIT2;
delay_ms(1000);
P6OUT |=BIT2;
}
void key_process_3(void)
{
P6OUT &=~BIT3;
delay_ms(1000);
P6OUT |=BIT3;
delay_ms(1000);
P6OUT &=~BIT3;
delay_ms(1000);
P6OUT |=BIT3;
}
希望对应的按键按下时对应LED亮起,无按键时进入低功耗模式,出现中断再唤醒
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>