📄 key_drv.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 + -