历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2021年02月07日 | MSP430F5529火箭板 --> 按键中断控制LED实验

2021-02-07 来源:eefocus

实验目的:

  测试评估板上的按键和LED


实验内容:

  1、按下s1一次红灯亮1s后熄灭

  2、快速按下s1两次绿灯亮1s后熄灭


bsp_led.h

#ifndef _BSP_LED_H

#define _BSP_LED_H

#include "msp430.h"


#define Set_Bit(val,bitn)   (val |= (/*1 << */(bitn)))

#define Clr_Bit(val,bitn)   (val &= ~(/*1 << */(bitn)))

#define Get_Bit(val,bitn)   (val &  (1 <

//LED1

#define LED1_RED_DIR        P1DIR

#define LED1_RED_OUT        P1OUT

#define LED1_RED_SEL        P1SEL

#define LED1_RED_Pin_Num    (BIT0)      //P1^0


#define LED1_RED_IO_Init()  (Set_Bit(LED1_RED_DIR,LED1_RED_Pin_Num))        //初始化IO为输出模式

#define LED1_RED_Set()      (Set_Bit(LED1_RED_OUT,LED1_RED_Pin_Num))

#define LED1_RED_Clr()      (Clr_Bit(LED1_RED_OUT,LED1_RED_Pin_Num))


//LED2

#define LED2_GREEN_DIR      P4DIR

#define LED2_GREEN_OUT      P4OUT

#define LED2_GREEN_SEL      P4SEL

#define LED2_GREEN_Pin_Num  (BIT7)      //P4^7


#define LED2_GREEN_IO_Init()    (Set_Bit(LED2_GREEN_DIR,LED2_GREEN_Pin_Num))

#define LED2_GREEN_Set()        (Set_Bit(LED2_GREEN_OUT,LED2_GREEN_Pin_Num))

#define LED2_GREEN_Clr()        (Clr_Bit(LED2_GREEN_OUT,LED2_GREEN_Pin_Num))


#endif /*_BSP_LED_H*/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

bsp_key.h

#ifndef _BSP_KEY_H

#define _BSP_KEY_H

#include


#define Set_Bit(val,bitn)   (val |= (/*1 << */(bitn)))

#define Clr_Bit(val,bitn)   (val &= ~(/*1 << */(bitn)))

#define Get_Bit(val,bitn)   (val &  (1 <

//s1

#define KEY1_DIR        P2DIR

#define KEY1_SEL        P2SEL

#define KEY1_OUT        P2OUT

#define KEY1_IN         P2IN        //按键需读入IO口状态值

#define KEY1_Pin_Num    (BIT1)


#define KEY1_IO_Init()  (Clr_Bit(KEY1_DIR,KEY1_Pin_Num))    //初始化IO状态为读取输入电平状态

#define KEY1_Set()      (Set_Bit(KEY1_OUT,KEY1_Pin_Num))

#define KEY1_Clr()      (Clr_Bit(KEY1_OUT,KEY1_Pin_Num))


#endif /*BSP_LED_H*/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

main.c

#include

#include "bsp_led.h"

#include "bsp_key.h"


#define delay_s(x)  __delay_cycles(x*1000000)

unsigned int n = 0;


void main()

{

    WDTCTL = WDTPW + WDTHOLD;

    LED1_RED_IO_Init();         //初始化设置IO口方向为输出

    LED2_GREEN_IO_Init();


    LED1_RED_Clr();             //关闭LED_RED

    LED2_GREEN_Clr();           //关闭LED_Green


    KEY1_IO_Init();             //读取电平输入

    KEY1_Set();

    P2REN |= KEY1_Pin_Num;      //使能s1按键端口的寄存器

    P2IE  |= KEY1_Pin_Num;      //使能s1按键端口中断

    P2IES |= KEY1_Pin_Num;      //s1中断沿触发控制寄存器

    P2IFG &= ~KEY1_Pin_Num;     //s1中断标志寄存器

    

    _EINT();                    //使能全局中断  __enable_interrupt()

    while(1)

    {

        if(n==0)                //当按键一次都没有按下时,红色和绿色LED都不亮

        {

            LED1_RED_Clr();

            LED2_GREEN_Clr();

        }

        else if(n==1)           //当按键s1按下一次时,红色LED亮1s后灭

        {

            LED1_RED_Set();

            LED2_GREEN_Clr();

            delay_s(1);

            n=0;

        }

        else if(n==2)           //当按键s1快速按下两次时,绿色LED亮1s后灭

        {

            LED1_RED_Clr();

            LED2_GREEN_Set();

            delay_s(1);

            n=0;

        }

    }

}


#pragma vector = PORT2_VECTOR

__interrupt void Port2()

{

    unsigned int i=0;

    if(!(P2IN & KEY1_Pin_Num))      //如果s1被按下   -->  按键共地

    {

        __delay_cycles(5000);       //消抖

        if(!(P2IN & KEY1_Pin_Num))

        {

            while(!(P2IN & KEY1_Pin_Num)){}        //松手检测

            n = 1;

            P2IFG &= ~KEY1_Pin_Num;


            while((P2IN & KEY1_Pin_Num))           //500ms-1000ms内如果不按下,视为只按一次

            {

                i++;

                __delay_cycles(1000);

                if(i>1000)

                    return;

            }

            if(!(P2IN & KEY1_Pin_Num))

            {

              __delay_cycles(5000);       //消抖

               if(!(P2IN & KEY1_Pin_Num))

               {

                 while(!(P2IN & KEY1_Pin_Num)){}  //第二次松手

                 n = 2;

                 P2IFG &= ~KEY1_Pin_Num;

               }

             }

          }

       }

  }

      

代码适用的开发板类型

上述代码可直接烧录到如下图所示的开发板中,作为上手程序:
在这里插入图片描述


推荐阅读

史海拾趣

超霸(GP)公司的发展小趣事

绿索超容深知技术创新是企业发展的核心动力。因此,公司积极与东南大学、南京大学等高校开展合作,引入具有自主知识产权的独特技术和工艺,成功开发出GS系列有机双电层超级电容及模组。这些产品不仅在性能上达到了国际领先水平,还获得了多项技术专利。技术上的突破,不仅提升了绿索超容的市场竞争力,也为其赢得了业界的广泛认可。

Gwconnect (Molex)公司的发展小趣事
利用超声波传感器发射超声波并接收回波,通过测量时间差来计算距离,广泛应用于汽车泊车辅助、机器人导航等领域。
E-Mark Inc公司的发展小趣事

JKL公司是一家创新型电子企业,专注于研发新能源汽车电子控制系统。为了推动新能源汽车的发展并满足欧洲市场的需求,JKL公司决定对其产品进行E-Mark认证。在认证过程中,JKL公司积极投入研发资源,不断创新技术,提升产品的智能化和安全性。最终,JKL公司的产品成功获得了E-Mark认证,并在欧洲市场得到了广泛应用和认可。这一认证不仅加速了JKL公司新能源汽车技术的市场推广速度,也提升了公司在国际市场的竞争力。

益升华(Essentra)公司的发展小趣事

作为一家有社会责任感的企业,益升华(Essentra)公司始终关注环保问题。公司积极采用环保材料和工艺,减少生产过程中的废弃物排放和能源消耗。同时,公司还倡导员工参与环保活动,提高环保意识。此外,益升华(Essentra)公司还积极推广循环经济和可持续发展理念,努力为社会和环境做出贡献。

General Cable公司的发展小趣事
通常与YN5203数字译码器配套使用,实现完整的遥控编码和解码功能。
帝特(DTECH)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,帝特始终坚持创新驱动的发展战略。公司不断投入研发资源,加强技术创新和产品升级,力求在保持传统业务优势的同时,开拓新的增长点。此外,帝特还积极布局电子专用材料项目,加强半导体芯片封装浆料研发推广,进一步优化产业结构,提升公司的综合竞争力。

以上五个故事概述了帝特(DTECH)公司在电子行业发展的主要历程和关键节点,展现了公司从创立到成长为行业领军企业的艰辛与辉煌。

问答坊 | AI 解惑

优秀PCB设计工程师所需要具备的本领

1.会熟练的使用cadence或mentor软件layout.         2.能独档一面,从做器件到布局布线出光绘。     3.有做各种pcb的设计经验, 如电脑主板,手机,数码相机等电子消费产品,GSM和3G产品的基站单元板,背板, ...…

查看全部问答>

OrCAD10.5安装方法之我见

上传附件,附件里是我安装过程中整理的~!~ 看了有用麻烦您顶一下~!~…

查看全部问答>

[FPGA]Verilog三段式状态机描述

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。 状态机采用VerilogHDL语言编码,建议分为三个always段完成。 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次 ...…

查看全部问答>

请教WINCE下USB AUDIO设备驱动问题

在WINCE6.0上做一个基于PCM2704芯片的USB AUDIO设备驱动。这是一个USB混合设备,有Audio Class 和HID Class两种接口。此设备有三个Interface,分别是Audio Control,Audio Stream,HID Interface。三个EndPoint,分别是Default EP0,Audio Stream Int ...…

查看全部问答>

IAR环境下,如果要往RF-CC2430下载协议栈,要怎样设置?

总是下载不成功,不知道option里的参数该怎样设置?求大牛指教,不胜感激!…

查看全部问答>

知名外资通讯企业招聘软件开发工程师,协议工程师,算法分析和实现工程师及算法分析系统仿真工程师!!!

无线产品软件开发工程师 职责描述: 负责无线产品软件模块的设计、编码、调试、单元测试等工作,参与相关质量活动,确保设计及实现工作按时保质完成。 职位要求: 1. 本科以上学历,计算机软件、通信、电子、数学、物理及相关专业,有扎实的 ...…

查看全部问答>

急求一个可用的DXP2004

小弟在网上下了好多DXP2004都有些问题,这两天搞得焦头烂额的,希望那位有的能传给我,不胜感激! wanglei198661@163.com  有sp3的最好,sp2的也行 可以用的话给100分!!!…

查看全部问答>

关于WINCE下是否如何使用SOCK_RAW问题?????

我了解在WINCE下若使用SOCK_RAW必须用WSCInstallProvider进行注册, 但我不太了解对于SOCK type=SOCK_RAW,protol type=IPPROTO_ICMP WINCE中应用哪个DLL进行处理呢?我使用/windows/tcpip.dll不太对?? …

查看全部问答>

【MSP430共享】基于应变式传感器的料位测控系统

针对水泥等行业中对料住进行实时测量的需求, 开发 出一种新型的料位测控系统。系统的传感器采用应 变式传感器, 传感器的核心部分是应变片, 通过应变片感测物料的侧压力并获得料住信息。传感器是该系统的关键部分, 通过传感器的优化设计可以很好 ...…

查看全部问答>