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

📄 kbv10work.c

📁 用单片机的i/o口模拟ps/2键盘的通信协议
💻 C
📖 第 1 页 / 共 5 页
字号:
								}
		             	  	 else           //mag_trk1==tailer
		             	  		{
				             	  	     for(j=2;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<<(6-i);
										}
				                                 }
								 for(i=0;i<55;i++)
								 {
									 READER_CLK=1;
									 READER_CLK=0;
								 }
								 READER_CLK=1;

								  for(j=78;j>1;j--)
								    {
									   if(mag_trk1[j]!=0)
									   {
									        if(mag_trk1[j]&0x01==0)
									                 Dir_trk1=1;
									        else
									                 {error=1;}

									         break;
									   }
				                                }
		             	  		}

		             	}
		           
		     }//trk1 is not blank
		 for(i=0;i<79;i++)
		    {
			mag_trk1[i]=0;              //clear trk1
		    }

		///////// //////////////////begin trk2 ///////////////////////////
		
		for(j=0;j<2;j++)
		{
				for(i=0;i<5;i++)
				{
					READER_CLK=1;
					Delay_25us();
					READER_CLK=0;
					temp_trk=~READER_DATA;
					mag_trk2[j]+=temp_trk<<(4-i);        //b0-->b4
				}
		}
		READER_CLK=1;

		if(!mag_trk2[0]) //trk2 is blank
		{
			 for(ddd=0;ddd<598;ddd++)
			 {
				 READER_CLK=1;
				 READER_CLK=0;       // trk2 is over
			 }
			 READER_CLK=1;
		}
		else
		{
			trk2_send=1;
			if(mag_trk2[0]!=0x1a)  //  0x1a ==11010b   must be fanxiang
				   {
			               Dir_trk2=0;
					 for(ddd=0;ddd<598;ddd++)
					 {
						 READER_CLK=1;
						 READER_CLK=0;       // trk2 is over
					 }
					 READER_CLK=1;
				    }
			else
			{			        
				 if(mag_trk2[1]==0x1f)            // ox1f ==11111b  ,

				            Dir_trk2=0;
				 else
				            Dir_trk2=1;
				 for(ddd=0;ddd<598;ddd++)
					 {
						 READER_CLK=1;
						 READER_CLK=0;       // trk2 is over
					 }							
				READER_CLK=1;			      			  
			        	
			}             //end else(mag_trk2[0]==0x1A)      //Dir_trk2 is over
		}
			for(i=0;i<40;i++)
				{
				   mag_trk2[i]=0;
				}
		///////////////////////trk3 begin/////////////////////////////
	
			for(j=0;j<2;j++)
			{
				for(i=0;i<5;i++)
				{
					READER_CLK=1;
					Delay_25us();
					READER_CLK=0;
					temp_trk=~READER_DATA;
					mag_trk3[j]+=temp_trk<<(4-i);   //b0--->b4;
				}
			}
			READER_CLK=1;

			if(!mag_trk3[0]) //trk3 is blank
			{
				 for(ddd=0;ddd<598;ddd++)
				 {
					 READER_CLK=1;
					 READER_CLK=0;       // trk3 is over
				 }
				 READER_CLK=1;
			}
			else           //trk3 is not blank
			{
				trk3_send=1;
				if(trk2_send)   // trk2 is not blank, Dir_trk3==Dir_trk2
				{
				      Dir_trk3=Dir_trk2;
				      for(ddd=0;ddd<598;ddd++)
					   {
						 READER_CLK=1;
						 READER_CLK=0;       // trk3 is over
					   }
						 READER_CLK=1;
				}
				else      //trk2 is blank, to ensure   Dir_trk3
				 {
					if(mag_trk3[0]!=0x1a)  //   0x1a    must be fanxiang
					          {
							     Dir_trk3=0;
								 for(ddd=0;ddd<598;ddd++)
									{
										 READER_CLK=1;
										 READER_CLK=0;       // trk3 is over
									}
								READER_CLK=1;
						   }
					else
					{
						 if(mag_trk3[1]==0x1f)            // ox1f ==11111b  ,
						            Dir_trk3=0;
						 else
						            Dir_trk3=1;
						 for(ddd=0;ddd<598;ddd++)
							 {
								 READER_CLK=1;
								 READER_CLK=0;       // trk3 is over
							 }
						 READER_CLK=1;
		        	
			                   }
		                 }
		       }
		    	for(i=0;i<107;i++)
				{
				   mag_trk3[i]=0;
				}



		///////////////////////trk33 data begin//////////////////////////////
		
		if(trk3_send)
		{
			 if(!Dir_trk3)                 //trk3 is fanxiang
			 {
				  for(i=0;i<73;i++)
				  {
				  READER_CLK=1;
				  READER_CLK=0;
				  }
				  READER_CLK=1;
				  for(ddd=0;ddd<535;ddd++)
				  {
				   READER_CLK=1;
				   Delay_10us();
				   READER_CLK=0;
				   temp_trk=~READER_DATA;
				   if(temp_trk==1)
				   {SS_num=ddd;break;}
				  }
				   mag_trk3[0]=temp_trk;
				   for(i=1;i<5;i++)
				   {
					   READER_CLK=1;
					   Delay_25us();
					   READER_CLK=0;
					   temp_trk=~READER_DATA;
					   mag_trk3[0]+=temp_trk<<i;        //  b4--->b0        fanxiang collect trk33's data
				   }
				   READER_CLK=1;

				 if(mag_trk3[0]==0x0b)     //  b4->b0= 01011 (0x0b)   ss
				 {
					 mag_trk3[1]=0;
					 for(j=1;j<107;j++)
					 {
						 for(i=0;i<5;i++)
						 {
							 READER_CLK=1;
							 Delay_25us();
							 READER_CLK=0;
							 temp_trk=~READER_DATA;
							 mag_trk3[j]+=temp_trk<<i;          ////b4--->b0 //*************//  fanxiang ==zhengxiang save the trk3 data  ==b4--->b0;
						 }

						 if(mag_trk3[j]==0x1f)
						 {ES_num=j;break;} //break for();
		                      }
		                      if(((535-SS_num)%5)==0)          //LRC don't lose bit 0
		                      	{
		                      	       for(i=0;i<5;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk3[ES_num+1]+=temp_trk<<i;         //lrc
							 }
		                      	}
		                      else
		                      	{
							 for(i=0;i<(535-SS_num)%5;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk3[ES_num+1]+=temp_trk<<i;         //lrc
							 }
		                      	}

		                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;
				   	}

		  			READER_CLK=1;
		               }

			}
			else // (Dir_trk3==1)
			   {
					 for(ddd=0;ddd<608;ddd++)
					 {
					  READER_CLK=1;                          //data trk3 already exit
					  READER_CLK=0;
					 }
					  READER_CLK=1;
			   }
		} //end if(trk3_send=1)
		else  // trk3_send==0
		   {
				 for(ddd=0;ddd<608;ddd++)        //trk33 is blank
				 {
				  READER_CLK=1;
				  READER_CLK=0;              //trk33 is over
				 }
				  READER_CLK=1;
		   }

		////////////////////////////trk22 data begin////////////////////////
		
		if(trk2_send)
		{
			 if(!Dir_trk2)
			    {
				  for(ddd=0;ddd<408;ddd++)
				  {
					  READER_CLK=1;
					  READER_CLK=0;
				  }
				  READER_CLK=1;
				  for(i=0;i<200;i++)
				  {
					   READER_CLK=1;
					   Delay_10us();
					   READER_CLK=0;
					   temp_trk=~READER_DATA;
					   if(temp_trk==1)
					   {SS_num=i;break;}
				  }  //end   for(i=0;i<200;i++)
		   		  mag_trk2[0]=temp_trk;
				   for(i=1;i<5;i++)
				   {
					   READER_CLK=1;
					   Delay_25us();
					   READER_CLK=0;
					   temp_trk=~READER_DATA;
					   mag_trk2[0]+=temp_trk<<i;        //b4-->b0;  fanxiang collect trk22's data
				   }
				   READER_CLK=1;

				 if(mag_trk2[0]==0x0b)          //0x0b   01011
				 {
					mag_trk2[1]=0;
					 for(j=1;j<40;j++)
					 {
						 for(i=0;i<5;i++)
						 {
							 READER_CLK=1;
							 Delay_25us();
							 READER_CLK=0;
							 temp_trk=~READER_DATA;
							 mag_trk2[j]+=temp_trk<<i;        //b4--->b0 //*************//  fanxiang ===zhengxiang  save the trk2 data  ==b4--->b0;
						 }

						 if(mag_trk2[j]==0x1f)
						               {ES_num=j;break;} //break for();
					 } //end   for(j=1;j<40;j++)

					 if(((200-SS_num)%5)==0)          //LRC don't lose bit 0
					 	{
					 	       for(i=0;i<5;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk2[ES_num+1]+=temp_trk<<i ;            //	 (4-i) is must ,to add 0	LRC
							 }
					 	}
					 else
					 	{
							 for(i=0;i<(200-SS_num)%5;i++)
							 {
								 READER_CLK=1;
								 Delay_25us();
								 READER_CLK=0;
								 temp_trk=~READER_DATA;
								 mag_trk2[ES_num+1]+=temp_trk<<i ;            //	 (4-i) is must ,to add 0	LRC
							 }
					 	}

			          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;
		                }

		             }
			   else          //zhengxiang
			    {
				 for(ddd=0;ddd<608;ddd++)
				 {
					  READER_CLK=1;
					  READER_CLK=0;
				 }
				  READER_CLK=1;
			   }
		  } //end if(trk2_send=1)
		else  // trk2_send==0
		  {
				 for(ddd=0;ddd<608;ddd++)        //trk22 is blank
				 {
				  READER_CLK=1;
				  READER_CLK=0;              //trk22 is over
				 }
				  READER_CLK=1;
		  }


		///////////////////////////trk11 ///////////////////////////////////////
		
      if(trk1_send)
	   {
	        if(trk2_send||trk3_send)
			        Dir_trk1=(Dir_trk2||Dir_trk3);
		 else
			    {
				   if(error) //  just trk1 isn't blank and trk1'S data have some question,please push card in another direction
				       {
					   }
				}
			if(!Dir_trk1)
			   {
			         for(i=0;i<55;i++)
					  {
						  READER_CLK=1;
						  READER_CLK=0;
					  }
					  READER_CLK=1;

					 for(ddd=0;ddd<553;ddd++)

⌨️ 快捷键说明

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