MSP430利用IO中断方式来实现按键检测

来源:本站
导读:目前正在解读《MSP430利用IO中断方式来实现按键检测》的相关信息,《MSP430利用IO中断方式来实现按键检测》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《MSP430利用IO中断方式来实现按键检测》的详细说明。
简介:在本程序中用户可以灵活地修改程序来实现你相关的功能。本程序适用在手持设备或电池供电的设计中。此程序结构比较通用,用户可参与或套用修改。

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

**********MSP430F14-利用IO中断方式实现按键检测程序***********

以下是结合MC430F14开发板来实现的按键检处理程序实验。分别使用了采个三个按键接到MSP430的通用IO口,按任意一个按键可以使板上的LED反转。例程中,单片机一直处于最低功耗状态,用户可以通过按下按键后唤醒单片机。单片机唤醒后再进行去抖动动作,同时执行键处理程序;处理完后再次进入LPM4低功耗模式。

在本程序中用户可以灵活地修改程序来实现你相关的功能。

本程序适用在手持设备或电池供电的设计中。此程序结构比较通用,用户可参与或套用修改。

应用目标板:MC430F14x开发板

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

#include <msp430x14x.h>

#define key1 0x01

#define key2 0x02

#define key3 0x04

#define delay_small 200

#define key_1 0xfe //定义返回键值1

#define key_2 0xfd //定义返回键值2

#define key_3 0xfb //定义返回键值3

void key_process_0(void);

void key_process_1(void);

void key_process_2(void);

void key_check (void);

unsigned char key_value; //定义键值全局变量

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

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // 停止看门狗

P1OUT |= BIT1; //关LED

P1DIR |= BIT1; // 设置P1.1为输出

//以下设置是采用不同的编写方式,新手可以参考使用

P2IE |= BIT0+BIT1+BIT2; // P2.0-P2.2 IO口中断使能

P2IES |= 0x07; // P2.0-P2.2 IO口边沿触发中断方式设置,下降沿触发中断

P2IFG &= ~(key1+key2+key3); // P2.0-P2.2 IO口中断标志位清除

_EINT(); //中断允许

// 或直接写成 _BIS_SR(LPM4_bits + GIE);

LPM4; // 进入低功耗LPM4,此时单片机功耗最低

while(1)

{

P2IE &= ~(BIT0+BIT1+BIT2); // P2.0-P2.2 IO口关闭中断允许

P2IFG &= ~0x07; // P2.0-P2.2 IO口中断标志位清除

key_check ();

switch (key_value) //对键值进行处理.采switch语法结构查询

{

case key_1: key_process_0(); //调用键处理程序1

break;

case key_2: key_process_1(); //调用键处理程序2

break;

case key_3: key_process_2(); //调用键处理程序2

break;

default: break;

}

key_value=0x00; //键值清除

P2IE |= BIT0+BIT1+BIT2; // P2.0-P2.2 IO口中断使能

P2IFG &= ~0x07; // P2.0-P2.2 IO口中断标志位清除

LPM4;

}

}

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

//P2中断服务程序

#pragma vector=PORT2_VECTOR

__interrupt void Port_2(void)

{

switch (P2IFG)

{

case 0x01: key_value=0xfe;

break;

case 0x02: key_value=0xfd;

break;

case 0x04: key_value=0xfb;

break;

default: P2IFG &= ~0x07; // P2.0-P2.2 IO口中断标志位清除

break;

}

P2IFG &= ~0x07; // P2.0-P2.2 IO口中断标志位清除

LPM4_EXIT;

}

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

void key_process_0(void) //值处理,用户可以自己修改...

{

P1OUT ^= BIT1;

}

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

void key_process_1(void) //值处理,用户可以自己修改...

{

P1OUT ^= BIT1;

}

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

void key_process_2(void) //值处理,用户可以自己修改...

{

P1OUT ^= BIT1;

}

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

void key_check (void)

{ unsigned int i;

for(i=0;i<delay_small;i++) ; //延时去抖动

if(0xff !=(P2IN & 0xf8)) //是否有键存在?

{

while(0xff !=( P2IN | 0xf8)); //若有按键,一直等待按键松开(按键按下后,对应管脚输出入为1,退出while、if,标明一直有按键)

}

else

key_value = 0x00; //延时去抖动无键按下,则清除键变量.

} //如果在按键电路中加RC滤波电路,实现按键去抖动的效果会更显著此.

提醒:《MSP430利用IO中断方式来实现按键检测》最后刷新时间 2024-03-14 01:08:59,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《MSP430利用IO中断方式来实现按键检测》该内容的真实性请自行鉴别。