?? ky_init51.msa
字號:
/*****************************************************************
** key board interrupt **
** write by jfwoo & Gongee **
** 2002-6-12 **
** (c) Copyright Actions Co,Ld. **
** **
** revision history 1.0 2002-6-12 **
** revision history 2.0 2002-7-15 **
** revision history 3.0 2002-8-12 **
*****************************************************************/
/* 說明:
**A。 此鍵盤具有與PC 鍵盤相同的特性
** 1。重復的延時時間---- 按住某個鍵時,該鍵響應的重復速率
** 2。重復速度--------- 按住某個鍵時,該鍵響應重復前的延遲時間
** 一般,要保證重復的延時時間要比重復的速度要長,這樣既可以保證按一下鍵不會被重復響應,
** 也不至于降低重復按鍵的響應速度
**B。 此代碼是針對標準DEMO板的
**C。 用戶進程要區分長短按消息,必須對重復次數進行計數。
**
** -+----------------------------------+------------+------------+-----……-------+------#
** |___________重復的延時時間__________| |__重復速度___|
**
** 其中 + 表示驅動產生的消息, #表示鍵盤抬起消息
**
*/
#include "KY_HARD.h"
#define FIRST_STICK_TIMES 8
#define STICK_TIMES 8
//#define Hard_2085_key
#ifdef Hard_2051_key
#define HoldIOEn 0xf3
#define HoldIO 0xf4
#define HoldIOBit 0x04
#define SetHoldIOEnBit 0x40 //bit6
#define ClrHoldIOEnBit 0xfb //bit2
#define ModeSwitchIOEn 0xf1
#define SetModeSwitchIOEnBit 0x80 //bit7
#define ModeSwitchIO 0xf2
#define SetModeSwitchIOBit 0x80 //bit7
#endif
name keyinit
public sKY_Init //鍵盤需要初始化
public sKY_Exit
extern RTCTimer_Counter
extern RTCHold_Counter
extern TheLastHold
extern TheLastMode
extern StickTimes
#ifdef SupportWcrl
extern TheKeywcrl
#endif
extern sISR_Keyboard
extern sISR_RTCTimer
extern TimeNo
extern OldKeyIsr
//extern LightTime
rseg BAC_IE
/*
********************************************************************************
* sKY_Init
*
* Description :enable and init keyboard scan
*
* Arguments : void
*
* Returns : void
*
* Notes :
*
********************************************************************************
*/
#ifdef Hard_2051_key
sKY_Init:
//安置鍵盤的驅動程序
//對于鍵盤驅動的舊中斷向量,不需要保存,因為鍵盤驅動不會被卸掉
ld de,sISR_Keyboard
ld c,IRQ_KEY
mIRQ_Intercept
ld de,sISR_RTCTimer
ld c,0x02
mTM_SetTimer
in a,(HoldIOEn) //GPIO C2 輸入口 作Hold檢測
or SetHoldIOEnBit
and ClrHoldIOEnBit
out (HoldIOEn),a
in a,(ModeSwitchIOEn) //Giob7 輸入口 作mode開關檢測
or SetModeSwitchIOEnBit
out (ModeSwitchIOEn),a
// ld a,08h
// out (0fbh),a
// out (0fdh),a //先將giof3置高
in a,(0feh) //gpio_g input enable
or 10h
out (0feh),a
//***********硬件掃描按鍵口定義************ 2*5按鍵掃描**********//
ld a,0x28
out (0eeh),a //功能方式2,即GpioF0、GpioF1為keyin0,keyin1,A口輸出使能且輸出為0
ld a,037H
out (0efh),a
ld a,97h
out (0c1h),a
in a,(REG27_MASTER_IRQ_ENABLE) //enable key interrupt
or 40h
out (REG27_MASTER_IRQ_ENABLE),a
ld a,08
ld (StickTimes),a
xor a //disable rtc timer
ld (RTCTimer_Counter),a
in a,(HoldIO) //GIOc2用作檢測HOLD
and HoldIOBit
ld (TheLastHold),a //給Hold記錄變量賦初值,否則會打開背光
in a,(ModeSwitchIO) //Giob7 輸入口 作mode開關檢測
and SetModeSwitchIOBit
ld (TheLastMode),a
ld a,06h
ld (RTCHold_Counter),a //HOLD pin檢測定時器設定20ms*3=60ms
//#ifdef SupportWcrl
// in a,(0d1h)
// or 0fch
// and 0fch
// out (0d1h),a ;en adc1 & sample rate=1k
// in a,(0d8h)
// ld (TheKeywcrl),a
//#endif
#endif
#ifdef Hard_2085_key
sKY_Init:
//安置鍵盤的驅動程序
ld de,sISR_Keyboard
ld c,IRQ_KEY
mIRQ_Intercept
ld (OldKeyIsr),hl
ld de,sISR_RTCTimer
ld c,0x02
mTM_SetTimer
ld (TimeNo),a
ld a,0x08
out (0eeh),a //enable A2
in a,(0xf3) //GPIO C2 hold輸入
or 0x40
and 0xfb
out (0xf3),a
// in a,(0xf1) //b5 mode 輸入
// or 0x20
// out (0xf1),a
in a,(0feh) //gpio_g input enable
or 10h
out (0feh),a
ld a,077H //3*3 按鍵
out (0efh),a
ld a,87h
out (0c1h),a
in a,(REG27_MASTER_IRQ_ENABLE) //enable key interrupt
or 40h
out (REG27_MASTER_IRQ_ENABLE),a
ld a,08
ld (StickTimes),a
xor a //disable rtc timer
ld (RTCTimer_Counter),a
in a,(0f4h) //GIOc2用作檢測HOLD
and 0x04
ld (TheLastHold),a //給Hold記錄變量賦初值,否則會打開背光
in a,(0ffh)
and 0x01
ld (TheLastMode),a
ld a,06h
ld (RTCHold_Counter),a //HOLD pin檢測定時器設定20ms*3=60ms
// in a,(0f4h)
// and 0xfb //EL LAMP 關掉
// out (0f4h),a
//#ifdef SupportWcrl
// in a,(0d1h)
// or 0fch
// and 0fch
// out (0d1h),a ;en adc1 & sample rate=1k
// in a,(0d8h)
// ld (TheKeywcrl),a
//#endif
#endif
ld a,01h //返回TRUE
ret
sKY_Exit:
ld a,(TimeNo)
ld e,a
mTM_KillTimer
ld de,(OldKeyIsr)
ld c,IRQ_KEY
mIRQ_Release
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -