2573|4

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430程序设计求帮助 [复制链接]

来个大神看下。声明下:刚接触单片机,毫无基础。

想设计一个程序,基本原理是这样。

P1.0是LED1,P1.6是LED2,P1.3是按键(S2)
想实现的功能是这样,按一下S2按键,1亮2灭,再按一下1灭2亮。如此重复。
希望来个大神设计一个,并写好详细中文备注以学习。感激不尽、
注:单片机是MSP430G2553.
看了一些资料后,有几个想法
1.是不是需要用到按键消抖
2.LED1  2是不是要分开设计

最新回复

//由于用到了看门狗所以需要外接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();     } }   详情 回复 发表于 2015-11-4 17:32
 
点赞 关注

回复
举报

1158

帖子

2

TA的资源

版主

沙发
 
需要用到按键消抖,如果这样子的话直接在while里面一直判断输入就可以了。
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
那就自己看看demo例程
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

4
 
//由于用到了看门狗所以需要外接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();
    }
}

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

5
 
mengxp 发表于 2015-11-4 17:32
//由于用到了看门狗所以需要外接32768晶振

#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void) ...

十分感谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
TI 处理器AM62L深度讲解,报名直播赢【双肩包、充电器、胶囊伞】
【直播要点】• 如何实现安全节能设计;• 开箱体验和demo;• 软件和硬件
【直播时间】3月21日(周五)上午10:00

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表