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

📄 keypad_soft.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 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 + -