📄 key.c
字号:
#include <reg52.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include "define.h"
#include "function.h"
extern unsigned char key_dms10;
bit key_bit_press;
// mode enter mode_enter up next mode_down
// set esc mode_esc down back mode_up
// 0 1 2 3 4 5 6 7 8 9 10
// 0 0 1 2 3 4 5 6 7 8 9
//unsigned char code key_table[]={0x00,0xa8,0xb8,0xb0,0x0a,0x12,0x22,0x21,0xb2,0x09,0x11}; // for fzq
unsigned char code key_table[]={0x00,0x09,0x11,0x21,0x22,0x29,0x2b,0x24,0x0c,0x0a,0x14,0x0d,0x2d}; // for cpu
unsigned char code key_scan_table[]={0x3e,0x3d,0x3b};
unsigned char key_step,key_add_step;
unsigned char key_scan(void)
{
unsigned char i,j,k;
k=0;
i=3;
while(i){
i--;
P2=(P2&0xc0)|key_scan_table[i];
_nop_();
j=P2;
j=(~j)&0x3f;
if(j&KEY_CONST) k=k|j;
}
if(k){
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<9)&&(key_dms10>10)) {
key_bit_press=1;
}
if(j>8){
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);
}
void key_deal(void)
{
unsigned char i;
i=key_in();
if(!key_bit_press) return;
if(!i) return;
// dis_last_time=0;
if(GROUND_LED) GROUND_LED=0; // 开背景灯
switch(i){
case KEY_MODE:
mode_sub();
break;
case KEY_SET:
set_sub();//
break;
case KEY_ENTER:
enter_sub();
break;
case KEY_ESC:
esc_sub();
break;
case KEY_MODE_ENTER:
mode_enter_sub();
break;
case KEY_MODE_ESC:
mode_esc_sub();
break;
case KEY_UP:
up_sub();
break;
case KEY_DOWN:
down_sub();
break;
case KEY_NEXT:
next_sub();
break;
case KEY_BACK:
back_sub();
break;
case KEY_MODE_DOWN:
mode_down_sub();
break;
case KEY_MODE_UP:
mode_up_sub();
break;
default: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -