在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;}