专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
msp430f5529单片机的跑马灯程序如果不用延时函数而是用定时...
2019-07-15 16:15
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
18782
12
1591
1设计跑马灯:应用msp430f5529板子
用定时器控制LED的闪烁间隔,慢流水时亮灭间隔0.5s,快流水时亮灭间隔0.2s,两个按键一个控制流水速度,一个控制流水方向,流水速度分快慢,流水方向分正负,还有单数灯流水和双数灯流水。用电位器控制LED灯的亮灭,当调整电位器的值时,LED的亮灯数变化。
我已经做出来了跑马灯的正流水和负流水和按键变速部分,延时用的delay函数,然后不知道该怎么弄了求大神指教
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
SunLeeinfinity
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 您的付出是论坛的动力,感谢您一直支持!.
查看全部评分
加载中...
查看其它12个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
程序功能:实现流水灯以三种流动方式和四种流动速度
的不同组合而进行点亮"流动"
------------------------------------------------
测试说明:观察流水灯流动顺序和速度的变化
************************************************/
#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;
}
}
评分
查看全部评分
一周热门 更多>