您的位置 首页 方案

MSP430F14-直接IO口按键检处理程序

//MSP430F14-直接IO口按键检处理程序/*************************************************************************//

//MSP430F14-直接IO口按键检处理程序

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

//别离使用了采个4个按键接到MSP430的通用IO口,按恣意一个按键能够使板上的对应LED回转.
//例程中,按键选用不断查询方法,以得到键值.并没有使用到低功耗.此程序结构比较合适
//用在非手持设备或非电池供电的规划中.此程序结构比较通用,级用户可参加或套用修正.
/*************************************************************************/
#include <msp430x14x.h>

//初级用户要习气选用宏界说,以便利的编写和修正
#define keyio 0xf0 //界说按键IO口,Px0-Px3 IO口.
#define key_1 0xfe //界说回来键值1
#define key_2 0xfd //界说回来键值2
#define key_3 0xfb //界说回来键值3
#define key_4 0xf7 //界说回来键值3

//声明子程序
unsigned char key_chcek(void);
void display_update(unsigned char dta);
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
void key_process_3(void);
//*************************************************************************
//将单片机初始化程序放在main()前面是便利检查单片机的初始化状况状况.
void MCU_int(void)
{//默许MCLK主时钟频率为DCO=~800K
P1OUT |= BIT4+BIT5+BIT6+BIT7; //设置LED,上电为灭.电路能够检查MC430F14电路图.
P1DIR |= BIT4+BIT5+BIT6+BIT7; //P1.0~P1.3设置为输出.
//MSP430单片机IO口上电默许方向为输入,所以接按键的IO无需再设为输入.
}

//*************************************************************************
void main (void)
{ unsigned char key_value; //界说键值大局变是
WDTCTL = WDTPW + WDTHOLD; //关狗
MCU_int(); //初始化单片机

while(1) //主程序主循环
{
key_value=key_chcek(); //检测,有键按下并松开,回来一个键值.

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(); //调用键处理程序3
break;
case key_4: key_process_3(); //调用键处理程序4
break;
default: ;
break;
}
// display_update(key_value); //如果有需求能够在这里加上显现更新程序.
key_value=0x00; //最终铲除键值.将持续主循环.
}
}

//*************************************************************************
//按键检测程序
//回来值: 无符号字符型键值
unsigned char key_chcek(void)
{
unsigned int i;
unsigned char timp,active;
active=0;
while(!active)
{
while(0xff ==( P2IN | keyio)); //一向等候有键按下
timp = P2IN | 0xf0; //若有键接下了,则读入IO状况.
for(i=0;i<7000;i++); //延时,是为了去按键颤动.
if (timp ==(P2IN | 0xf0)) //经延时后,仍是那键吗?
{ active = 1; //是,则按键有用.
while(0xff !=( P2IN | keyio)); //一向等候按键松开
}
else
{ //去按键颤动后读入的键值与之前不同.则先效.
active = 0; //再循环检测.
}
}
return timp; //回来一个键值.
}

//*************************************************************************
void key_process_0(void) //值处理,用户能够自己修正…
{
P1OUT ^= BIT4;
}
//*************************************************************************
void key_process_1(void) //值处理,用户能够自己修正…
{
P1OUT ^= BIT5;
}
//*************************************************************************
void key_process_2(void) //值处理,用户能够自己修正…
{
P1OUT ^= BIT6;
}
void key_process_3(void) //值处理,用户能够自己修正…
{
P1OUT ^= BIT7;
}
//*************************************************************************
/*void display_update(unsigned char dta)
{
; //用户能够根据需求来放置显现程序,如LCD,LED,Digital-LED….
//灵敏使用,
}*/
//*************************************************************************

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/274316.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部