📄 key.c
字号:
/************************************************************************************/
/* 程序名:44键盘代码 */
/* */
/* 晶振:12.0 M CPU型号:AT89S52 */
/* */
/* */
/* 功能描述: 44键盘代码,需将J10,J20相应的键用杜邦线连接起来 */
/* */
/* MENU_yes <- -> NO_back */
/* 1 2 3 + */
/* 4 5 6 - */
/* 7 8 9 0 */
/* */
/* QQ:276193028 */
/* E-mail:shenchangwei945@163.com */
/* */
/* */
/* 现代虚拟仪器仪表研究所 */
/* 2007-09-15 */
/************************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define countend 40
#define countsub 5
/*
#define Key_con P3
#define key_yes 0x18 //MENU_yes
#define key_L 0x14 //<-
#define key_R 0x12 //->
#define key_no 0x11 //NO_back
#define key_1 0x28 //1
#define key_2 0x24 //2
#define key_3 0x22 //3
#define key_+ 0x21 //+
#define key_4 0x48 //4
#define key_5 0x44 //5
#define key_6 0x42 //6
#define key_- 0x41 //-
#define key_7 0x88 //7
#define key_8 0x84 //8
#define key_9 0x82 //9
#define key_0 0x81 //0
*/
#define L 10
bit keyflag = 0;
extern void Delay_1ms(unsigned char t);
extern Key_con;
unsigned char kbscan();
uchar keyscan(void);
/**************此函数具有长按加速功能******************/
unsigned char keyscan(void)
{
unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};
static unsigned char keycounter = 0;
Key_con = 0xF0;
if((Key_con & 0xF0)!= 0xF0)
{
Delay_1ms(20);
if((Key_con & 0xf0)!= 0xF0)
{
for(i = 0; i<4; i++)
{
Key_con = code_h[i];
if((Key_con & 0xF0) != 0XF0)
{
code_l = (Key_con & 0xF0) | 0x0F;
if(keyflag)//不是第一次按下则执行以下程序
{
keycounter++;//计数器加1
if(keycounter == countend)
{
keycounter -= countsub;//到一百了再减去
return ((~code_h[i])+(~code_l));
}
else
{return 0;} //没有到100则返回0
}
else //第一次按下则执行以下程序
{
keyflag = 1; //置标志位
return ((~code_h[i])+(~code_l));
}
}
}
}
}
else
{
keyflag = 0;keycounter = 0;return (0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -