📄 key_isr.c
字号:
//========================================================================
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================================
//========================================================================
// Filename: Key_ISR.c
// Author: Lianshu Mou (email: Lianshu@sunnorth.com.cn)
// Date: 2004/12/22
// Description:
//
// Reference:
// Revision:
// 2004/12/22 First version
//========================================================================
#include "Spmc75_regs.h"
#include "mcMACRO.h"
#include "Option.h"
int Key_NEW = 0;
int Key_ISR_Time = 0;
int Key_Buffer;
unsigned int Key_Temp;
void Key_Data_dispose(int Key_NUM);
//=================================================================================================
// ----Function: void Key_Init(void);
// -Description: 键盘初始化
// --Parameters: None
// -----Returns: None
// -------Notes: 没有问题
//=================================================================================================
void Key_Init(void)
{
Key_Port_Attrib &= ~Key_Const; //正常属性
Key_Port_Buffer |= Key_Const; //设置为上拉
Key_Port_Dir &= ~Key_Const; //方向设置
Key_Port_SPE &= ~Key_Const; //特殊功能设置
Key_Buffer = 7;
}
//=================================================================================================
// ----Function: int Key_Data(unsigned int Data);
// -Description: 获取当前键的键值
// --Parameters: None
// -----Returns: None
// -------Notes: 没有问题
//=================================================================================================
int Key_Data(unsigned int Data)
{
int i;
Data ^= 0xffff; //取反
Data &= Key_Const;
for(i = 0;i < 9;i ++)
{
if((Data&0x0020) > 0) break;
else Data = Data >> 1;
}
switch(i)
{
case 0:
case 1:
case 2: i = i + 1;
break;
case 3:
case 6:
case 7: i = 7;
break;
case 4:
case 5:
break;
case 8: i = i - 2;
break;
default: break;
}
return(i);
}
//=================================================================================================
// ----Function: void Key_ISR(void);
// -Description: 键盘扫描服务
// --Parameters: None
// -----Returns: None
// -------Notes: 没有问题
//=================================================================================================
void Key_ISR(void)
{
unsigned int Temp;
Key_ISR_Time ++;
switch(Key_NEW)
{
case 0:
Key_Temp = Key_Port_Data;
Key_Temp &= Key_Const;
if(Key_Temp != Key_Const)
{
Key_NEW = 1;
Key_ISR_Time = 0;
}
break;
case 1:
if(Key_ISR_Time > 3)
{
Temp = Key_Port_Data;
Temp &= Key_Const;
if(Key_Temp == Temp)
{
Key_Buffer = Key_Data(Key_Temp);//获取当前键的键值
Key_NEW = 2;
Key_ISR_Time = 0;
}
else Key_NEW = 0;
}
break;
case 2:
if(Key_ISR_Time < 500)
{
Temp = Key_Port_Data; //判断键是否释放
if((Temp & Key_Const) == Key_Const)
{
Key_NEW = 4; //键释放
Key_ISR_Time = 0;
}
}
else
{
Key_NEW = 3; //键长按
Key_ISR_Time = 0;
}
break;
case 3: //键长时间不释放处理
Temp = Key_Port_Data;
if((Temp&Key_Const) != Key_Const)
{
if(Key_ISR_Time > 50)
{ //信息更新处理,注意判断只有数据增减键有这一特殊处理
Key_Data_dispose(Key_Buffer);
Key_ISR_Time = 0;
}
}
else
{
Key_NEW = 4; //键释放
Key_ISR_Time = 0;
}
break;
case 4:
if(Key_ISR_Time > 3) //键已释放
{
NOP();
Key_Data_dispose(Key_Buffer);
Key_NEW = 0; //准备下一次
}
break;
default: break;
}
}
//=================================================================================================
// ----Function: void Key_Data_dispose(int Key_NUM);
// -Description: 键盘数据处理,命令分配
// --Parameters: 传递的参数是键号
// -----Returns: None
// -------Notes: 没有问题
//=================================================================================================
void Key_Data_dispose(int Key_NUM)
{
switch(Key_NUM)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -