[Launchpad] 按键消抖测试

LaunchPad按键消抖测试,推荐定时方式

 

 1 #include  <msp430g2553.h>
 2 #define TYPE 0  //0 定时  1 延时
 3 void main(void)
 4 {
 5   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
 6   BCSCTL1 = CALBC1_1MHZ;                    // Set range
 7   DCOCTL = CALDCO_1MHZ;
 8   
 9   BCSCTL2 &= ~(DIVS_3);                     // SMCLK = DCO = 1MHz     
10   P1DIR = 0x01;                             // P1.0 output, else input
11   P1OUT =  0x08;                            // P1.4 set, else reset
12   P1REN |= 0x08;                            // P1.4 pullup
13   P1IE |= 0x08;                             // P1.4 interrupt enabled
14   P1IES |= 0x08;                            // P1.4 Hi/lo edge
15   P1IFG &= ~0x08;                           // P1.4 IFG cleared
16 
17   _BIS_SR(LPM0_bits + GIE);                 // Enter LPM4 w/interrupt
18   
19   
20 }
21 
22 // Port 1 interrupt service routine
23 #pragma vector=PORT1_VECTOR
24 __interrupt void Port_1(void)
25 {
26 
27 # if(TYPE)
28  //----------------------------------------
29  //延时按键消抖 
30   
31   volatile unsigned int i;
32   P1IFG &= ~0x08;                           // P1.4 IFG cleared
33   for(i=500;i>0;i--);
34  
35   if(!(P1IN & 0x08))
36     P1OUT ^= 0x01;                            // P1.0 = toggle
37   
38 
39 #else 
40 //-----------------------------------------
41 //看门狗定时按键消抖
42    
43   P1IFG &= ~0x08;  
44   WDTCTL = WDT_MDLY_32;                    // Set Watchdog Timer interval to ~30ms
45   IFG1 &= ~WDTIFG;
46   IE1 |= WDTIE; 
47 
48 #endif
49 
50 
51 }
52 
53 # if(!TYPE)
54 
55 #pragma vector=WDT_VECTOR
56 __interrupt void watchdog_timer(void)
57 {
58   
59   IE1 &= ~WDTIE;  
60   IFG1 &= ~WDTIFG;                 /* clear interrupt flag */
61   WDTCTL = WDTPW + WDTHOLD; 
62     
63   if(!(P1IN & 0x08))
64       P1OUT ^= 0x01;                            // P1.0 = toggle 
65 }
66 
67 #endif

 

posted @ 2012-08-21 10:39  sky1991  阅读(662)  评论(0编辑  收藏  举报