单片机
返回首页

MSP430F149学习之路——LED

2020-06-20 来源:eefocus

 1 #include

 2 

 3 void int_clk();

 4 void delay(int i);

 5 void main()

 6 {

 7   WDTCTL = WDTPW + WDTHOLD;

 8   int_clk();

 9   P6DIR = 0XFF;

10   P6OUT = 0Xff;

11   while(1)

12   {

13     P6OUT = 0XFF;

14     delay(20000);

15     P6OUT = 0x00;

16     delay(20000);

17   }

18 }

19 

20 void int_clk()

21 {

22   BCSCTL1 &= ~XT2OFF;

23   BCSCTL2 |= SELM_1 + SELS;

24   do

25   {

26     IFG1 &= ~OFIFG;

27     for(int i=0;i<100;i++)

28       _NOP();

29   }while((IFG1 & OFIFG)!=0);

30   IFG1 &= ~OFIFG;

31 }

32 

33 void delay(int i)

34 {

35   while(i--);

36 }

 提示:IAR的配置要正确


升级版本:


  1 /***********************************************

  2 程序功能:实现流水灯以三种流动方式和四种流动速度

  3           的不同组合而进行点亮'流动'

  4 ------------------------------------------------*/

  5 #include

  6  int flag=0,i=0,j=0,dir=0,speed=0;

  7 void int_clk();

  8 void delay(int i);

  9 void main()

 10 {

 11   WDTCTL = WDTPW + WDTHOLD;

 12   int_clk();

 13   P6DIR = 0XFF;

 14   P6OUT = 0XFF;

 15   

 16   TACCTL0 = CCIE;                     //使能CCR0中断

 17   TACCR0 = 50000;

 18   TACTL  = TASSEL_2 + MC_1 + ID_3;    //定时器A选择SMCLK,增计数,8分频

 19   

 20   _EINT();

 21   LPM0;

 22 }

 23 /*******************************************

 24 函数名称:Timer_A 

 25 功    能:定时器A的中断服务函数,在这里通过标志

 26           控制流水灯的流动方向和流动速度

 27 参    数:无

 28 返回值  :无

 29 ********************************************/

 30 #pragma vector=TIMERA0_VECTOR

 31 __interrupt void Timer_A(void)

 32 {

 33   if(flag == 0)

 34   {

 35     P6OUT = ~(0x80>>(i++));    //灯的点亮顺序D8 -> D1

 36   }

 37   else if(flag == 1)

 38   {

 39     P6OUT = ~(0x01<<(i++));    //灯的点亮顺序D1 -> D8

 40   }

 41   else 

 42   {

 43     if(dir)                  //灯的点亮顺序  D8 -> D1,D1 -> D8,循环绕圈                        

 44       P6OUT = ~(0x80>>(i++));

 45     else

 46       P6OUT = ~(0x01<<(i++));

 47   }

 48   

 49   if(i == 8) 

 50   {

 51     i = 0;

 52     dir = ~dir;

 53   }

 54   delay(200);

 55   j++;

 56   if(j == 40) 

 57   {

 58     i = 0;

 59     j = 0;

 60     flag++;

 61     if(flag == 4) flag = 0;

 62     switch(speed)

 63     {

 64     case 0:

 65      // TACTL &=~ (ID0 + ID1);

 66       TACTL |= ID_3;

 67       break;

 68     case 1:

 69      // TACTL &=~ (ID0 + ID1);

 70       TACTL |= ID_2;

 71       break;

 72     case 2:

 73     //  TACTL &=~ (ID0 + ID1);

 74       TACTL |= ID_1;

 75       break;

 76     case 3:

 77      // TACTL &=~ (ID0 + ID1);

 78       TACTL |= ID_0;

 79       break;

 80     default:

 81       break;

 82     }

 83     if(flag != 3)   speed++;

 84     if(speed == 4) speed = 0;

 85     } 

 86 }

 87 void int_clk()

 88 {

 89   BCSCTL1 &= ~XT2OFF;

 90   BCSCTL2 |= SELM_1 + SELS;     //DCO在800KHZ左右

 91   do

 92   {

 93     IFG1 &= ~OFIFG;

 94     for(int i=0;i<100;i++)

 95       _NOP();

 96   }while((IFG1 & OFIFG)!=0);

 97   IFG1 &= ~OFIFG;

 98 }

 99 

100 void delay(int i)

101 {

102   while(i--);

103 }


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章