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

📄 key_drv.c

📁 意法半导体ARM7 STR710+DM9000A的TCP/IP实现
💻 C
字号:
//----------------------------------------------------------------------------
// Filename : key_drv.c
//----------------------------------------------------------------------------
//
// Copyright (c) 2008,东莞太平计算机科技有限公司
// All rights reserved.
// www.pacific-gold.com.cn
//
// 历史版本:
//
//    版本:  V1.0
//    作者:  罗先能
//    日期:  2007-12-21
//    描述:  建立第一版本
//
//                                
// 描述:
//    1. 按键的驱动程序
//
//
//----------------------------------------------------------------------------


//----------------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------------
// system headers 
#include "71x_lib.h"
#include <ucos_ii.h>
// internal headers
#include "Key_drv.h"
// extern   headers 


//----------------------------------------------------------------------------
// Local Constant Definitions
//----------------------------------------------------------------------------
#define ENTER     0x0020  // p2.5  == S1
#define RIGHT     0x0040  // P2.6  == S2
#define UP        0x0080  // P2.7  == S4
#define LEFT      0x1000  // P2.12 == S6
#define ESC       0x2000  // P2.13 == S7
#define DOWN      0x4000  // P2.14 == S8

#define MENU      0x8000  // p0.15 == S5  wake-up key


//----------------------------------------------------------------------------
// local Variables Definitions
//----------------------------------------------------------------------------
private int save0, save1;
private int scan_states;


//----------------------------------------------------------------------------
// Global Variables Definitions
//----------------------------------------------------------------------------
public KEY key;


//----------------------------------------------------------------------------
// Local Function Definitions
//----------------------------------------------------------------------------
private void do_scan(void)
{
    save1  = save0;
    save0  = ( GPIO_WordRead(GPIO0) & MENU );
    save0 |= ((GPIO_WordRead(GPIO2) & 
              (ENTER| ESC | LEFT| RIGHT | UP | DOWN)) ^
              (ENTER| ESC | LEFT| RIGHT | UP | DOWN)   );
    key.putdown = (save0 ^ save1) & save0 ; // falling edge
    key.release = (save0 ^ save1) & save1 ; // rising edge       

}


//----------------------------------------------------------------------------
// Global Function Definitions
//----------------------------------------------------------------------------
/**************************************************************
* Function:   key_init(void)
* Description:
*             initialize  I/O ports
* Input:   
* Return:   
*          
**************************************************************/
public bool key_init(void)
{
        GPIO_Config(GPIO0, MENU, GPIO_IN_TRI_CMOS);
        GPIO_Config(GPIO2, ENTER|ESC|RIGHT|LEFT|DOWN|UP, GPIO_IN_TRI_CMOS);
        save0= save1= 0;
        key.release= key.putdown = 0;
        scan_states = 0 ;
        return TRUE;
}


/**************************************************************
* Function:  key_putdown(KEY_DEF)
* Description:
*            check  falling edge of keys
* Input:   
* Return:    KEY.putdown
*          
**************************************************************/
public bool key_putdown(KEY_DEF key_def)
{
    if( key.putdown & key_def)
          return TRUE;
    else  return FALSE;
}


/**************************************************************
* Function:  key_release(KEY_DEF)
* Description:
*            check  rising edge of keys
* Input:   
* Return:  KEY.release
*          
**************************************************************/
public bool key_release(KEY_DEF key_def)
{
    if( key.release & key_def)  
          return TRUE;
    else  return FALSE;
}


/**************************************************************
* Function:  key_scan(void)
* Description:
*             scan keyboard at once
* Input:   
* Return:   
*          
**************************************************************/
public void key_scan(void)
{   /* flash Variables */
    while( scan_states<4 ) 
    {  
       scan_states++;  
       do_scan();
    }

    do_scan();
    /* proccess putdown keys  */
    // key_putdown(); 

    /* proccess release keys  */
    // key_release();

}


⌨️ 快捷键说明

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