📄 key_in.c
字号:
#include <reg52.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#define KEY_MAX 17
#define KEY_CONST 0xf0
extern unsigned char key_dms10;
extern bit key_bit_press,prog_bit;
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// 0 0 1 2 3 4 5 6 7 8 9 en esc sel pog up down
unsigned char code key_table[]={0x00,0x21,0x18,0x14,0x12,0x28,0x24,0x22,0x48,0x44,0x42,0x82,0x81,0x41,0x11,0x88,0x84};
unsigned char code key_scan_table[]={0xfe,0xfd,0xfb,0xf7};
unsigned char key_step,key_add_step;
unsigned char key_scan(void)
{
unsigned char i,j,k;
j=0;
i=4;
k=0;
while(i){
i--;
P1=key_scan_table[i];
_nop_();
j=~P1;
if(j&KEY_CONST) k=k|j; // 有键按下
}
if((k&KEY_CONST)!=0){
for(j=0;j<KEY_MAX;j++) {
if(k==key_table[j]) return (j);
}
}
// 如果没有键按下则清除
key_dms10=0;
key_step=0;
key_bit_press=0;
key_add_step=0;
return 0;
}
//-----------------------------------------
//-----------------------------------------
unsigned char key_in(void)
{
unsigned char j;
j=key_scan();
if(!j) return 0; // have key_press
if(!key_bit_press) {
if((j<14)&&(key_dms10>10)) key_bit_press=1;
if(j==14){
if(prog_bit) {
if(key_dms10>10) key_bit_press=1;
}
else {
if(key_dms10>250) key_bit_press=1;
}
}
if(j>14){
switch(key_step){
case 0 :
if(key_dms10>10) {
key_bit_press=1;
key_add_step++;
key_step=1;
}
break;
case 1 :
if(key_dms10>120) {
key_bit_press=1;
key_add_step++;
key_step=2;
}
break;
case 2:
if(key_dms10>20) {
key_bit_press=1;
if(key_add_step<23) key_add_step++;
}
break;
default: break;
}
}
return(j);
}
else return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -