代码
1 /*********************************** 2 程序功能:用按键控制LED状态 3 缺点:按键按下后无法改变LED灯的状态,可以利用板上的复位键^~^ 4 *************************************/ 5 #include <msp430x14x.h> 6 7 int k,i=0; 8 void int_clk(); 9 void led(int n); 10 void main() 11 { 12 WDTCTL = WDTPW + WDTHOLD; 13 int_clk(); 14 P1DIR = 0Xf0; 15 P1OUT = 0XFF; 16 P6DIR = 0XFF; 17 P6OUT = 0XFF; 18 19 while(1) 20 { 21 P1OUT = 0X0F; 22 if(P1IN != 0X0F) 23 { 24 for(int i=100;i>0;i--) 25 _NOP(); 26 if(P1IN != 0X0F) 27 { 28 switch(P1IN & 0X0F) 29 { 30 case 0x0e:led(0);break; 31 case 0x0d:led(1);break; 32 case 0x0b:led(2);break; 33 case 0x07:led(3);break; 34 } 35 } 36 } 37 } 38 } 39 40 void int_clk() 41 { 42 BCSCTL1 &= ~XT2OFF; 43 BCSCTL2 |= SELM_1 + SELS; 44 do 45 { 46 IFG1 &= ~OFIFG; 47 for(int i=100;i>1;i--) 48 _NOP(); 49 }while((IFG1 & OFIFG)!=0); 50 IFG1 &= ~OFIFG; 51 } 52 53 void led(int n) 54 { 55 k=n; 56 TACCTL0 = CCIE; 57 TACCR0 = 50000; 58 TACTL = MC_1 + TASSEL_2; 59 60 _EINT(); 61 } 62 #pragma vector = TIMERA0_VECTOR 63 __interrupt void TimerA(void) 64 { 65 if(k==0) 66 P6OUT = ~(0X80>>(i++)); 67 else if(k==1) 68 P6OUT = ~(0X01<<(i++)); 69 else if(k==2) 70 P6OUT = 0XFF; 71 else 72 P6OUT = 0X00; 73 74 if(i==8) 75 i=0; 76 77 for(int j=5000;j>1;j--) 78 _NOP(); 79 }
时间: 2024-11-06 07:47:54