专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
MSP430程序设计求帮助
2019-03-24 09:31
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
1518
4
1236
来个大神看下。声明下:刚接触单片机,毫无基础。
想设计一个程序,基本原理是这样。
P1.0是LED1,P1.6是LED2,P1.3是按键(S2)
想实现的功能是这样,按一下S2按键,1亮2灭,再按一下1灭2亮。如此重复。
希望来个大神设计一个,并写好详细中文备注以学习。感激不尽、
注:单片机是MSP430G2553.
看了一些资料后,有几个想法
1.是不是需要用到按键消抖
2.LED1 2是不是要分开设计
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
mengxp
2019-03-24 23:24
//由于用到了看门狗所以需要外接32768晶振
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
//唤醒PCU
LPM0_EXIT;
}
void Sleep16ms(void)
{
WDTCTL = WDT_ADLY_16; //看门狗16ms
LPM0; //cpu睡眠等狗叫
WDTCTL = WDTPW + WDTHOLD; //关狗
}
#define BUTTON_DOWN !(P1IN & BIT3)
#define BUTTON_UP (P1IN & BIT3)
int IsButtonDown(void)
{
//检查按钮是否被按下 低电平按下
if(BUTTON_DOWN)
{
//等待16ms
Sleep16ms();
if(BUTTON_DOWN)
{
//确实按下了
return 1;
}
}
return 0;
}
int IsButtonUp(void)
{
//检查按钮是否抬起 高电平抬起
if(BUTTON_UP)
{
//等待16ms
Sleep16ms();
if(BUTTON_UP)
{
//确实抬起了
return 1;
}
}
return 0;
}
//低电平LED亮,高电平LED灭
void ChangeLED()
{
if(P1OUT & BIT0)
{
//1.0灭的,点亮他
P1OUT &= ~BIT0;
//熄灭1.6
P1OUT |= BIT6;
}
else
{
//1.0亮的,熄灭他
P1OUT |= BIT0;
//点亮1.6
P1OUT &= ~BIT6;
}
}
int main()
{
//先关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
//配置GPIO
P1DIR |= BIT0 | BIT6; //P1.0 P1.6输出
P1DIR &= ~BIT3; //P1.3输入
while(1)
{
//等待按键被按下
if(IsButtonDown())
{
//灯切换
ChangeLED();
//等待按键抬起
while(!IsButtonUp)
{
Sleep16ms();
}
}
//睡16ms先
Sleep16ms();
}
}
加载中...
查看其它4个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
//唤醒PCU
LPM0_EXIT;
}
void Sleep16ms(void)
{
WDTCTL = WDT_ADLY_16; //看门狗16ms
LPM0; //cpu睡眠等狗叫
WDTCTL = WDTPW + WDTHOLD; //关狗
}
#define BUTTON_DOWN !(P1IN & BIT3)
#define BUTTON_UP (P1IN & BIT3)
int IsButtonDown(void)
{
//检查按钮是否被按下 低电平按下
if(BUTTON_DOWN)
{
//等待16ms
Sleep16ms();
if(BUTTON_DOWN)
{
//确实按下了
return 1;
}
}
return 0;
}
int IsButtonUp(void)
{
//检查按钮是否抬起 高电平抬起
if(BUTTON_UP)
{
//等待16ms
Sleep16ms();
if(BUTTON_UP)
{
//确实抬起了
return 1;
}
}
return 0;
}
//低电平LED亮,高电平LED灭
void ChangeLED()
{
if(P1OUT & BIT0)
{
//1.0灭的,点亮他
P1OUT &= ~BIT0;
//熄灭1.6
P1OUT |= BIT6;
}
else
{
//1.0亮的,熄灭他
P1OUT |= BIT0;
//点亮1.6
P1OUT &= ~BIT6;
}
}
int main()
{
//先关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
//配置GPIO
P1DIR |= BIT0 | BIT6; //P1.0 P1.6输出
P1DIR &= ~BIT3; //P1.3输入
while(1)
{
//等待按键被按下
if(IsButtonDown())
{
//灯切换
ChangeLED();
//等待按键抬起
while(!IsButtonUp)
{
Sleep16ms();
}
}
//睡16ms先
Sleep16ms();
}
}
一周热门 更多>