江湖救急!

在430F5529單片機上做一個外設矩陣鍵盤,搞了倆天了,希望有大神能幫我,下面時電路圖和代碼。代碼:

#include <msp430.h>

#define key1 (P1IN&BIT5)
#define key2 (P1IN&BIT4)
#define key3 (P1IN&BIT3)
#define key4 (P1IN&BIT2)

int keyValue,column;

void twoKeyScan(void)
{

    //掃描第一列
    column = 1;
    P4OUT &= ~BIT0;
    P4OUT |= BIT3;                      //給第一列開關的一側置高電平

    _delay_cycles(20000);

    //掃描第二列
    column = 2;
    P4OUT &= ~BIT3;
    P4OUT |= BIT0;

    _delay_cycles(20000);

}

void InitIO(void)
{
    P1DIR |= BIT0;              //Set P1.0 to output direction
    P1OUT &= ~BIT0;             //Set P1.0 low level

    P1REN |= BIT2 + BIT3 + BIT4 + BIT5;
    P1OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5);

    P4DIR |= BIT7 + BIT0 + BIT3;       //Set P4.7 to output direction
    P4OUT &= ~BIT7;             //Set P4.7 low level

    P1IES &= ~(BIT2 + BIT3 + BIT4 + BIT5);
    P1IFG = 0;
    P1IE |= BIT2 + BIT3 +BIT4 + BIT5;
    P1IFG = 0;

}

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;   //Stop watchdog timer

    InitIO();

    while(1)                    //Waiting Interrupt response
    {
        twoKeyScan();           //Call function
    }

}

#pragma vector = PORT1_VECTOR__interrupt void PORT1_ISR(void){    if(column == 1)    {        if(key1)        {            _delay_cycles(20000);            if(key1)            {                keyValue = 1;                P1OUT |= BIT0;            }        }        else if(key2)        {            _delay_cycles(20000);            if(key2)            {                keyValue = 4;                P1OUT &= ~BIT0;            }        }    }    if(column == 2)    {        if(key1)        {            _delay_cycles(20000);            if(key1)            {                P4OUT |= BIT7;                keyValue = 2;            }        }        else if(key2)        {            _delay_cycles(20000);            if(key2)            {                P4OUT &= ~BIT7;                keyValue = 5;            }        }    }    P1IFG = 0;}