📄 mcu_keyscan.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define unit unsigned int
void delay(void);
uchar keyscan();
unit j,h;
void main()
{
uchar *p,*c, key;
*p=0x40;*c=0x40;
*(p+1)=0xff;
*(p+2)=0xff;
*(p+3)=0xff;
while (1)
{ key=keyscan();
delay();
switch(key)
{
case 0xee:*p=0xc0; break;
case 0xde:*p=0xf9; break;
case 0xbe:*p=0xa4; break;
case 0x7e:*p=0xb0; break;
case 0xed:*p=0x99; break;
case 0xdd:*p=0x92; break;
case 0xbd:*p=0x82; break;
case 0x7d:*p=0xf8; break;
case 0xeb:*p=0x80; break;
case 0xdb:*p=0x90; break;
case 0xbb:*p=0x88; break;
case 0x7b:*p=0x83; break;
case 0xe7:*p=0xc6; break;
case 0xd7:*p=0xa1; break;
case 0xb7:*p=0x86; break;
case 0x77:*p=0x8e; break;
case 0x00:*p=0xc1; break;
}
P0=*p;
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void delay()
{
unit i;
for(i=0;i<20000;i++){}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uchar keyscan()
{
P2=0xff;
while(1)
{ P2=0xfe;
if ((P2&0xff)!=0xfe)
{
delay();
if((P2&0xff)!=0xfe)
return P2;
else P2=0xfd;
}
else P2=0xfd;
if ((P2&0xff)!=0xfd)
{
delay();
if ((P2&0xff)!=0xfd)
return P2;
else P2=0xfb;
}
else P2=0xfb;
if ((P2&0xff)!=0xfb)
{
delay();
if ((P2&0xff)!=0xfb)
return P2;
else P2=0xf7;
}
else P2=0xf7;
if ((P2&0xff)!=0xf7)
{
delay();
if ((P2&0xff)!=0xf7)
return P2;
else return P2=0xfe;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -