📄 key.c
字号:
/************************************************************************/
/* */
/* key scan */
/* */
/* Author: zhiqiang huo */
/* left key P2.7 */
/* mid key p2.6 */
/* right key P2.5 */
/************************************************************************/
#include "reg52.h"
#include "typedef.h"
#include "function.h"
#include "define.h"
#include "varible.h"
#define LEFTKEY 0x01 //LEFF KEY
#define MIDDLEKEY 0x02 //
#define RIGHTKEY 0x03
#define SETMIMA 0x04 //left and mid key
#define BIAODIN 0x05 //mid and right key
#define KEY_TM 4
#define NOKEY 0
#define KEYOK 1
sbit POP_PORT = P3^7 ;
//***************function declare******************
void Key_init(void);
void Key_hd(void);
void Key_scan(void);
unsigned char Key_judge(void);
void Con_key(void);
//***************8*********************************
/****************************/
/****************************/
void Key_init(void)
{
unsigned char i;
for(i=0;i<4;i++)
key_data[i] = 0 ;
key_tmr = 0;
keyvld = 0;
keyvld_old = 0 ;
key_flag_F = (bit)0;
judge_pop = 0;
empty_pop_F = 0 ;
set_dp_F = 0;
return;
}
/****************************/
/****************************/
void Key_hd(void)
{
Key_scan();
if(key_tmr != 0)
key_tmr--;
else {
key_tmr = KEY_TM;
if(Key_judge() == KEYOK)
Con_key();
if(judge_pop >= 3)
empty_pop_F = EMPTY;
else if(judge_pop <= 1)
empty_pop_F = FULL ;
}
return;
}
/***************************************/
/***************************************/
void Key_scan(void)
{
unsigned char i;
P2=P2|0xe0;
key_data[0]=(~P2)&0xe0; // get P2.5,P2.6,P2.7
for(i=3;i>0;i--)
{
key_data[i]= key_data[i-1];
}
if(POP_PORT == EMPTY)
{
if(judge_pop <= 3)
judge_pop++;
}
else
{
if(judge_pop > 1)
judge_pop--;
}
return;
}
/******************************/
/******************************/
unsigned char Key_judge(void)
{
if((key_data[0] == key_data[1])&&(key_data[1] == key_data[2])
&&(key_data[2] == key_data[3]))
return(1);
else
return(0);
}
/*************************/
/*************************/
void Con_key(void)
{
switch(key_data[1])
{
case 0x80:
keyvld = LEFTKEY;
break;
case 0x40:
keyvld = MIDDLEKEY;
break;
case 0x20:
keyvld = RIGHTKEY;
break;
case 0xc0:
keyvld = SETMIMA;
break;
case 0x60:
keyvld = BIAODIN;
break;
default :
keyvld = NOKEY;
break;
}
if(keyvld == NOKEY)
{
keyvld_old = keyvld ;
key_flag_F = 0;
multi_key_F = 0;
}
else if(keyvld != keyvld_old)
{
if(multi_key_F == 1)
;
else
{
keyvld_old = keyvld;
key_flag_F = 1;
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -