📄 keyb.c
字号:
#define key_port P4 //与键盘连接的端口; P2.0~P2.3---->row 行
// P2.4~P2.7---->colum 列
unsigned char test_kb(void); //检测键盘是否有键按下;
unsigned char get_key_value(void); //取得键值;
void delayus(unsigned char);
void delayms(unsigned char); //延时()毫秒;
/*void PORT_Init(void);
void main (void) {
unsigned char i=0,f=0;
unsigned char a[16];
// disable watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;
PORT_Init();
LED=1;
for(i=0;i<16;)
{
if(test_kb()==1)
{a[i]=get_key_value();
i++;
}
}
while (1) { // spin forever
}
}*/
unsigned char test_kb(void) //检测键盘是否有键按下;
{
unsigned char temp,b;
key_port=0x0f;
delayus(1);
if(key_port!=0x0f)
{
temp=key_port;
delayms(20); //延时20ms后再次检测,以消除抖动;
key_port=0x0f;
if(key_port==temp)
b=1;
else b=0;
}
else b=0;
return b;
}
unsigned char get_key_value(void) //行反转法----取得键值;
{
unsigned char temp,row,colum,key_value;
unsigned char i[]={0,0,1,1,2,2,2,2,3}; //0001->0 0010->1 0100->2 1000->3;
key_port=0xf;
delayus(1);
temp=key_port;
temp=~temp;
temp=temp&0xf;
row=i[temp]; //取得行号;
key_port=0xf0;
delayus(1);
temp=~key_port;
temp=temp>>4;
colum=i[temp]; //取得列号;
key_value=row*4+colum; //计算键值;
while(test_kb()) //等待,直到按键松开;
delayms(10);
return key_value;
}
void delayus(unsigned char us)
{
while (us)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
--us;
}
}
void delayms(unsigned char ms)
{
do
{
delayus(250);
delayus(250);
delayus(250);
delayus(250); // 延时1ms;
ms--;
}
while(ms!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -