?? key.c
字號:
/******************************************************************
本程序只供學習使用,未經作者許可,不得用于其它任何用途
我的郵箱:computer-lov@tom.com
歡迎訪問我的blog: http://computer00.21ic.org
KEY.C file
作者:Computer-lov
建立日期: 2007.03.20
修改日期: 2007.03.22
版本:V1.1
版權所有,盜版必究。
Copyright(C) Computer-lov 2007-2017
All rights reserved
*******************************************************************/
#include "Key.h"
#include "my_type.h"
uint16 idata KeyMapCurrent,KeyMapOld,KeyMapOk,KeyNoChangedTime;
uint8 KeyMapCanChange;
#define KeyIO P1
/*************************定時器0初始化***************************************/
void InitTimer0(void)
{
TMOD&=0xF0;
TMOD|=0x01;
TH0=0xDC;
ET0=1;
TR0=1;
}
/******************************************************************************/
/*************************定時器0中斷處理***************************************/
void Timer0Isr(void) interrupt 1
{
uint8 temp;
TH0=0xDC; //定時器0重裝
KeyIO=0x0F;
if((KeyIO&0x0F)==0x0F) //如果現在沒有按鍵按下
{
KeyMapCurrent=0; //沒有鍵按下
}
else
{
//開始鍵盤掃描
//掃描第一行
KeyIO=~0x10;
//保存四個開關狀態
temp=KeyIO&0x0F;
//掃描第二行
KeyIO=~0x20;
//保存四個開關狀態
temp|=KeyIO<<4;
//保存按鍵狀態到當前按鍵情況
KeyMapCurrent=(~temp)&0xFF;
//掃描第三行
KeyIO=~0x40;
//保存四個開關狀態
temp=KeyIO&0x0F;
//掃描第四行
KeyIO=~0x80;
//保存四個開關狀態
temp|=KeyIO<<4;
//保存全部16個開關的狀態
//KeyMap總共有16個bit,當某個開關按下時,
//對應的bit為1
KeyMapCurrent|=(((uint16)~temp)<<8);
}
if(KeyMapCurrent!=KeyMapOld) //說明按鍵情況發生了改變
{
KeyNoChangedTime=0; //鍵盤按下時間為0
KeyMapOld=KeyMapCurrent; //保存當前按鍵情況
return;
}
else
{
KeyNoChangedTime++; //按下時間累計
if(KeyNoChangedTime>=1) //如果按下時間足夠
{
KeyNoChangedTime=1;
if(KeyMapCanChange)
{
KeyMapOk=KeyMapOld; //保存按鍵
}
}
}
}
/******************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -