📄 keyb.c
字号:
#include "KEYB.h"
uint8_t KB_GetChar(uint8_t Sync,uint8_t WaitRelease)
{
uint8_t kbin,i;
START:
kbin = 0;
i = 0;
KEYB_ROW_DDR |= (0x0f << KEYB_ROW_SHIFT); //Row Output Low
KEYB_ROW_PORT &= ~(0x0f << KEYB_ROW_SHIFT);
KEYB_COL_DDR &= ~(0x0f << KEYB_COL_SHIFT); //Col Input Pull-Up
KEYB_COL_PORT |= (0x0f << KEYB_COL_SHIFT);
DELAY_8M_us;
DELAY_8M_us;
DELAY_8M_us;
DELAY_8M_us;
do
{
kbin = ~((KEYB_COL_PIN>>KEYB_COL_SHIFT)|0xf0);
}while(Sync && (!kbin));
if(!kbin)
return 0;
Timer_Wait_ms(20);
i = ~((KEYB_COL_PIN>>KEYB_COL_SHIFT)|0xf0);
if(kbin != i)
goto START;
KEYB_ROW_DDR &= ~(0x0f << KEYB_ROW_SHIFT); //Row Input Pull-Up
KEYB_ROW_PORT |= (0x0f << KEYB_ROW_SHIFT);
KEYB_COL_DDR |= (0x0f << KEYB_COL_SHIFT); //Col Output Low
KEYB_COL_PORT &= ~(0x0f << KEYB_COL_SHIFT);
DELAY_8M_us;
kbin |= ~(((KEYB_ROW_PIN<<(4-KEYB_ROW_SHIFT))|0x0f));
WAITRELEASE:
if(WaitRelease)
{
while((~((KEYB_ROW_PIN>>KEYB_ROW_SHIFT)&0x0f))&0x0f);
}
Timer_Wait_ms(20);
if((~((KEYB_ROW_PIN>>KEYB_ROW_SHIFT)&0x0f))&0x0f)
goto WAITRELEASE;
switch(kbin)
{
case 0x11:i = 'F';break;
case 0x12:i = 'E';break;
case 0x14:i = 'D';break;
case 0x18:i = 'C';break;
case 0x21:i = 'B';break;
case 0x22:i = 'A';break;
case 0x24:i = '0';break;
case 0x28:i = '9';break;
case 0x41:i = '8';break;
case 0x42:i = '7';break;
case 0x44:i = '6';break;
case 0x48:i = '5';break;
case 0x81:i = '4';break;
case 0x82:i = '3';break;
case 0x84:i = '2';break;
case 0x88:i = '1';break;
default:
goto START;
}
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -