历史上的今天
今天是:2025年02月08日(星期六)
2020年02月08日 | MSP430利用IO中断方式来实现按键检测
2020-02-08 来源:eefocus
/************************************************************************
**********MSP430F14-利用IO中断方式实现按键检测程序***********
以下是结合MC430F14开发板来实现的按键检处理程序实验。分别使用了采个三个按键接到MSP430的通用IO口,按任意一个按键可以使板上的LED反转。例程中,单片机一直处于最低功耗状态,用户可以通过按下按键后唤醒单片机。单片机唤醒后再进行去抖动动作,同时执行键处理程序;处理完后再次进入LPM4低功耗模式。
在本程序中用户可以灵活地修改程序来实现你相关的功能。
本程序适用在手持设备或电池供电的设计中。此程序结构比较通用,用户可参与或套用修改.
应用目标板:MC430F14x开发板 #define key1 0x01 #define key_1 0xfe //定义返回键值1 void key_process_0(void); //以下设置是采用不同的编写方式,新手可以参考使用 while(1) //************************************************************************* //**************************************************************************
*************************************************************************/
#include
#define key2 0x02
#define key3 0x04
#define delay_small 200
#define key_2 0xfd //定义返回键值2
#define key_3 0xfb //定义返回键值3
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,此时单片机功耗最低
{
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
if(0xff !=(P2IN & 0xf8)) //是否有键存在?
{
while(0xff !=( P2IN | 0xf8)); //若有按键,一直等待按键松开(按键按下后,对应管脚输出入为1,退出while、if,标明一直有按键)
}
else
key_value = 0x00; //延时去抖动无键按下,则清除键变量.
} //如果在按键电路中加RC滤波电路,实现按键去抖动的效果会更显著此.
史海拾趣
|
我安装了WinCE 4.2 EVC,ActiveSync 在这个环境下,是可以进行WinCE仿真调试的。 程序是EVC自己传到仿真环境里的 后来又安装了VS 2005,在VS 2005中,建立了WinCE简单的演示程序, 但是在运行时,没有WinCE的模拟器可 ...… 查看全部问答> |
|
买的是周立功的开发板,用的codec是uda1341ts,可以正常放音,但是不能录音,我是用mic通过uda1341的通道1输入,但是在uda1341的输出端18脚,一直检测不到信号,不知道问题出在哪了。 下面是uda1341初始化的设置,请高手帮我看看,分析下原因,谢 ...… 查看全部问答> |
|
急!ghost分区备份误选了local-disk-from,分区全不见了! 急!ghost分区备份误选了local-disk-from tmage结果重新启动后只剩下一c盘了,能找回其他盘数据吗?xp系统,用矮人dos4.5版本系统备份,误选了local-disk-from tmage,80g的硬盘,现在可用空间显示69.1g,我的d,e,f盘数据是不是全部丢失了? ...… 查看全部问答> |
|
GPIO部分: 811的GPIO能够承受5V的电平,可以与5V供电的方面的交流。其中特别需要注意的是在1000以下的系列中,PB7\\PC0\\PC1\\PC2\\PC3与JTAG复用,对于811需要特别注意一旦锁死意味着芯片报废,对于1000以上的系列用到这些IO需要先进行解锁操作。 ...… 查看全部问答> |
|
一般音响电器工作时,需要提供正负电源。但在汽车、轮船、火车等运载工具上只能用蓄电池供电,这里介绍一款电源电路,希望对大家有所帮助。该电源电路由震荡器、反相器、推动器和整流及滤波器等部分组成,电路工作原理如图所示 震荡器 &nb ...… 查看全部问答> |




