📄 keypad_soft.c
字号:
/*****************************************
NAME: keypad.c
DESC: keypad test codes
HISTORY: 2002.12.29:draft ver 0.0
*****************************************/
#include <string.h>
#include "int.h"
#include "keypad_soft.h"
#include "option.h"
#include "24a0addr.h"
#include "24a0lib.h"
#include "def.h"
void __irq Key_ISR(void);
void Key_pad_Init(void);
void Ch29_KEYPAD(void);
void Ch29_KEYPAD(void)
{
int save_U,save_PU;
save_U=rGPCON_U;
save_PU=rGPPU;
Key_pad_Init();
rKEYINTC=(1<<3)|(0x4);//Falling edge
//rKEYINTC=(1<<3)|(0x0);//Low level
//rKEYINTC=(1<<3)|(0x2);//Rising edge
//rKEYINTC=(1<<3)|(0x6);//Both edge
rKEYMAN=0x20;
rKEYDAT=(1<<6)|(1<<7);
pISR_KEYPAD = (int)Key_ISR;
ClearPending(BIT_KEYPAD);
rINTMSK&= ~(BIT_KEYPAD);
Uart_Printf("keypad test start .......\n");
while(!Uart_GetKey()); //Uart_Printf(".");
ClearPending(BIT_KEYPAD);
rINTMSK |= BIT_KEYPAD; //Key Pad Int mask enable
rGPCON_U= save_U;
rGPPU=save_PU;
}
void __irq Key_ISR(void)
{
U16 dat_row[5];
int i=0,j=0;
Uart_Printf("!\n");
rINTMSK |= BIT_KEYPAD;
rKEYINTC&=~(1<<3);
rKEYMAN=0x3e;
Delay(1); //delay(100)=10msec, delay(10)=1msec
dat_row[0]=(rKEYMAN&0x1f);
rKEYMAN=0x3d;
Delay(1); //delay(100)=10msec, delay(10)=1msec
dat_row[1]=(rKEYMAN&0x1f);
rKEYMAN=0x3b;
Delay(1); //delay(100)=10msec, delay(10)=1msec
dat_row[2]=(rKEYMAN&0x1f);
rKEYMAN=0x37;
Delay(1); //delay(100)=10msec, delay(10)=1msec
dat_row[3]=(rKEYMAN&0x1f);
rKEYMAN=0x2f;
Delay(1); //delay(100)=10msec, delay(10)=1msec
dat_row[4]=(rKEYMAN&0x1f);
for(i=0;i<6;i++)
{
if(dat_row[i]==0x1e)
{
Uart_Printf("%d\n",j);
}
else if(dat_row[i]==0x1d)
{
Uart_Printf("%d\n",j+1);
}
else if(dat_row[i]==0x1b)
{
Uart_Printf("%d\n",j+2);
}
else if(dat_row[i]==0x17)
{
Uart_Printf("%d\n",j+3);
}
else if(dat_row[i]==0xf)
{
Uart_Printf("%d\n",j+4);
}
j=j+5;
}
rKEYMAN=(1<<5)|(0x0);
Delay(1);
ClearPending(BIT_KEYPAD); // Remove the pending bit
rINTMSK &= ~(BIT_KEYPAD);
rKEYINTC|=(1<<3);
}
void Key_pad_Init(void)
{
char key;
//int Width_reg=10; //width=30 => 1msec,width=10 => 0.3msec
int Width_reg=100; //width=30 => 1msec,width=10 => 0.3msec
//int Width_reg=0x3fff; //width=30 => 1msec,width=10 => 0.3msec
rGPPU|=(0x3f<<19);
rGPCON_U |=(0x3ffff) ;
rGPCON_M |=(3<<14) ;
Uart_Printf("[KEY_PAD Test]\n");
Uart_Printf("Select Key filter clock...\n");
Uart_Printf("a. RTC Clock b. GCLK \n");
key=Uart_Getch();
switch(key)
{
case 'a':
Uart_Printf(" RTC clock is selected\n");
rKEYFLT0=(1<<1)|(0<<0); //RTC CLK
rKEYFLT1=(Width_reg);
break;
case 'b':
Uart_Printf(" GCLK clock is selected\n");
rKEYFLT0=(1<<1)|(1<<0); // GCLK
rKEYFLT1=(Width_reg);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -