decode.c
来自「Source code for driving RFM01 fm radio r」· C语言 代码 · 共 78 行
C
78 行
#include "../ps2kbd.h"
void PS2KBD_decode(unsigned char sc)
{
static unsigned char is_up=0, shift = 0, mode = 0;
unsigned char i;
if (!is_up) // Last data received was the up-key identifier
{
switch (sc)
{
case 0xF0 : // The up-key identifier
is_up = 1;
break;
case 0x12 : // Left SHIFT
shift = 1;
break;
case 0x59 : // Right SHIFT
shift = 1;
break;
case 0x05 : // F1
if(mode == 0)
mode = 1; // Enter scan code mode
if(mode == 2)
mode = 3; // Leave scan code mode
break;
default:
if(mode == 0 || mode == 3) // If ASCII mode
{
if(!shift) // If shift not pressed,
{ // do a table look-up
for(i = 0; pgm_read_byte(&PS2KBD_unshifted[i][0])!=sc && pgm_read_byte(&PS2KBD_unshifted[i][0]); i++);
if (pgm_read_byte(&PS2KBD_unshifted[i][0]) == sc) {
PS2KBD_put_buff(pgm_read_byte(&PS2KBD_unshifted[i][1]));
}
} else { // If shift pressed
for(i = 0; pgm_read_byte(&PS2KBD_shifted[i][0])!=sc && pgm_read_byte(&PS2KBD_shifted[i][0]); i++);
if (pgm_read_byte(&PS2KBD_shifted[i][0]) == sc) {
PS2KBD_put_buff(pgm_read_byte(&PS2KBD_shifted[i][1]));
}
}
} else{ // Scan code mode
PS2KBD_put_buff(' ');
PS2KBD_put_buff(' ');
}
break;
}
} else {
is_up = 0; // Two 0xF0 in a row not allowed
switch (sc)
{
case 0x12 : // Left SHIFT
shift = 0;
break;
case 0x59 : // Right SHIFT
shift = 0;
break;
case 0x05 : // F1
if(mode == 1)
mode = 2;
if(mode == 3)
mode = 0;
break;
case 0x06 : // F2
// clr();
break;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?