MSP430F149按键检测程序

2019-09-06来源: eefocus关键字:MSP430F149  按键检测

该程序由IAR编译运行,使用单片机的P1.0~P1.3口作为四个独立按键。由外部中断的下降沿触发。


/**********************************************

*程序描述:单片机的P1.0~P1.3连接四个独立按键,外部中断下触发

*作者    :huasir

*时间    :2017.10.28   22:10

***********************************************/

#include

#define keyin (P1IN & 0X0F)

unsigned int KeyVal = 0;   // 键值,0表示异常,1,2,3,4分别为四个按键按下

 

void DelayXms(unsigned int i);

void keyInit(void);   //键盘设置的初始化

int main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  keyInit();         //键盘初始化

  LPM0;              //进入低功耗模式 

  return 0;

}

/****************************************************************************

*函数名: PORT1_ISR()                                                         /

*作用  :外部中断服务函数                                                   /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :huasir                                                              / 

*时间  :2017.10.28                                                          / 

*****************************************************************************/

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void){

  if(P1IFG&0x0f){

  switch(P1IFG){

      case 0x01:

         if(keyin==0x0e)

         {

            DelayXms(5);            //延时消抖

            while(keyin==0x0e);     //松手检测

            KeyVal = 1;

            LPM0_EXIT;

            P1IFG = 0;

            return;

          } 

      case 0x02:

         if(keyin==0x0d)

         {

            DelayXms(5);          //延时消抖

            while(keyin==0x0d);   //松手检测

            KeyVal = 2;

            LPM0_EXIT;

            P1IFG = 0;

            return;

         } 

      case 0x04:

         if(keyin==0x0b)

         {

            DelayXms(5);        //延时消抖

            while(keyin==0x0b); //松手检测

            KeyVal = 3;

            LPM0_EXIT;

            P1IFG = 0;

            return;

         } 

      case 0x08:

      if(keyin==0x07)

      {

            DelayXms(5);        //延时消抖

            while(keyin==0x07); //分手检测

            KeyVal = 4;

            LPM0_EXIT;

            P1IFG = 0;

            return;

      } 

      default:

       {

            KeyVal = 0;

            LPM0_EXIT;

            P1IFG = 0;

         

       }

    }

  } 

}

void DelayXms(unsigned int i){

    unsigned int j;

    for( ; i>0; i--){

      for(j=0;j<200;j++); 

    }

  

}

/****************************************************************************

*函数名: keyInit()                                                           /

*作用  :设置与四个独立按键相关的IO的配置,包括输入输出方向,中断触发方式    /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :huasir                                                              / 

*时间  :2017.10.28                                                          /               

*****************************************************************************/

void keyInit(void){

  P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);//设置四个按键的接受口为输入,注意,使用外部中断并不属于第二功能

  P1IES |= BIT0+BIT1+BIT2+BIT3;  //设置四个按键的中断触发方式为下降沿触发

  P1IE  |= BIT0+BIT1+BIT2+BIT3;  //打开四个按键的外部中断

   _EINT();

}


关键字:MSP430F149  按键检测 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic473669.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430按键控制LED闪烁频率
下一篇:MSP430串口接收程序(使用中断)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
MSP430F5529 时钟 25MHz 设置方法
MSP430F5529的launchpad是 TI送的比较多的一款开发套件,至少我们实验室就是人手一块,很多人都嫌他慢,确实相比较于STM32F103(72MHz) 和STM32F407(168MHz)的速度而言  默认状态下主频只有1MHz的 MSP430F5529就是个弟弟,而且处理位宽也是只有16位,,, 还不支持位带操作  ,但是就超低功耗这一点就足以让他在单片机界立足 ,废话少说,来正题。这次跟大家分享的是标题所说的  MSP430F5529的升频方案。要升频,首先我们得能‘看见’系统的频率,TI的工程师们充分考虑到了这个问题,他们有得引脚可以直接输出时钟信号!!!在芯片datesheet中
发表于 2019-10-29
MSP430F5529 时钟 25MHz 设置方法
win10下使用Energia开发MSP430F5529LP 基本流程及遇到的问题
energia.nu上下载energia安装驱动,部分电脑可能要禁用数字签名,常规操作不多说,官网上也有禁用数字签名的方法。都装好后打开energia,页面几乎和arduino一样,就是红得晃眼睛。什么东西都不写,先编译一下,就报错 大概意思是一个文件中的浮点数常量超出double范围 从来没见过这种错误,检查了一下自己安装的64位也没啥问题,到处找方法,论坛贴吧资料都很少,最后看到energia.exe附近有个arduino-builder.exe点击运行一下,再回去编译,就ok了,blink烧写进去也完全正常。后来发现还是有点问题,直接把报错的那个文件删除就好,不会有任何问题,亲测。当然最好留个备份,后面有关于这个函数的问题了再
发表于 2019-10-28
win10下使用Energia开发MSP430F5529LP 基本流程及遇到的问题
MSP430F149学习笔记——时钟
由于近期的需要,开始学习TI的MSP430 MCU。脑子不好使记不下来,只能辛苦一一敲在这里,便于大脑短路时随时查阅。首先学习了F149的时钟系统。F149拥有一个名为DCOCLK的内部数控振荡器,可外接两个晶振,通常一个晶振提供32768Hz实时时钟(LFXT1CLK),另一个晶振提供最大8MHz的系统主时钟(XT2CLK)。以上3个时钟源可以产生三个时钟信号:ACLK:辅助时钟。可由LFXT1CLK经1/2/4/8分频得到,可软件配置作为各种外设提供时钟信号。MCLK:主时钟。可由DCOCLK/LFXT1CLK/XT2CLK经1/2/4/8分频得到,作为CPU和系统时钟。SMCLK:副时钟。可由DCOCLK/LFXT1CLK
发表于 2019-10-25
基于MSP430F5529的μc/os嵌入式实时操作系统移植
()    //OS启动时调用,加载用户最高优先级的任务 OSCtxSw()       //任务级调度 OSIntCtxSw()      //中断级调度 OSTickISR()       //时钟中断响应,将检测到延时结束的任务加入就绪队列,    .cdecls C, LIST, "msp430.h";用户钩子,对应os_cpu_c.c中的HOOK函数    .ref     OSIntExit    .ref     OSIntNesting 
发表于 2019-10-25
MSP430F149;一、基本时钟
//  ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2//  //* XTAL's REQUIRED - NOT INSTALLED ON FET *////  //* Min Vcc required varies with MCLK frequency - refer to datasheet *// ////                MSP430F149//           
发表于 2019-10-25
MSP430F149;一、基本时钟
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved