- /*
- P1.5 0 K5
- P1.7 0 K6
- P2.0 0 K1
- P2.2 0 K2
- P2.3 0 K3
- P2.5 0 K4
- P4.2 1 LED0 1
- P4.3 1 LED2 2
- P4.4 1 LED3 3
- P4.5 1 LED5 4
- P4.6 1 LED6 5
- P4.7 1 LED8 6
- */
- typedef unsigned char uchar;
- typedef unsigned int uint;
- int main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
- P1DIR &= ~(BIT7+BIT5); //P1.7 P1.5设置为输入
- P1IFG &= ~(BIT7+BIT5); //P1.7 P1.5初始化清空中断标志位
- P1IE |= (BIT7+BIT5); //P1.7 P1.5中断使能
- P1IES |= (BIT7+BIT5); //P1.7 P1.5下降沿产生中断
- P1OUT |= (BIT7+BIT5); //P1.7,P1.5设置输出为高
- P1REN |= (BIT7+BIT5); //P1.7,P1.5设置为上拉电阻
- P2DIR &= ~(BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5设置为输入
- P2IFG &= ~(BIT0+BIT2+BIT3+BIT5); //初始化清空中断标志位
- P2IE |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5中断使能
- P2IES |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5下降沿产生中断
- P2OUT |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5设置为上拉电阻:OUT = 1; REN = 1;
- P2REN |= (BIT0+BIT2+BIT3+BIT5);
- P4DIR|=0xfc; //led输出
- P4OUT =0x00; //初始化输出值,
- __enable_interrupt();
- while(1);
- }
- #pragma vector = PORT1_VECTOR //固定格式,声明中断向量地址,不能变
- __interrupt void LED(void) //函数名,可以任意定义
- {
- switch(__even_in_range(P1IV,18))
- {
- case 0x10:
- if ((P1IN & BIT7) == 0) //P1 BIT7 K6 正常
- P4OUT ^= BIT7; //P2 BIT7 LED6
- break;
- case 0x80:
- if ((P1IN & BIT5) == 0) //P1 BIT5 K5 不能用
- P4OUT ^= BIT6; //P4 BIT6 LED5
- break;
- default:
- //P4OUT |=~(BIT6+BIT7);
- break;
- }
- }
- #pragma vector = PORT2_VECTOR //固定格式,声明中断
- __interrupt void fuck430(void) //函数名,可以任意定义
- {
- switch(__even_in_range(P2IV,18))
- {
- case 0x01:
- if ((P2IN & BIT0) == 0) //P2 BIT0 K1 不能用
- P4OUT ^= BIT2; //P4 BIT2 LED1
- break;
- case 0x04:
- if ((P2IN & BIT2) == 0) //P2 BIT2 K2 不能用
- P4OUT ^= BIT3; //P4 BIT3 LED2
- break;
- case 0x08:
- if ((P2IN & BIT3) == 0) //P2 BIT3 K3 有效
- P4OUT ^= BIT4; //P4 BIT4 LED3
- break;
- case 0x20:
- if ((P2IN & BIT5) == 0) //P2 BIT5 K4 不能用
- P4OUT ^= BIT5; //P4 BIT5 LED4
- break;
- default:
- break;
- }
- }
复制代码
|