📄 key.h
字号:
/************************************************************************************/
/* 程序名: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 KeyData P3
#define yes1 0x11 //1
#define add1 0x12 //2
#define sub1 0x21 //3
#define no1 0x22 //4
#define mul 0x41 //5
#define six 0x42 //6
#define five 0x81 //7
#define four 0x82 //8
#define dot 0x14 //9
#define three 0x18 //10
#define two 0x24 //11
#define one 0x28 //12
#define no 0x44 //13
#define add 0x48 //14
#define sub 0x84 //15
#define yes 0x88 //16
#define L 10
bit keyflag = 0;
#ifndef _KEYSCAN_
void delay(unsigned char a)
{
unsigned char j;
while(a-- != 0)
{
for (j = 0; j < 125; j++);
}
}
#endif
unsigned char kbscan();
void delay10ms();
uchar keyscan(void);
//*********************************
void delay(void)
{
uchar i;
for(i = 200;i>0;i--){;}
}
/**********************************
unsigned char keyscan(void)
{
unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};//发送的行扫描代码
P3 = 0xF0;
if((P3 & 0xF0)!= 0xF0)
{
delay();
if((P3 & 0xf0)!= 0xF0)
{
for(i = 0; i<4; i++)
{
P3 = code_h[i];
if((P3 & 0xF0) != 0XF0)
{
code_l = (P3 & 0xF0) | 0x0F;
return ((~code_h[i])+(~code_l));
}
}
}
}
return (0);
}
*********此函数具有长按加速功能******************/
unsigned char keyscan(void)
{
unsigned char i,code_l,code_h[4] = {0xfe,0xfd,0xfb,0xf7};
static unsigned char keycounter = 0;
KeyData = 0xF0;
if((KeyData & 0xF0)!= 0xF0)
{
_delay(20);
if((KeyData & 0xf0)!= 0xF0)
{
for(i = 0; i<4; i++)
{
KeyData = code_h[i];
if((KeyData & 0xF0) != 0XF0)
{
code_l = (KeyData & 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);
}
}
void main(void)
{
while(1)
{
unsigned char key;
P3 = 0x0f;
key = keyscan();
delay();
switch(key)
{
case 0x11: P1 = ~0x11; break;
case 0x21: P1 = ~0x21; break;
case 0x41: P1 = ~0x41; break;
case 0x81: P1 = ~0x81; break;
case 0x12: P1 = ~0x12; break;
case 0x22: P1 = ~0x22; break;
case 0x42: P1 = ~0x42; break;
case 0x82: P1 = ~0x82; break;
case 0x14: P1 = ~0x14; break;
case 0x24: P1 = ~0x24; break;
case 0x44: P1 = ~0x44; break;
case 0x84: P1 = ~0x84; break;
case 0x18: P1 = ~0x18; break;
case 0x28: P1 = ~0x28; break;
case 0x48: P1 = ~0x48; break;
case 0x88: P1 = ~0x88; break;
default: break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -