关于msp430g2553编程问题
是这样的,楼主是小白,需要写一个程序,按一下p1.3为一次中断,p1.0和p1.6为输出,要求按四下输出四种不同的状态,其中要用到状态机,下面是楼主自己写的程序,编译没有问题。但是不能输出结果,望哪位给解答一下该怎么写。。
#include "msp430g2553.h"
#define one 0
#define two 1
#define thr 2
#define fou 3
void GPIO_init();
void Key_SM();
void P13_Ondouble();
void P13_Onred();
void P13_Ongre();
void P13_OnFLASH();
int main(void) {
WDTCTL = WDTPW | WDTHOLD;
GPIO_init();
_enable_interrupts();
_bis_SR_register(LPM3_bits);
return 0;
}
void GPIO_init()
{
P1DIR|=BIT0+BIT6;
P1OUT|=BIT0;
P1OUT|=BIT6;
P1REN|=BIT3;
P1OUT|=BIT3;
P1DIR&=~BIT3;
P1IES|=BIT3;
P1IE|=BIT3;
}
#pragma vector=WDT_VECTOR
interrupt void WDT_ISR(void)
{
Key_SM();
}
void Key_SM()
{
static unsigned char State=0;
static unsigned char key_now=0;
unsigned char key_past=0;
unsigned char key_dect=0;
key_past=key_now;
if(P1IN&BIT3) key_now=1;
else key_now=0;
if((key_now==0)&&(key_past==1)) key_dect=1;
switch(State)
{
case one: if(key_dect==1) {State=two;P13_Ondouble();}break;
case two: if(key_dect==1) {State=thr;P13_Onred();}break;
case thr: if(key_dect==1) {State=fou;P13_Ongre();}break;
case fou: if(key_dect==1) {State=one;P13_OnFLASH();}break;
default:State=one;break;
}
}
void P13_Ondouble()
{
P1OUT^=BIT6;
}
void P13_Onred()
{
P1OUT=BIT0;
}
void P13_Ongre()
{
P1OUT^=BIT0;
P1OUT^=BIT6;
}
void P13_OnFLASH(unsigned int i)
{
while(1)
{
P1OUT^=BIT0;
P1OUT^=BIT6;
i=50000;
while(i--);
}
}