?? keyscan.h.bak
字號:
#include "cpu.h"
#define SCANTIME 244 //3ms 236 //5ms 217 //10ms 4M
#define P2 (*(0x05))
//#define MATRIX //若定義為MATRIX則為4X4鍵盤的掃描,否則為單個端口的掃描。
#define KeyScan() P2&0xff //單個端口掃描語句
#define KEYCOUNT1 1 //按鍵按下時間計數
#define KEYINIT 0xff //這里是高四位作為按鍵,可根據具體情況定義。
//KeyDown 按下的鍵(不會自動清除,若用完后應把相應位清除)
//KeyUp 彈起的鍵(不會自動清除,若用完后應把相應位清除)
//KeyLast 上次鍵的狀態
//KerPress 反應實時鍵的情況。
int8 KeyDown,KeyUp,KeyLast,KeyPress;
int8 KeyCount; //按鍵時間計數
int8 KeyCurrent,KeyOld;
/********************************************************************
函數功能:定時器0初始化,用來做鍵盤掃描,定時時間大約為10ms。
入口參數:無。
返 回:無。
備 注:無。
********************************************************************/
void InitTimer0(void)
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
clear_interrupt(INT_RTCC);
enable_interrupts(INT_RTCC);
SET_TIMER0(SCANTIME);
}
void Key_Init()
{
KeyOld=KEYINIT;
KeyLast=KEYINIT;
KeyCount=0;
KeyDown=0;
KeyUp=0;
}
void GetKey()
{
KeyCurrent=KeyScan(); //獲取當前鍵值
if(KeyCurrent!=KeyOld) //與上一次鍵值不等,說明發生了改變。
{
KeyOld=KeyCurrent; //保存新鍵值。
KeyCount=0;
return;
}
else
{
KeyCount++;
if(KeyCount>=KEYCOUNT) //確認為有效按鍵(包括空鍵).
{
KeyCount=KEYCOUNT; //停止計數
#ifndef MATRIX
KeyPress=KeyOld; //保存當前按鍵
#endif
KeyDown|=((~KeyPress)&KeyLast); //按下的鍵(不會自動清除,若用完后應把相應位清除)
KeyUp|=(KeyPress&(~KeyLast)); //彈起的鍵(不會自動清除,若用完后應把相應位清除)
KeyLast=KeyPress;
}
}
}
#int_rtcc
void timer0_handle(void)
{
SET_TIMER0(SCANTIME);
// if(input(PIN_B2)) output_low(PIN_B2); else output_high(PIN_B2);
GetKey();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -