MSP430F149学习之路——按键与LED

代码

 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 }
原文地址:https://www.cnblogs.com/boyiliushui/p/4626866.html