📄 key.c
字号:
/********************************************************************************
共有5个按键,可一个开关机键
键盘为 unit, M+, hold,change, T/Z,
键码分别为 0x08, 0x10, 0x04, 0x01,0x02
#define KEYUNIT 0x08
#define KEYMPLUS 0x10
#define KEYHOLD 0x04
#define KEYCHANGE 0x01
#define KEYT_Z 0x02
********************************************************************************/
#include <reg52.h>
extern unsigned char beep;
extern bit ga; ///键有效
extern bit ke; ///有键按下
extern bit keyp; //产生有效键的标志
extern bit kerr_b;
data unsigned char kdel;
data unsigned int kerr;
data unsigned char ls_k;
data unsigned char kbuf;
///键盘程序
void KeyPro(void)
{
if (ga==0)
{
if (ke==0)
{
ls_k=~P1;
ls_k=ls_k>>3;
ls_k=ls_k & 0x1f;
if (ls_k)
{
kbuf=ls_k;
ke=1; //有键按下
kdel=6; //32; //去抖时间,为60m秒
ga=0; //????????????
}
}
else
{
kdel--;
if (kdel==0) //去抖时间到
{
ls_k=~P1;
ls_k=ls_k>>3;
ls_k=ls_k & 0x1f;
if (ls_k==0)
{
ke=0;
}
else
{
ke=0;
if (ls_k==kbuf)
{
ga=1;
kdel=14; //56;
beep = 1;
// IO_buzz=0;
}
}
}
}
}
else
{
kdel--;
if (kdel==0)
{
ls_k=~P1;
ls_k=ls_k>>3;
ls_k=ls_k & 0x1f;
if (ls_k==0) //按键已经松开
{
ga=0;
ke=0;
// IO_buzz=1;
kerr=0;
kerr_b=0;
keyp=1; //产生了有效键码
// beep = 1;
}
else
{
keyp=0;
kdel=4; //16;
// IO_buzz=1;
// beep = 1;
if (kerr_b==0)
{
kerr++;
if (kerr>300) kerr_b=1;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -