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

📄 kbv10work.c

📁 用单片机的i/o口模拟ps/2键盘的通信协议
💻 C
📖 第 1 页 / 共 5 页
字号:
					 {
						 READER_CLK=1;
						 Delay_10us();
						 READER_CLK=0;
						 temp_trk=~READER_DATA;                  //fanxiang collect trk11's data;
						 if(temp_trk==0x01)
						 {
						  SS_num=ddd;
						  break ;  //break for
						 }
				        }  // end for(ddd=0;ddd<553;ddd++)

					 mag_trk1[0]=temp_trk;
					 for(i=1;i<7;i++)
					   {
						 READER_CLK=1;
						 Delay_25us();
						 READER_CLK=0;
						 temp_trk=~READER_DATA;
						 mag_trk1[0]+=temp_trk<<i;  //b6--->b0;
					   }
					 READER_CLK=1;

					if(mag_trk1[0]==0x45 )             //0x45
					  {
					         mag_trk1[1]=0;
						for(j=1;j<79;j++)
						 {
							 for(i=0;i<7;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk1[j]+=temp_trk<<i;          //b6-->b0;     fanxiang==zhengxiang save trk1 data
							 }
							 if(mag_trk1[j]==0x1f)             //0x1f
							              {ES_num=j;break;} //break for();
		                               } //end for(j=1;j<79;j++)
		                    if(((553-SS_num)%7)==0)         //LRC don't lose bit 0
                             	{
                                    for(i=0;i<7;i++)
					                 {
										 READER_CLK=1;
										 Delay_25us();
										 READER_CLK=0;
										 temp_trk=~READER_DATA;
										 mag_trk1[ES_num+1]+=temp_trk<<i;      //LRC        //faxiang  trk11's data is over
					                 }
                             	}
		                     else
		                        {
									 for(i=0;i<(553-SS_num)%7;i++)
									    {
											 READER_CLK=1;
											 Delay_25us();
											 READER_CLK=0;
											 temp_trk=~READER_DATA;
											 mag_trk1[ES_num+1]+=temp_trk<<i;      //LRC        //faxiang  trk11's data is over
									    }
		                          }
						  READER_CLK=1;
						   trk_xor=(mag_trk1[0]&0x3f);

				                 for(i=1;i<(ES_num+1);i++)
				                 	{
				                 	      trk_xor^=(mag_trk1[i]&0x3f);
				                 	}
						   if(trk_xor!=(mag_trk1[ES_num+1]&0x3f))
						   	  {
						  	         error=1;
						     }
						  }

							 ////////////the trk11 is over and begin the next trk1 ///////
						for(ddd=0;ddd<608;ddd++)
						 {
							 READER_CLK=1;                // new trk1 is over
							 READER_CLK=0;
						 }
			        	READER_CLK=1;

			    }
		    else //Dir is zhengxiang
			  {
			    	for(ddd=0;ddd<608;ddd++)
						 {
							 READER_CLK=1;                //  trk11 is over
							 READER_CLK=0;
						 }
			        	READER_CLK=1;
				//////////the trk11 is over and begin the  next trk1 
                    for(j=0;j<79;j++)
						{
							 for(i=0;i<7;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk1[j]+=temp_trk<<(i);    //if zhengxiang ,collect  new trk1 's data
							 }
							 if(!mag_trk1[j])
							 	{
							 	    ES_num=j;  //don't break, or the clk !=79*7

							 	}
						}

						READER_CLK=1;
						trk_xor=(mag_trk1[0]&0x3f);

				              for(i=1;i<(ES_num-1);i++)
				                 	{
				                 	      trk_xor^=(mag_trk1[i]&0x3f);
				                 	}
						   if(trk_xor!=(mag_trk1[ES_num-1]&0x3f))
						   	{
									  	 error=1;
						   	}

						for(j=0;j<55;j++)
							{
							     READER_CLK=1;
								 READER_CLK=0;              /// new  trk1 is over
							}
						 READER_CLK=1;			    
			    
			  }
	   }
	  else   //trk1 is blank
	   {
	    	for(ddd=0;ddd<608;ddd++)
				 {
					 READER_CLK=1;                // trk11 is over
					 READER_CLK=0;
				 }
			 	READER_CLK=1;
	
	        for(ddd=0;ddd<608;ddd++)
				 {
					 READER_CLK=1;                // new trk1 is over
					 READER_CLK=0;
				 }
			 	READER_CLK=1;  
	   }
		/////////////////////////////new trk2 begin/////////////////////////


		    if(Dir_trk2)
			 {
				  for(j=0;j<40;j++)
				  {
					  for(i=0;i<5;i++)
					  {
						  READER_CLK=1;
						  Delay_25us();
						  READER_CLK=0;
						  temp_trk=~READER_DATA;                 //zhengxiang collect trk2's data
						  mag_trk2[j]+=temp_trk<<i;             //b4--->b0 ////  zhengxiang  save the trk2 data  ==b4--->b0;
					  }
					  if(!mag_trk2[j])
					  	{
					  	     ES_num=j;

					  	}
				  }
		              trk_xor=(mag_trk2[0]&0x0f);
		                 for(i=1;i<(ES_num-1);i++)
		                 	{
		                 	      trk_xor^=(mag_trk2[i]&0x0f);
		                 	}

				  if(trk_xor!=(mag_trk2[ES_num-1]&0x0f))
				  	{
				  	       error=1;
				  	}

				  READER_CLK=1;
				  for(ddd=0;ddd<408;ddd++)
				  {
					  READER_CLK=1;
					  READER_CLK=0;
				  }
				  READER_CLK=1;               //zhengxiang trk2 is over

		        } //end if(Dir_trk2==1)
		      else   //(Dir_trk2==0)
		         {

				 for(ddd=0;ddd<608;ddd++)
				 {
					  READER_CLK=1;
					  READER_CLK=0;             //fanxiang trk2 is over
				 }
				 READER_CLK=1;
		         }  //end else (Dir_trk2==0)


		/////////////////////////////new trk3 begin/////////////////////////


		        if(Dir_trk3)
				{

					 for(j=0;j<107;j++)
					 {
						 for(i=0;i<5;i++)
						  {
						  READER_CLK=1;
						  Delay_25us();
						  READER_CLK=0;
						  temp_trk=~READER_DATA;                 //zhengxiang collect trk3's data
						  mag_trk3[j]+=temp_trk<<i;               //b4--->b0 //*************//  zhengxiang save the trk3 data  ==b4--->b0;
						  }
						 if(!mag_trk3[j])
						 	{
						 	   ES_num=j;   //dont break now

						 	}
					 }
					 READER_CLK=1;

					  trk_xor=(mag_trk3[0]&0x0f);

			                 for(i=1;i<(ES_num-1);i++)
			                 	{
			                 	      trk_xor^=(mag_trk3[i]&0x0f);

			                 	}

					  if(trk_xor!=(mag_trk3[ES_num-1]&0x0f))
					  	{
								     error=1;
					  	}

					 for(i=0;i<73;i++)
					 {
						 READER_CLK=1;
						 READER_CLK=0;                        // zhengxiang trk3 is over
					 }
					 READER_CLK=1;
		                    } //end if(Dir_trk3==1)
				    else  //Dir_trk3==0
					{
						for(ddd=0;ddd<608;ddd++)
						 {
							  READER_CLK=1;
							  READER_CLK=0;             //fanxiang trk3  is over
						 }
						 READER_CLK=1;
				       } // end else (Dir_trk3==0)




		///////////////////TRK1 TRK2 TRK3 TRK33 TRK22 TRK11 TRK1 is over/////////////////////
		///////////////////Send TRK1 TRK2 TRK3 ////////////////////////
		for(ddd=0;ddd<608*17;ddd++)
		{
		 READER_CLK=1;
		 READER_CLK=0;
		}
		READER_CLK=1;
		if((!error)|| (error&&CheckCard_Flag))  //  error=0,send all,  error=1&&check , send error msg
		   {
                ddd=0;
                while(XBYTE[0x7000+13+ddd]!=0xff)
                   {
                        SendMakeToHostCount(XBYTE[0x7000+13+ddd]);
                        ddd++;
                   }			  	
		        switch(XBYTE[CONFIG_BASE+0X01])
		          {
		            case 0x00:     SendTrkFlag=0;break;
		            case 0x01:     SendTrkFlag=1;break;
		            case 0x02:     SendTrkFlag=2;break;
		            case 0x03:     SendTrkFlag=3;break;
		            case 0x04:     SendTrkFlag=4;break;
		            case 0x05:     SendTrkFlag=5;break;
                    case 0xff:     SendTrkFlag=0;break;  //default is 0
		            default: break;
		         }
		    
                    for(ii=0;ii<3;ii++)
                     {
                           if((((SendTrkFlag==0)||(SendTrkFlag==1))&&(ii==0))||(((SendTrkFlag==2)||(SendTrkFlag==4))&&(ii==1))||(((SendTrkFlag==3)||(SendTrkFlag==5))&&(ii==2)))
                               {
		                           if(trk1_send)
						    {
							if(XBYTE[CONFIG_BASE+0x04])
							     	{
									        if(mag_trk1[0]==0x45)       //0x45   
										        {
												 if(XBYTE[CONFIG_BASE+0x04]&0x0c)   //ss enable
													{
													      if ((XBYTE[CONFIG_BASE+0x05]==0x25)||(XBYTE[CONFIG_BASE+0x05]==0xff))   //   send  %
													            {
			           											      SendMakeToHostCount(0x12);
			           											      Delay_ms(TRK1DELAY_MS);
																SendMakeToHostCount(0x2e);    //  scancode 5
																Delay_ms(TRK1DELAY_MS);
																SendMakeToHostCount(0xf0);
																Delay_ms(3);
																SendMakeToHostCount(0x2e);
																Delay_ms(TRK1DELAY_MS);
																SendMakeToHostCount(0xf0);
																Delay_ms(3);
																SendMakeToHostCount(0X12);
																Delay_ms(TRK1DELAY_MS);	   											    
													             }
													         else  if(XBYTE[CONFIG_BASE+0x05]==0x00) 
													            {
													            }
													         else
													            {
													                 for(i=0;i<48;i++)
													                  {
													                      if(XBYTE[CONFIG_BASE+0X05]==tableChar[i])
													                           {
													                                   SendMakeToHostCount(0x12);
													                                   Delay_ms(TRK1DELAY_MS);
													                                   SendMakeToHostCount(tableScan[i]);
													                                   Delay_ms(TRK1DELAY_MS);
													                                    SendMakeToHostCount(0xf0);
													                                    Delay_ms(2);
													                                    SendMakeToHostCount(tableScan[i]);
													                                    Delay_ms(TRK1DELAY_MS);
													                                    SendMakeToHostCount(0xf0);
													                                    Delay_ms(2);
													                                    SendMakeToHostCount(0x12);
													                                    break ;  //break for
													                           }
													                       else if (XBYTE[CONFIG_BASE+0X05]==tableChar1[i])
													                          {
													                                   SendMakeToHostCount(tableScan[i]);
													                                   Delay_ms(TRK1DELAY_MS);
													                                   SendMakeToHostCount(0xf0);
													                                   Delay_ms(2);
													                                   SendMakeToHostCount(tableScan[i]);
													                                   break ; //break for
													                          }
													                  }
													            }
													    }

													
												      for(j=1;j<79;j++)
											               {

												   		          trk_bit=(mag_trk1[j]&0X3F)+0x20;   //ascii 											 
																    if(trk_bit==0x3f)  //ES
																       {
                                                                            if((XBYTE[CONFIG_BASE+0x04]&0x0c))      // send tail format-code
																             {
																		        if ((XBYTE[CONFIG_BASE+0x06]==0x3f)||(XBYTE[CONFIG_BASE+0x06]==0xff))    //   ascii   ?  
																		            {
								           											    SendMakeToHostCount(0x12);
								           											    Delay_ms(TRK1DELAY_MS);
																						SendMakeToHostCount(0x4a);    //  scancode ?
																						Delay_ms(TRK1DELAY_MS);
																						SendMakeToHostCount(0xf0);
																						Delay_ms(3);
																						SendMakeToHostCount(0x4a);
																						Delay_ms(TRK1DELAY_MS);
																						SendMakeToHostCount(0xf0);
																						Delay_ms(3);
																						SendMakeToHostCount(0X12);
																						Delay_ms(TRK1DELAY_MS);	   											    
																		             }
																		         else  if(XBYTE[CONFIG_BASE+0x06]==0x00) 
																		            {
																		            }
																		         else
																		            {
																		                 for(i=0;i<48;i++)
																		                  {
																		                      if(XBYTE[CONFIG_BASE+0X06]==tableChar[i])
																		                           {
																		                                   SendMakeToHostCount(0x12);
																		                                   Delay_ms(TRK1DELAY_MS);
																		                                   SendMakeToHostCount(tableScan[i]);
																		                                   Delay_ms(TRK1DELAY_MS);
																		                                    SendMakeToHostCount(0xf0);
																		                                    Delay_ms(2);
																		                                    SendMakeToHostCount(tableScan[i]);
																		                                    Delay_ms(TRK1DELAY_MS);
																		                                    SendMakeToHostCount(0xf0);
																		                                    Delay_ms(2);
																		                                    SendMakeToHostCount(0x12);
																		                                    break ;  //break for i
																		                           }
																		                       else if (XBYTE[CONFIG_BASE+0X06]==tableChar1[i])
																		                          {
																		                                   SendMakeToHostCount(tableScan[i]);
																		                                   Delay_ms(TRK1DELAY_MS);
																		                                   SendMakeToHostCount(0xf0);
																		                                   Delay_ms(2);
																		                                   SendMakeToHostCount(tableScan[i]);
																		                                   break ; //break i
																		                          }
																		                  }
																		            }
																              }  //endif
																              if(!error)
																                      break;            // don't send format_code and break for j ()
																	   }
																	else      //trk_bit!=0x3f

⌨️ 快捷键说明

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