📄 key.c
字号:
//按键扫描驱动程序
unsigned char key,key2,kpush;
unsigned char key_h;//长按标志位
unsigned int key_l;
unsigned char key_d;
//按键连接到p1.0、p1.1、p1.2
void int_t0(void) interrupt 1 {
//unsigned char key_d;
unsigned char dd,i;
TL0=TL0+30;TH0=0xfb; //800
/* 按键判别 */
if ((P1&0x7)==0x7) {
key_h++;
key_d++;
if ((key_l>30)&&(key_l<800)&&(key_h>30)) //释放按键,如果之前按键时间少于1秒,读入键值
{key=kpush;}
if(key2)
{key = key2;}
if ((key_h)>200) key_h=200;
key_l=0;
if (key>=0x80) key=0;
if ((key_d)>200) key_d=200; //如果之前的按键为长按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;
}
if ((key_d)<150) &&(key_l<800)&&(key_l>30)&&(key_h>30))
{key2=kpush|0xF0;}
else {key2 = 0; }
key_d = 0;
}
}
void main(void) {
TMOD=0x1;TR0=1;ET0=1;EA=1;
while (1) {
while (!key) {}
switch (key) {
case 1:break;
case 2:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -