📄 key.c
字号:
#include "Key.h"
#include "CommonDefine.h"
#include "LCD.h"
extern const u8 STR_SHUTDOWN[];
/**************************************************************************************************
** 函数名: GS_Bee
** 输 入: void
** 输 出: void
** 功能描述: 驱动 轰鸣器 发音
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/15
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void GS_Bee(u8 Dat)
{
u16 i;
while(Dat--)
{
i=2500;
while(i--);
}
}
/**************************************************************************************************
** 函数名: Key_Init
** 输 入:
** 输 出:
** 功能描述:
** 说 明:
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void Key_Init(void)
{
GPIO_Config(GPIO0, 0xBC00, GPIO_IN_TRI_CMOS);
}
/**************************************************************************************************
** 函数名: Key_GetAll
** 输 入:
** 输 出:
** 功能描述:
** 说 明: Key端口常态时为1,按下时响应口线输入0。
按下 KEY_CANCEL/KEY_ENTER/KEY_UP/KEY_DOWN/KEY_POWER 返回 0x0400/0x0800/0x1000/0x2000/0x8000。
无任何按键按下则返回0x0000。
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
int Key_GetAll(void)
{
return GPIO_WordRead(GPIO0) & 0xBC00 ^ 0xBC00;
}
/**************************************************************************************************
** 函数名: Key_WaitKey
** 输 入:
** 输 出:
** 功能描述: 防抖动按键
** 说 明:
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
int Key_WaitKey(void)
{
int i;
u32 TimeOut= 0x12BFED4; //40s 自动关机
while(1)
{
while(Key_GetAll()==0x0000) //等按下
{
if(--TimeOut==0)
{
GS_ClearLCD();
GS_PutString(0, 2, (u8 *)STR_SHUTDOWN, TEXT_ALIGN_CENTER, NEGATE_COLOR_NONE);
Delay(9600*800);
GPIO_Config(GPIO1, 0x0020, GPIO_OUT_PP); //配置开机保持端口P1.5
GPIO_BitWrite(GPIO1,0x05,0x01); //关机,关闭开机保持信号P1.5.
return 0x0000;
}
}
i = Key_GetAll();
Delay(96000*2); //30ms
if(i == Key_GetAll())
{
while(Key_GetAll()!=0x0000); //等松开
Delay(96000*2); //20ms
return i;
}
}
}
/**************************************************************************************************
** 函数名: Key_State
** 输 入:
** 输 出:
** 功能描述: index is 0~4, return Key_State "0" or "1", "1"表示按下。
index0~4分别对应 KEY_CANCEL/KEY_ENTER/KEY_UP/KEY_DOWN/KEY_POWER。
** 说 明:
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
int Key_State(int index)
{
switch(index)
{
case 0:
return GPIO_BitRead(GPIO0,0x0A) & 1 ^ 1; //KEY_CANCEL, p0.10
case 1:
return GPIO_BitRead(GPIO0,0x0B) & 1 ^ 1; //KEY_ENTER, p0.11
case 2:
return GPIO_BitRead(GPIO0,0x0C) & 1 ^ 1; //KEY_UP, p0.12
case 3:
return GPIO_BitRead(GPIO0,0x0D) & 1 ^ 1; //KEY_DOWN, p0.13
case 4:
return GPIO_BitRead(GPIO0,0x0F) & 1 ^ 1; //KEY_POWER, p0.15
}
return 0;
}
/**************************************************************************************************
** 函数名: GS_GetKey
** 输 入: void
** 输 出: u16
** 功能描述: 扫描键盘,消抖后返回键值
** 说 明:
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
u16 GS_GetKey(void)
{
int i;
i = Key_GetAll();
Delay(96000*2); //30ms
if(i == Key_GetAll())
{
while(Key_GetAll()!=0x0000); //等松开
Delay(96000*2); //20ms
return i;
}
else
return 0x0000;
}
/*
u16 GS_GetKey(void)
{
u8 keyvalue;
u16 TimeOut=0, Dat;
u16 PressKey=0x0000;
if(PressKey!=0x0000)
{
// GS_Delay(10); //延迟 10ms 消抖
if( Key_GetAll() == PressKey )
{
Dat = 0x1fff;
while(Dat--)
{
if(Key_GetAll()!=PressKey)
{
PressKey = 0x0000;
break;
}
}
return PressKey;
}
else
{
while ( Key_GetAll() != 0x0000);
PressKey = 0x0000;
return 0x0000;
}
}
keyvalue = Key_GetAll();
if(keyvalue != 0x0000)
{
// GS_Delay(10); //延迟 10ms 消抖
if( Key_GetAll() == keyvalue )
{
while ( Key_GetAll() != 0x0000)
{
TimeOut++;
if(TimeOut==0x4fff)
{
PressKey = keyvalue;
GS_Bee(5);
return keyvalue;
}
}
// GS_Bee(5);
PressKey = 0x0000;
return keyvalue;
}
}
return 0x0000;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -