2440按键模块

来源:互联网 发布:欧树蜂蜜洁面凝胶 知乎 编辑:程序博客网 时间:2024/06/01 10:36

按键的操作位置在于GPGCON,且应设置为00输入模式。


从GPGDAT中就检测状态为就能知道按键有没有按下

以下代码:

/***********************************************
  Copyright (C), 2015-2016, xmetc  Tech. Co., Ltd.
File  name  :   led.c
Author      :   hjd
version     :   V1.0
Date   :   2015-8-15
Description :  led 模块的功能函数的实现 
History     :    
1  Date        2015-8-15 
   Author       hjd
   Modification   Init vision
*************************************************/


#include "key.h"
#include "2440addr.h"


/***********************************************
Function  name  :   key_init
Description     :   按键初始化
Input parameter :   none
Return          :   none
Others    :   none                                    
*************************************************/


void key_init( void)
{
   volatile unsigned temp;
   
   //GPGCON
   temp =rGPGCON;
   temp &= ~((0x3<<22)|(0x3<<14)|(0x3<<12)|(0x3<<10)|(0x3<<6)|(0x3));
   rGPGCON = temp;
   
   //GPGUP
   temp =rGPGUP;
   temp |= ((1<<11)|(1<<7)|(1<<6)|(1<<5)|(1<<3)|(1));
   rGPGUP = temp;
}


/***********************************************
Function  name  :   key_init
Description     :   按键初始化
Input parameter :   none
Return          :   none
Others    :   none                       
*************************************************/


int key_scan( void)
{
   volatile unsigned temp;
   temp = ~rGPGDAT;
   temp &= (1<<11)|(1<<7)|(1<<6)|(1<<5)|(1<<3)|(1);
   
   switch( temp)
   {
   case 1:
   {
      return KEY_1;
      break;
   }
   case 1<<3:
   {
      return KEY_2;
      break;
   }
   case 1<<5:
   { 
      return KEY_3;
      break;
   }
   case 1<<6:
   {
      return KEY_4;
      break;
   }
   case 1<<7:
   {
      return KEY_5;
      break;
   }
   case 1<<11:
   {
      return KEY_6;
      break;
   }
   default:
      return KEY_N;
      break;
   }
   return KEY_N;;   
}


/***********************************************
Function  name  :   get_keyvalue
Description     :   确认按键是否按下
Input parameter :   none
Return          :   none
Others    :   none                                    
*************************************************/


int get_keyvalue(void)
{
   volatile unsigned temp;
   unsigned int key = KEY_N;
   
   if( key_scan() != KEY_N)
   {
      Delay_MS( 10);
      if( key_scan() != KEY_N)
      {
         key = key_scan();
         while( key_scan() != KEY_N);//防重复       
      }
   }
   return key;
}

0 0
原创粉丝点击