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

📄 key.c

📁 在LPC2368下
💻 C
字号:
#include <LPC23xx.H>
#include "type.h"
#include "Key.h"
#include "irq.h"
enum KEY_SCAN_STATUS
{
	NO_KEY,
	KEY_SCAN_ENTER,
	KEY_SCAN_REALEASE
};
enum KEY_SCAN_STATUS key_scan_status;


enum KEY_STATUS key_Status;

unsigned char key_scan_flag=0;
unsigned int key_counter=0;				//按键按下时的时间计数器
unsigned char key_value=0;	  			//保存按键值

void Timer3_Handler(void) __irq
{
	unsigned char temp=0;
	temp=T3IR;							// 清除CAP1.0中断标志
	T3IR|=MCR0_INT;
	if(Read_Key()==0x0F)
	{
		key_scan_flag=0;				//按键释放或者无键按下	
	}
	else
	{
		key_value=Read_Key();
		key_counter++;	
		key_scan_flag=1;           		//有键按下
	}
	temp++;
    VICVectAddr = 0x00;					// 向量中断处理结束
}

void Init_Timer3()
{

	key_scan_flag=0;
	key_value=0;	  			//保存按键值
   	key_counter=0;				//作为按键计数器
	PCONP |= (1 << 23) ;	// Enable clock to the peripheral

   	T3TCR=0;  					//定时器1禁能
	T3PR=0x05;      			//把PCLK六分频,f=2M

	T3MR0 = FPCLK_TIME/100; 		//每10ms中断一次
   	T3CTCR=0; 					//CAP1。0用于定时器1的定时器模式
   	install_irq( TIMER3_INT, (void *)Timer3_Handler, LOWEST_PRIORITY );

   	T3MCR = 3;
   	T3TCR = 1;					//定时器1使能
}


//读取键盘值,没有键按下时 ,返回0xF0
unsigned char Read_Key()
{
    unsigned char key_value=0xff;
    key_value=((FIO1PIN3)&0x0F); 
    return key_value;            
}

void Key_Scan()
{
	switch(key_scan_status)
	{
		case NO_KEY:
			if(key_scan_flag==1)
			{	
				key_scan_status=KEY_SCAN_ENTER;	
				key_counter=0;
			}
			break;
		case KEY_SCAN_ENTER:
			if(key_scan_flag==0)
			{
				key_scan_status=KEY_SCAN_REALEASE;		
			}
			break;
		case KEY_SCAN_REALEASE:
			if(key_counter>=6)     //当按键》=60ms时,认为是一次真实的按键
			{
				switch(key_value)
			    {
			        case 0x0E:
			            key_Status=KEY_ENTER;
			            break;
			        case 0x0D:
			            key_Status=KEY_RIGHT;
			            break;
			        case 0x0B:
			            key_Status=KEY_UP;
			            break;
			        case 0x07:
			            key_Status=KEY_ESC;
			            break;
			    }	
			}
			else
			{
				key_counter=0;
					
			}
			key_scan_status=NO_KEY;
			break;   
	}	
}

⌨️ 快捷键说明

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