2019-07-15 16:15发布
查看全部评分
SunLeeinfinity 发表于 2014-10-30 14:38 /*********************************************** 程序功能:实现流水灯以三种流动方式和四种流动速度 ...
SunLeeinfinity 发表于 2014-10-30 14:38 /*********************************************** 程序功能:实现流水灯以三种流动方式和四种流动速度 的不同组合而进行点亮"流动"
最多设置5个标签!
程序功能:实现流水灯以三种流动方式和四种流动速度
的不同组合而进行点亮"流动"
------------------------------------------------
测试说明:观察流水灯流动顺序和速度的变化
************************************************/
#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;
}
}
评分
查看全部评分
douxie多谢!当初太傻了==
请问大神——这一个周期是多少时间
一周热门 更多>