?? keys.bak
字號:
/**********************************************************************************************
KEYS.c file
按鍵處理程序
作者:Computer-lov
建立日期:2006-4-11
修改日期:2006-5-12
版本:V1.0
版權(quán)所有,盜版必究。
任何技術(shù)問題可到我的博客上留言: http://computer00.21ic.org
Copyright(C) Computer-lov 2006-2016
All rights reserved
**********************************************************************************************/
#include "KEYS.h"
#include <ADuC7027.H>
KEYBoard Key; //定義一個Key結(jié)構(gòu)體。
/*********************************************************************************************/
void KEYBoardInit(void)
{
GP0CON &= ~(0x00330000); //將按鍵對對應(yīng)的IO口設(shè)置為GPIO口
GP1CON &= ~(0x00330000);
GP0DAT &= ~(0x30000000); //將按鍵對應(yīng)的IO設(shè)置為輸入口
GP1DAT &= ~(0x30000000);
GP0PAR &= ~(0x00110000); //打開按鍵對應(yīng)的IO口的上拉電阻
GP1PAR &= ~(0x00110000);
Key.Value=0; //Key初始化
Key.OldValue=0;
Key.NewValue=0;
Key.PressedTime=0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
/**********************************************************************************************
功能:延時x毫秒。
入口參數(shù):x。要延時的毫秒數(shù)。
返回:無。
備注:純軟件延時,不同的指令執(zhí)行速度,運行結(jié)果會不一樣。
**********************************************************************************************/
void DelayXms(uint32 x)
{
uint32 i;
while(x--)
{
i=5300;
while(i--);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
/**********************************************************************************************
功能:鍵盤掃描程序。
入口參數(shù):無。
返回:無。
備注:按鍵相關(guān)信息保存在Key中。請參看KEYBoard結(jié)構(gòu)體。
**********************************************************************************************/
void ScanKey(void) //鍵盤掃描
{
if(Key.Value)return; //如果上次按鍵還未處理,則直接返回,不掃描新的按鍵
if(KEY1IN && KEY2IN && KEY3IN && KEY4IN) //如果輸入全部是高,則按鍵處于釋放狀態(tài)
{
if(!(Key.OldValue)) //如果上次無按鍵按下
{
return; //返回
}
else //如果上次有按鍵按下
{
if(Key.PressedTime>100) //按鍵時間超過一秒,長按鍵碼
{
Key.Value=Key.OldValue+0x80; //長按鍵碼等于普通按鍵碼加0x80
}
else if(Key.PressedTime>1)
{
Key.Value=Key.OldValue; //按鍵值
}
Key.OldValue=0;
}
return;
}
else //按鍵按下
{
Key.NewValue=0;
if(!KEY1IN)Key.NewValue=KEY1; //KEY1鍵按下
if(!KEY2IN)Key.NewValue=KEY2; //KEY2鍵按下
if(!KEY3IN)Key.NewValue=KEY3; //KEY3鍵按下
if(!KEY4IN)Key.NewValue=KEY4; //KEY4鍵按下
if(Key.NewValue==Key.OldValue) //如果連續(xù)兩次掃描到一樣的鍵,即按鍵按下長于10ms
{
if(Key.PressedTime>200) //如果按鍵按下超過2s
{
Key.PressedTime-=4; //則自動按鍵。相當于每隔50ms按一次
Key.Value=Key.NewValue;
return;
}
else
{
Key.PressedTime++; //按鍵按下計時加一
}
}
else
{
Key.PressedTime=0; //如果本次按下跟上次按下不一樣,則按鍵按下時間清零
}
Key.OldValue=Key.NewValue; //保存本次按鍵值
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -