MSP430 F5529的按钮控制led灯亮灭程序代码——中断写法——S1 S3控制跑马灯


#include <msp430.h>
int run=0;
int y,i;
int main(void)
{

    WDTCTL = WDTPW | WDTHOLD; //关闭看门狗
    P8DIR |= BIT1;//设置LED灯
    P3DIR |= BIT7;
    P7DIR |= BIT4;
    P6DIR |= BIT3;
    P6DIR |= BIT4;
    P3DIR |= BIT5;//从第一个依次往下是六个LED灯

    P8OUT &=~ BIT1;//设置LED灯初始值
    P3OUT &=~ BIT7;
    P7OUT &=~ BIT4;
    P6OUT &=~ BIT3;
    P6OUT &=~ BIT4;
    P3OUT &=~ BIT5;//从第一个依次往下是六个LED灯

    P1IE = BIT2;    //P1.2的IE,IES,IFG,设置中断函数三连
    P1IES |= BIT2;

    P2IE = BIT3;    //P2.3的IE,IES,IFG,设置中断函数三连
    P2IES |= BIT3;

    _enable_interrupts(); //开启全局中断
    for(;;)     //无限循环
    {
        if(run) //如果按下了S1,则程序启动
        {
                                            for(i=1;i<6000;i++){}
                                            P8OUT ^= BIT1;          //第一盏灯
                                            for(i=1;i<6000;i++){}
                                            P3OUT ^= BIT7;
                                            for(i=1;i<6000;i++){}
                                            P7OUT ^= BIT4;
                                            for(i=1;i<6000;i++){}
                                            P6OUT ^= BIT3;
                                            for(i=1;i<6000;i++){}
                                            P6OUT ^= BIT4;
                                            for(i=1;i<6000;i++){}
                                            P3OUT ^= BIT5;
           }
        else                                {       //如果run=0,那就是没按S1开始或者按了S3暂停,此时跑马灯全部置0
                                            P8OUT &=~ BIT1;//设置LED灯初始值
                                            P3OUT &=~ BIT7;
                                            P7OUT &=~ BIT4;
                                            P6OUT &=~ BIT3;
                                            P6OUT &=~ BIT4;
                                            P3OUT &=~ BIT5;//从第一个依次往下是六个LED灯
                                            }

                                }
        }


#pragma vector=PORT1_VECTOR//(PORT1_VECTOR指的是P1口中断源)
__interrupt void p_one_duan(void)
{
    if(!(P1IN&BIT2))   //P1正的,则亮,不然就灭   即按下了S1就继续
       {
        for(i=1;i<1000;i++){}    //防抖动,看看一会后是不是还是S1在下面
                    if(!(P1IN&BIT2))
                    {
                    while(!(P1IN&BIT2));
                    run = 1;
                    }
                    P1IFG &=~ BIT2; //如果P1.2是震动的话,那就清零离开
       }
        P1IFG=0;
}
#pragma vector=PORT2_VECTOR//(PORT1_VECTOR指的是P1口中断源)
__interrupt void p_two_duan(void)
{
    if(!(P2IN&BIT3))   //P2.3,按钮S3,是正的,则亮,不然就灭
       {
        for(i=1;i<1000;i++){}
                    if(!(P2IN&BIT3))
                    {
                    while(!(P2IN&BIT3));
                    run = 0;
                    }
                    P2IFG &=~ BIT3; ///P2.3,按钮S3,是震动的话,那就清零离开
       }
        P2IFG=0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值