⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyled.c

📁 用IAR编写的
💻 C
字号:
//主题:直拉式按键检测淙示
/*描述:利用MC430F44上按键组实现在直拉式按键检测
本程序是占用CPU一直检测IO的状态,此时CPU工作在非低功耗模式.那么使用时需要注意
使用场合*/
//编写:微控设计网 DC版主 日期:2008.1.
//编译环境:IAR EW430 3.42A
//验证平台: www.microcontrol.cn MC430F44开发板
//声明:此程序只供微控用户使用.在未得到DC版主的许可请勿将资料外公开和用于商业用途.
//******************************************************************************
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//	
#include <msp430x44x.h>

//初级用户要习惯采用宏定义,以方便的编写和修改
#define keyio 0xf0       //定义按键IO口,Px0-Px2 IO口.

//定义有效低电平键位
#define key_1 0xfe       //定义返回键值1
#define key_2 0xfd       //定义返回键值2
#define key_3 0xfb       //定义返回键值3
#define key_4 0xf7       //定义返回键值4

//声明子程序
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);
//******************************************************************************
//将单片机初始化程序放在main()前面是方便查看单片机的初始化状态情况.
void MCU_int(void)
{//默认MCLK主时钟频率为DCO=~800K
 P1OUT |= BIT1+BIT2+BIT3;     //设置LED,上电为灭.电路可以查看MC430F14电路图.
 P1DIR |= BIT1+BIT2+BIT3;     //P1.1设置为输出.
 P5DIR |= BIT4;               //响声指示
 //MSP430单片机IO口上电默认方向为输入,所以接按键的IO无需再设为输入.
}

//*************************************************************************
void main (void)
{ unsigned char key_value;          //定义键值全局变是
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;         //关狗
  MCU_int();                        //初始化单片机
  
  while(1)                          //主程序主循环
  {
  key_value=key_chcek();            //检测,有键按下并松开,返回一个键值.
  P5OUT |= BIT4;
  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;
  case key_4: key_process_0();      //调用键处理程序2
              key_process_1();
              key_process_2();
              break;              
  default: ;                        //调用键处理程序4
              break;     
  }
  
  for(i=0;i<600;i++);               //软件延时,特定响声长度设置.
  P5OUT &= ~BIT4;
  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 | keyio;              //若有键接下了,则读入IO状态.
   for(i=0;i<7000;i++);             //延时,是为了去按键抖动.
   if (timp ==(P2IN | keyio))        //经延时后,还是那键吗?
    { active = 1;                   //是,则按键有效.
       while(0xff !=( P2IN | keyio));   //一直等待按键松开
     }
   else
    {                               //去按键抖动后读入的键值与之前不同.则先效.
     active = 0;                    //再循环检测.
    }
 }
    return timp;                    //返回一个键值.
}

//*************************************************************************
void key_process_0(void)          //值处理,用户可以自己修改...
{
   if(P1OUT & BIT1)
     P1OUT &= ~BIT1;
  else
     P1OUT |= BIT1;
}
//*************************************************************************
void key_process_1(void)        //值处理,用户可以自己修改...
{
  if(P1OUT & BIT2)
     P1OUT &= ~BIT2;
  else
     P1OUT |= BIT2;   
}
//*************************************************************************
void key_process_2(void)      //值处理,用户可以自己修改...
{
   if(P1OUT & BIT3)
     P1OUT &= ~BIT3;
  else
     P1OUT |= BIT3;  
}

//*************************************************************************
void display_update(unsigned char dta)  
{
 ; //用户可以根据需要来放置显示程序,如LCD,LED,Digital-LED....
   //灵活应用,
}
//*************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -