📄 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 + -