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

📄 keypad.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
字号:
/*****************************************
  NAME: keypad.c
  DESC: keypad test codes
  HISTORY:  2002.12.29:draft ver 0.0
 *****************************************/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "option.h"
#include "2460addr.h"
#include "2460lib.h"
#include "2460slib.h"
#include "keypad.h"


void __irq Key_ISR(void);
void Key_pad_Init(void);
void Ch33_KEYPAD(void);

int count;

void Ch33_KEYPAD(void)
{
	int GPJsave;
	//rKEYIFCON=(1<<3)|(1<<2)|(0x1);

	GPJsave =rGPJCON;
	rGPJCON|=0x1;
	rGPJDAT=0x1;
	
	rKEYIFCON=0xd; 
	rKEYIFFC=0x100;
	printf("rKEYIFCON=%x\n",rKEYIFCON);

	Key_pad_Init();
	
	rKEYIFCOL=0x0;

	pISR_KEYPAD = (int)Key_ISR;
    rINTMSK&= ~(BIT_KEYPAD);
//	printf("rINTMSK=%x\n",rINTMSK);

	printf("keypad test start .......\n");

	while(!Uart_GetKey())
		{
		//printf("rSRCPND0=%x",rSRCPND);
		}//printf(".");

	rGPJCON=GPJsave;
	ClearPending(BIT_KEYPAD);
    rINTMSK |= BIT_KEYPAD;       //Key Pad Int mask enable
}

void __irq Key_ISR(void)
{
	unsigned short dat_row[6];
	int i=0,j=0;

	rGPJDAT=0x0;	

	count++;

	printf("!\n");
	rKEYIFCON=0x0;	
	rKEYIFSTSCLR=0x1; //Interrupt pending clear
	rINTMSK |= BIT_KEYPAD;	
	ClearPending(BIT_KEYPAD); // Remove the pending bit 	


#if 1

	rKEYIFCOL=0x3e;
	Delay(1);  //delay(100)=10msec, delay(10)=1msec 
	dat_row[0]=(rKEYIFROW&0x3f);
		
	rKEYIFCOL=0x3d;
	Delay(10);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[1]=(rKEYIFROW&0x3f);
		
	rKEYIFCOL=0x3b;			
	Delay(10);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[2]=(rKEYIFROW&0x3f);
		
	rKEYIFCOL=0x37;		
	Delay(10);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[3]=(rKEYIFROW&0x3f);
	
	rKEYIFCOL=0x2f;
	Delay(10);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[4]=(rKEYIFROW&0x3f);

	rKEYIFCOL=0x1f;
	Delay(10);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[5]=(rKEYIFROW&0x3f);
	rKEYIFCOL=0x3f;


#else
while(1)
{
	rKEYIFCOL=0x1f;
    Delay(1);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[5]=(rKEYIFROW&0x3f);
	if(dat_row[5]!=0x3f) 
		{
		dat_row[0]=0;
		dat_row[1]=0;
		dat_row[2]=0;
		dat_row[3]=0;
		dat_row[4]=0;
		break;
		}

	rKEYIFCOL=0x2f;
	Delay(1);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[4]=(rKEYIFROW&0x3f);
	if(dat_row[4]!=0x3f) 
		{
		dat_row[0]=0;
		dat_row[1]=0;
		dat_row[2]=0;
		dat_row[3]=0;
		dat_row[5]=0;
		break;
		}

	rKEYIFCOL=0x37; 
	Delay(1);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[3]=(rKEYIFROW&0x3f);
	if(dat_row[3]!=0x3f) 
		{
		dat_row[0]=0;
		dat_row[1]=0;
		dat_row[2]=0;
		dat_row[4]=0;
		dat_row[5]=0;
		break;
		}
	
	rKEYIFCOL=0x3b;
	Delay(1);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[2]=(rKEYIFROW&0x3f);
	if(dat_row[2]!=0x3f) 
		{
		dat_row[0]=0;
		dat_row[1]=0;
		dat_row[4]=0;
		dat_row[3]=0;
		dat_row[5]=0;
		break;
		}

	rKEYIFCOL=0x3e;
	Delay(1);  //delay(100)=10msec, delay(10)=1msec 
	dat_row[0]=(rKEYIFROW&0x3f);
	if(dat_row[0]!=0x3f) 
		{
		dat_row[4]=0;
		dat_row[1]=0;
		dat_row[2]=0;
		dat_row[3]=0;
		dat_row[5]=0;
		break;
		}

    rKEYIFCOL=0x3d;
	Delay(1);	//delay(100)=10msec, delay(10)=1msec 
	dat_row[1]=(rKEYIFROW&0x3f);
	if(dat_row[1]!=0x3f) 
		{
		dat_row[0]=0;
		dat_row[4]=0;
		dat_row[2]=0;
		dat_row[3]=0;
		dat_row[5]=0;
		break;
		}
}
#endif

   // printf("row0:%x,row1:%x,row2:%x,row3:%x,row4:%x,row5:%x\n",
    //dat_row[0],dat_row[1],dat_row[2],dat_row[3],dat_row[4],dat_row[5]);

//	rKEYIFSTSCLR=0x3; //Interrupt pending clear

#if 1
	for(i=0;i<7;i++)
		{
		if(dat_row[i]==0x3e)
			{
			printf("%d\n",j);
			}
		else if(dat_row[i]==0x3d)
			{
			printf("%d\n",j+1);
			}
		else if(dat_row[i]==0x3b)
			{
			printf("%d\n",j+2);
			}
		else if(dat_row[i]==0x37)
			{
			printf("%d\n",j+3);
			}
		else if(dat_row[i]==0x2f)
			{
			printf("%d\n",j+4);
			}
		else if(dat_row[i]==0x1f)
			{
			printf("%d\n",j+5);
			}
		j=j+6;
		}

#else 

	for(i=0;i<7;i++)
		{
		if(dat_row[i]==0x3e)
			{
			printf("%d\n",j);
			}
		if(dat_row[i]==0x3d)
			{
			printf("%d\n",j+1);
			}
		if(dat_row[i]==0x3b)
			{
			printf("%d\n",j+2);
			}
		if(dat_row[i]==0x37)
			{
			printf("%d\n",j+3);
			}
		if(dat_row[i]==0x2f)
			{
			printf("%d\n",j+4);
			}
		if(dat_row[i]==0x1f)
			{
			printf("%d\n",j+5);
			}
		j=j+6;
		}
#endif

//	Delay(1);
	rKEYIFCOL=0x0;
	rKEYIFCON=0x1;
	//Delay(1);
	ClearPending(BIT_KEYPAD); // Remove the pending bit 	
	rINTMSK &= ~(BIT_KEYPAD);

	rGPJDAT=0x1;	
 }

void Key_pad_Init(void)
{
	rGPDCON=0xaaaaaa;
	rGPDPU=0xfff;
	printf("[KEY_PAD Test]\n");
	printf("GPDCON=%x\n",rGPDCON);
	
//	rKEYIFCON=(1<<3)|(1<<2)|(0x1); 
	printf("KEYIFCON=%x\n",rKEYIFCON);
	//[0]:Falling edge, [1]:rising edge, [2]:Debouncing filter, [3]:10-bit counter enable, [5:4]:wakeup enable
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -