📄 main.c
字号:
#include <reg51.h>
#define BYTE unsigned char
#define uint unsigned int
extern void ProcessPS2(void);
extern void PS2Init(void);
extern void OnPS2SendChar(BYTE dat);
sbit c1=P1^7;//列1
sbit c2=P1^6;//列2
sbit c3=P1^5;//列3
sbit c4=P1^4;//列4
sbit r1=P1^3;//行1
sbit r2=P1^2;//行2
sbit r3=P1^1;//行3
sbit r4=P1^0;//行4
sbit r5=P3^7;//行5
sbit BELL=P3^5;//喇叭
sbit CT_KB=P3^1;//pc大键盘通过一个模拟开关再连接到ps2接口,当小键盘往pc上发东西,则把pc大键盘断开模拟开关,发完后再闭合模拟开关
code BYTE tab[]=
{
//键码表
0x45,0xf0,0x45,//0
0x16,0xf0,0x16,//1
0x1e,0xf0,0x1e,//2
0x26,0xf0,0x26,//3
0x25,0xf0,0x25,//4
0x2e,0xf0,0x2e,//5
0x36,0xf0,0x36,//6
0x3d,0xf0,0x3d,//7
0x3e,0xf0,0x3e,//8
0x46,0xf0,0x46,//9
0x76,0xf0,0x76,//ESC
0x05,0xf0,0x05,//F1
0x06,0xf0,0x06,//F2
0x04,0xf0,0x04,//F3
0x0c,0xf0,0x0c,//F4
0x03,0xf0,0x03,//F5
0x66,0xf0,0x66,//BS
0x5a,0xf0,0x5a,//ENTER
0x49,0xf0,0x49//.
};
void delay(BYTE k)
{
BYTE j,i;
for(i=0;i<k;i++)
for(j=0;j<125;j++);
}
uint key_scan(void)//键盘扫描程序
{
P1=0x0f;
r5=1;
delay(1);
while(1)
{
c1=0;
c2=c3=c4=1;
delay(1);
if(r1==0){delay(80);if(r1==0)return 10;}
if(r2==0){delay(80);if(r2==0)return 1;}
if(r3==0){delay(80);if(r3==0)return 4;}
if(r4==0){delay(80);if(r4==0)return 7;}
if(r5==0){delay(80);if(r5==0)return 16;}
c2=0;
c1=c3=c4=1;
delay(1);
if(r1==0){delay(80);if(r1==0)return 11;}
if(r2==0){delay(80);if(r2==0)return 2;}
if(r3==0){delay(80);if(r3==0)return 5;}
if(r4==0){delay(80);if(r4==0)return 8;}
if(r5==0){delay(80);if(r5==0)return 0;}
c3=0;
c1=c2=c4=1;
delay(1);
if(r1==0){delay(80);if(r1==0)return 12;}
if(r2==0){delay(80);if(r2==0)return 3;}
if(r3==0){delay(80);if(r3==0)return 6;}
if(r4==0){delay(80);if(r4==0)return 9;}
if(r5==0){delay(80);if(r5==0)return 17;}
c4=0;
c1=c2=c3=1;
delay(1);
if(r1==0){delay(80);if(r1==0)return 13;}
if(r2==0){delay(80);if(r2==0)return 14;}
if(r3==0){delay(80);if(r3==0)return 15;}
if(r5==0){delay(80);if(r5==0)return 18;}
}
}
void speaker(void)
{
BYTE i;
for(i=0;i<100;i++)
{
BELL=0;
delay(1);
BELL=1;
delay(1);
}
}
void main(void)
{
uint j;
CT_KB=0;
PS2Init();
BELL=1;
while(1)
{
ProcessPS2();//开机应答,使电脑能识别到键盘
j=key_scan();
CT_KB=1;
j*=3;
speaker();
OnPS2SendChar(tab[j]);
OnPS2SendChar(tab[j+1]);
OnPS2SendChar(tab[j+2]);
CT_KB=0;
delay(200);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -