⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ky_init51.msa

📁 矩力MP4 GPIO及线控键盘应用源代码
💻 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 + -