⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用51单片机仿真PC机键盘
💻 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 + -