📄 key4x4-delay.c
字号:
/*
键盘连接方式:
P10 P11 P12 P13 P14 P15 P16 P17
L1 L2 L3 L4 C1 C2 C3 C4
*/
#include <reg51all.h>
#include <stdio.h>
#define OSC 22118400
void Delay1ms(int ms)
{
int i;
while(ms--)
for(i=0;i<140;i++);
}
main(void)
{
unsigned char Mask,ScanCode,Line,Col,i;
TMOD = 0x20;
PCON |= 0x80;
SCON = 0x50;
TH1 = 256 - (OSC/12/16/9600);
TL1 = 256 - (OSC/12/16/9600);
TR1 = 1;
TI = 1;
printf("\r\nKey pad 4X4 test running...");
while(1)
{
P1 = 0xff; // P1全部置高,准备扫描
Line = 1;
Mask = 0x01;
for(i=0;i<4;i++)
{
Col = 0;
P1 = ~Mask; // 送1位0
ScanCode = P1&0xf0; // 取P1高4位输入
if(ScanCode != 0xf0) // 有按键
{
P36 = 0; // 蜂鸣器响
Delay1ms(20); // 按键去抖
P36 = 1;
}
ScanCode = P1&0xf0;
switch(ScanCode)
{
case 0xe0:
Col = 1;
break;
case 0xd0:
Col = 2;
break;
case 0xb0:
Col = 3;
break;
case 0x70:
Col = 4;
break;
default:
Col = 0;
break;
}
if(Col > 0)
{
printf("\r\nKey pressed: L=%bd,C=%bd",Line,Col);
while(1) // 按键释放后再返回
{
ScanCode = P1&0xf0;
if(ScanCode == 0xf0) break;
}
}
Mask <<= 1;
Line ++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -