[原创] 呼吸燈,按鍵中斷學習IAR版

netel   2013-8-7 15:59 楼主
綠燈做成呼吸燈, 紅燈好像沒有PWM不過也在呼吸燈滅的時候讓它閃一下吧, 至於S2就是免消抖點紅燈吧,順便學一下中斷使用。
代碼如下:
  1. #include "msp430.h"

  2. const unsigned char curve[] = {
  3.     1,     1,     1,     1,     1,     1,     1,     1,
  4.     1,     1,     1,     1,     1,     1,     1,     1,
  5.     1,     1,     1,     2,     2,     2,     2,     2,
  6.     2,     2,     3,     3,     3,     3,     3,     3,
  7.     4,     4,     4,     4,     4,     5,     5,     5,
  8.     5,     6,     6,     6,     6,     7,     7,     7,
  9.     8,     8,     8,     8,     9,     9,     9,    10,
  10.    10,    10,    11,    11,    11,    12,    12,    13,
  11.    13,    13,    14,    14,    15,    15,    15,    16,
  12.    16,    17,    17,    18,    18,    18,    19,    19,
  13.    20,    20,    21,    21,    22,    22,    23,    23,
  14.    24,    24,    25,    25,    26,    26,    27,    27,
  15.    28,    29,    29,    30,    30,    31,    31,    32,
  16.    33,    33,    34,    34,    35,    36,    36,    37,
  17.    38,    38,    39,    39,    40,    41,    41,    42,
  18.    43,    43,    44,    45,    46,    46,    47,    48,
  19.    48,    49,    50,    50,    51,    52,    53,    53,
  20.    54,    55,    56,    56,    57,    58,    59,    59,
  21.    60,    61,    62,    62,    63,    64,    65,    66,
  22.    66,    67,    68,    69,    70,    70,    71,    72,
  23.    73,    74,    75,    75,    76,    77,    78,    79,
  24.    80,    80,    81,    82,    83,    84,    85,    86,
  25.    87,    87,    88,    89,    90,    91,    92,    93,
  26.    94,    95,    95,    96,    97,    98,    99,   100,
  27.   101,   102,   103,   104,   105,   106,   106,   107,
  28.   108,   109,   110,   111,   112,   113,   114,   115,
  29.   116,   117,   118,   119,   120,   121,   122,   122,
  30.   123,   124,   125,   126,   127,   128,   129,   130,
  31.   131,   132,   133,   134,   135,   136,   137,   138,
  32.   139,   140,   141,   142,   143,   144,   145,   146,
  33.   147,   148,   149,   150,   151,   152,   153,   154,
  34.   155,   156
  35. };

  36. int pos = 0;

  37. int main(void)
  38. {
  39.   WDTCTL = WDTPW + WDTHOLD;

  40.   DCOCTL= 0;
  41.   BCSCTL1= CALBC1_1MHZ;
  42.   DCOCTL= CALDCO_1MHZ;

  43.   BCSCTL2 |= DIVS_3;

  44.   P1DIR |= BIT6 | BIT0;

  45.   P1REN |= BIT3;
  46.   P1IE  |= BIT3;

  47.   P1SEL |= BIT6;              

  48.   TACCR0 = 625;

  49.   TACTL = TASSEL_2 | MC_1;

  50.   TACCTL1 = OUTMOD_7 | CCIE;

  51.   TACCR1 = 0;

  52.   __low_power_mode_0();

  53.   return 0;
  54. }

  55. #pragma vector = PORT1_VECTOR
  56. __interrupt void p1_isr(void)
  57. {
  58.    if(P1IFG & BIT3)
  59.    {
  60.      P1OUT |= BIT0;
  61.      while (~P1IN & BIT3);
  62.      P1IFG &= ~BIT3;
  63.    }
  64. }

  65. #pragma vector=TIMER0_A1_VECTOR
  66. __interrupt void t0a1_isr(void)
  67. {
  68.    int new_ccr1 = 1;
  69.    
  70.    TACCTL1 &= ~CCIFG;

  71.    if (pos < 500) {
  72.      new_ccr1 = curve[pos++ >> 1];
  73.    } else if (pos < 1000) {
  74.      new_ccr1 = curve[(999 - pos++) >> 1];
  75.    } else {
  76.      pos = 0;
  77.      P1OUT ^= BIT0;
  78.    }
  79.    
  80.    if (P1IN & BIT0) {
  81.      for (int i = 3000; i>0; i--);
  82.      P1OUT ^= BIT0;
  83.    } else {
  84.      while (TAR <= new_ccr1);
  85.      TACCR1 = new_ccr1;
  86.    }
  87. }


回复评论 (2)

帮顶!
点赞  2013-8-8 15:25
还没学,不过代码排版很好看
点赞  2014-3-15 09:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复