msp430f5529单片机的跑马灯程序如果不用延时函数而是用定时...

2019-07-15 16:15发布

1设计跑马灯:应用msp430f5529板子
用定时器控制LED的闪烁间隔,慢流水时亮灭间隔0.5s,快流水时亮灭间隔0.2s,两个按键一个控制流水速度,一个控制流水方向,流水速度分快慢,流水方向分正负,还有单数灯流水和双数灯流水。用电位器控制LED灯的亮灭,当调整电位器的值时,LED的亮灯数变化。

我已经做出来了跑马灯的正流水和负流水和按键变速部分,延时用的delay函数,然后不知道该怎么弄了求大神指教

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
tuoCHang
1楼-- · 2019-07-16 17:29
官方电话国际化的感受到
SunLeeinfinity
2楼-- · 2019-07-16 20:22
/***********************************************
程序功能:实现流水灯以三种流动方式和四种流动速度
          的不同组合而进行点亮"流动"
------------------------------------------------
测试说明:观察流水灯流动顺序和速度的变化
************************************************/
#include <msp430f5529.h>

unsigned int flag,dir,i,j,speed;

/****************主函数*****************/
void main( void )
{

  WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
  P1DIR  = 0x3e;             //设置端口方向
  P1OUT  = 0x3e;             //设置输出高低电平
  TA0CTL |= TASSEL_2 + TACLR + ID_3 + MC_1;//设置定时器时钟源为SCMLK,8分频,允许置位,增加计数
  TA0CCTL0 = CCIE;           //允许使能中断
  TA0CCR0 = 50000;           //设置定时周期
  __bis_SR_register(CPUOFF + GIE); //复位CPUOFF并打开SCMLK,开可屏蔽中断
}

/*******************************************
函数名称:Timer_A
功    能:定时器A的中断服务函数,在这里通过标志
          控制流水灯的流动方向和流动速度
参    数:无
返回值  :无
********************************************/
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
  if(flag == 0)
  {
   P1OUT = 0x02<<i;
  }
  else if(flag == 1)
  {
   P1OUT = 0x20>>i;
  }
  else
    if(dir)
    {
      P1OUT = 0x02<<i;
    }
  else
  {
    P1OUT = 0x20>>i;
  }
  i++;
  if(i == 6)
  {
    i = 0;
    dir = ~dir;
  }
  j++;
  if(j == 25)
  {
    i = 0;
    j = 0;
    flag++;
  if(flag == 5)
  {
    flag = 0;
  }
  switch(speed)
  {
    case 0:
        TA0CTL &=~(ID0 + ID1);    //将分频位置零,其他位不变
        TA0CTL |= ID_3;           //将时钟进行分频
        break;
    case 1:
        TA0CTL &=~(ID0 + ID1);
        TA0CTL |= ID_3;           //8分频
        break;
    case 2:
        TA0CTL &=~(ID0 + ID1);
        TA0CTL |= ID_2;           //4分频
        break;  
    case 3:
        TA0CTL &=~(ID0 + ID1);
        TA0CTL |= ID_1;          //2分频
        break;
    case 4:
        TA0CTL &=~(ID0 + ID1);
        TA0CTL |= ID_0;         //1分频
        break;
    default:
        break;
  }
  if(flag != 4) speed++;
  if(flag == 4) speed = 0;
}
}

评分

参与人数 1积分 +10 收起 理由 ElecFans小喇叭 + 10 您的付出是论坛的动力,感谢您一直支持!.

查看全部评分

我就是小白
3楼-- · 2019-07-16 22:07
SunLeeinfinity 发表于 2014-10-30 14:38
/***********************************************
程序功能:实现流水灯以三种流动方式和四种流动速度
   ...

douxie多谢!当初太傻了==
miaokankan
4楼-- · 2019-07-17 04:03
楼上点赞!!!!
270029454
5楼-- · 2019-07-17 08:44
 精彩回答 2  元偷偷看……
墨绿
6楼-- · 2019-07-17 09:00
SunLeeinfinity 发表于 2014-10-30 14:38
/***********************************************
程序功能:实现流水灯以三种流动方式和四种流动速度
          的不同组合而进行点亮"流动"

请问大神——这一个周期是多少时间

一周热门 更多>