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

📄 ps2.c

📁 监控PS2的按键信息
💻 C
字号:

//用于PS2键盘。第二套码值。
///////////////////////////////////////////////////////////////////////////////////


sbit scl=P1^7;
sbit sda=P1^6;

#define WAITFORKEYBOARDPULSE  while(scl); while(!scl);
/*********************************************************/
//函数:ReadPS2()
//功能:扫描键盘
//输入:
//输出:键值
//描述:
/*********************************************************/\
void  ReadPS2()
{
 //unsigned char KeyCode;  //键盘键值
 unsigned char bitCount; //位数
// uchar bitnumber;
// while(scl);   // 等待键盘把时钟第一次拉低

   for(bitCount = 8; bitCount != 0; bitCount --)   // 把起始位算入
   {
    WAITFORKEYBOARDPULSE;     // 等待一个有效的下跳沿
    
    KeyCode  >>= 1;      // 按照PS2格式,数据低位在前
   // scl  = 1;
   // sda  = 1;
    if(scl==0)return;
    if(sda == 0)
     {
        KeyCode |= 0x80; // 得到有效的数据位
   //     bitnumber++;
     }
   }
   WAITFORKEYBOARDPULSE;     // 等待按键发送效验位
  // if(sda==0&&(bitnumber%2)==0);
  // 	else KeyCode=0x00;
   WAITFORKEYBOARDPULSE;     // 等待按键发送终止位
   while(scl);         // 等待键盘把时钟线拉高
   
   // return(KeyCode);         // 返回按键扫描
}


void timer2_interrupt(void) interrupt 5// using 2
 {
 //	uchar i;
	TR2=0;
  if(sclsign==0)
  	{	
	
			
						if(sda==1&&scl==1)
						{
						
								ReadPS2();
								if(KeyCode==key_da[0])//01为 F9读值比较是否为01..
								{
									sclsign=1;
									key_data=0xef;
								}
								else
								{
								  sclsign=1; key_biaoji1=1;
								  if(KeyCode==key_da[1])key_data=0xbf;//  //F10
								  else
								  {
									  if(KeyCode==key_da[2])key_data=0xf7;//	//F11
									  else
									  {
									  	if(KeyCode==key_da[3])key_data=0xfd;//	//F8
									  }
								  }
								}
			
					  }//////		


    }
	else
	{
	  if(key_biaoji1==1)scltime++;
	  if(scltime>=200){scltime=0;sclsign=0;key_biaoji1=0;}
	}
	TF2  =  0;TR2=1;
}

//定时器2的初始化22.1184M
void init_timer2(void)
{
	T2CON  = 0x00;
	IP=0x20;
	//RCAP2H = 0xb7; 		        // Reload value..10ms
	//RCAP2L = 0xfe;
    RCAP2H=0Xff;RCAP2L=0Xf7;        //....0.01ms=0.01*1000=10us
	TH2    = 0xff;				// Initial load value
	TL2    = 0xf7;
	TR2    = 1;					// Timer 2 run
	ET2    = 1;                 // Timer2 interrupt
}


/*
接线说明
PS2 公	PS2母	说明
    1	  1	   P1_6
    3  	3	   电源地
		4	  4	   电源正5V
		5	  5	   P1_7
		
电路说明

————————PS2的1线 到-10K 电阻--到三极管的9014的B极
                                  三极管的C极-电阻4.7K到电源正
                                  三极管的E极接到P1_6或P1_7

///*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -