📄 key.c
字号:
//按键扫描驱动程序
unsigned char key,key_h,kpush;
unsigned int key_l;
//按键连接到p1.0、p1.1、p1.2
void int_t0(void) interrupt 1 {
unsigned char dd,i;
TL0=TL0+30;TH0=0xfb; //800
/* 按键判别 */
if ((P1&0x7)==0x7) {
if ((key_l>30)&&(key_l<800)&&(key_h>30)) { //释放按键,如果之前按键时间少于1秒,读入键值
key=kpush;
}
if ((++key_h)>200) key_h=200;
key_l=0;
if (key>=0x80) key=0; //如果之前的按键为长按1秒,清除键值
} else {
kpush=P1&0x7;
key_l++;
if ((key_l>800)&&(key_h>30)) { //如果按键超过1秒,键值加0x80标志长按键
key=kpush|0x80;
key_h=0;
key_l=0;
}
}
}
void main(void) {
TMOD=0x1;TR0=1;ET0=1;EA=1;
while (1) {
while (!key) {}
switch (key) {
case 1:break;
case 2:break;
}
}
}
//*************************************************
uchar kbscan(void) //键盘扫描子程序
{ uchar sccode,recode;
P2=0x0f;
if ((P2&0x0f)!=0x0f) //有键按下
{sccode=0x7f; //扫开始
while ((sccode&0x08)!=0) //xun huan sao miao
{P2=sccode;
if ((P2&0x0f)!=0x0f) //ben hang you jian an xia
{recode=(P2&0x0f)|0xf0;
return ((~sccode)+(~recode)); //fan hui jian ma
}
else
sccode=(sccode>>1)|0x80; //zuo yi yi wei
}
}
else return (0);
}
//*************************************************
//*************************************************
uchar kbscan(void) //键盘扫描子程序
{ uchar sccode,recode,p1,p;
P1=0xe0;P2_7=1;P2_6=1;
p1=P2&0xc0; p=p1*0xff+P1;
if ((p&0x03e0)!=0x03e0) //有键按下
{sccode=0x03fe; //扫开始
while ((sccode&0x0020)!=0) //xun huan sao miao
{p=sccode;
if ((p&0x03e0)!=0x03e0) //ben hang you jian an xia
{recode=(p&0x03e0)|0x001f;
return ((~sccode)+(~recode)); //fan hui jian ma
}
else
sccode=(sccode<<1)|0x0001; //zuo yi yi wei
}
}
else return (0);
}
//*************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -