📄 keyboard.c
字号:
#include <reg51.h>
#define CHECK_KEY_DOWN 0
#define CHECK_KEY_UP 1
#define KEY_UP 0
#define KEY_DOWN 1
sbit _p33 = P3^3;
sbit _p34 = P3^4;
sbit _p35 = P3^5;
sbit _p36 = P3^6;
char _key_status = CHECK_KEY_DOWN;
char _key_idx = 0;
char _key_led = 0;
void _delay_1ns() {
}
void _p34_plus() {
_p34 = 0;
_delay_1ns();
_p34 = 1;
_delay_1ns();
_p34 = 0;
}
void _p35_plus() {
_p35 = 0;
_delay_1ns();
_p35 = 1;
_delay_1ns();
_p35 = 0;
}
void serial_output(unsigned char out) {
char i = 0;
for (i = 7; i >= 0 ; i--) {
_p33 = (out >> i)& 0x01;
_p34_plus();
}
_p35_plus();
}
char _check_key(unsigned char _key_idx) {
serial_output(_key_led | (~(0x01<<_key_idx)) & 0x0f );
if (_p36 == 0) {
return KEY_DOWN;
} else {
return KEY_UP;
}
}
char get_key(void) {
char result = -1;
if (_key_status == CHECK_KEY_DOWN) {
if (_check_key(_key_idx) == KEY_DOWN) {
_key_status = CHECK_KEY_UP;
} else {
_key_status = CHECK_KEY_DOWN;
if (++_key_idx == 4) {
_key_idx = 0;
}
}
} else if (_key_status == CHECK_KEY_UP) {
if (_check_key(_key_idx) == KEY_UP) {
result = _key_idx;
_key_status = CHECK_KEY_DOWN;
if (++_key_idx == 4) {
_key_idx = 0;
}
} else {
_key_status = CHECK_KEY_UP;
}
}
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -