标题:
430F5XXX单片机中断按键不能用的问题
[打印本页]
作者:
510487675
时间:
2018-8-14 21:23
标题:
430F5XXX单片机中断按键不能用的问题
/*
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;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1