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

📄 51keyboard_display.c

📁 因需要
💻 C
📖 第 1 页 / 共 3 页
字号:
  sw=0;
  gw=0;
}
void zijian() 	/////////////////////////////////////////
{
    STATE0 = 0;
	STATE1 = 1;

  while(keyflag==0);

  while(keyrelease32!=0)
 {
    STATE0 = 0;
	STATE1 = 1;
   	while(keyflag==1||fu==0||yang==0||zheng==0||fan==0||sudu==0)
	{

		if(keyrelease1==0)
		  {one=1;two=0;three=0;four=0;}
		
		else if(keyrelease2==0)
		  {one=0;two=1;three=0;four=0;}
		  
		else if(keyrelease3==0)
		  {one=0;two=0;three=1;four=0;}
		  
		else if(keyrelease4==0)
		  {one=0;two=0;three=0;four=1;}
		  
		else if(keyrelease11==0&&one==1)
		  {STATE0=0;STATE1=2;lingweiread();}
		else if(keyrelease11==0&&two==1)
		  {STATE0=0;STATE1=3;lingweiwrite();}
		else if(keyrelease11==0&&three==1)
		  {STATE0=0;STATE1=4;jiaojuread();}
		else if(keyrelease11==0&&four==1)
		  {STATE0=0;STATE1=5;jiaojuwrite();}

	    else if(keyrelease31==0)
          {
		    c01=1;
			c02=15;	
			one=0;
			two=0;
			three=0;
			four=0;		
		  }	     
		else if(keyrelease22==0)		/////////////瞄准  
		{
		  c01=1;
		  c02=6; 	
		  send(0x16);

		} 
	  	else if(keyrelease23==0)	//稳定   
		  {
		    c01=1;
			c02=7;
		    send(0x17);
		    
	   	  }
        else if(keyrelease21==0)	//急停  
		  {
		    c01=1;
			c02=5;
		    send(0x15);
		   
	   	  }
	

      	 else if((keyrelease13==0&&sudu==0)||(keyrelease30==0&&yang==0))
		   {
		      c01=1;
			  c02=1;;
			  send(0x11);
		   }	 
	     else if(keyrelease13==0&&sudu==1)	   //方向键值 连发	   
		   {
		     c01=0;
			 c02=0x0d; 
		     send(0x0D);
			 if(yang==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21); 
			}
		   }

		 else if(keyrelease30==0&&keyrelease13==1&&keyrelease14==1&&keyrelease15==1&&keyrelease16==1)
		   {
		     c01=1;
			 c02=8;
			 delay(600000);
			 if(sudu==1)
			  {
			    send(0x18);
				send(0x21);
				send(0x21);
			  }
		   }

		 else if((keyrelease14==0&&sudu==0)||(keyrelease30==0&&fu==0))
		   {
		     c01=1;
			 c02=2;
		     send(0x12);
		   }
	     else if(keyrelease14==0&&sudu==1)	     
		  {
		    c01=0;
			c02=0x0e;
		    send(0x0E);
			 if(fu==1)	
		    {
		 	 send(0x21); 
			 send(0x21);
			 send(0x21); //若方向键弹起则发送三个弹起键值  
			}
		  }

		 else if((keyrelease15==0&&sudu==0)||(keyrelease30==0&&fan==0))	   
		   {
		     c01=1;
			 c02=3; 
		     send(0x13);
		   }	 	 
		 else if(keyrelease15==0&&sudu==1)	    
		  {
		    c01=0;
			c02=0x0f;
		    send(0x0F);
			 if(fan==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21);  
			}
		  }
		  else if((keyrelease16==0&&sudu==0)||(keyrelease30==0&&zheng==0))
		    {
			  c01=1;
			  c02=4;
			  send(0x14);
			} 		 
	      else if(keyrelease16==0&&sudu==1)	   //方向键值 连发	   
		  {
		    c01=1;
			c02=0;
		    send(0x10);
			 if(zheng==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21); //若方向键弹起则发送三个弹起键值  
			}	 
		  }	  
		  else
		   {
		     one=0;
			 two=0;
			 three=0;
			 four=0;	
		   }	

	    rkey=0;	
		 	
	}

		c01=2;
		c02=1;
  }

   STATE0=0;
   STATE1=0;
   rkey=0;
   c01=0x0a;
   c02=0x0c;  
}


void ceju()	
{
 unsigned int gw,sw,bw;
 bit lockH; //锁定H标志位 
 dataH = 0;
 gw=0;
 send(0x1F);
 while(keycode!=32)
 {
    STATE0 = 1;
	STATE1 = 0;
   	while(keyflag==1);

   	if(rkey==1)
	{
	   keycode = key;
	   
	   if(keycode==31||keycode==30||keycode==23)
	     continue;
	   else if(keycode>=0&&keycode<=9&&lockH!=1)
	   {   send(keycode);	///////////////////////////////////////////////////////  测试串口 
	       bw=sw;
	       sw=gw;
	       gw=keycode;
	       dataH=100*bw + 10*sw + gw;
	       if(dot2==1) 
		      dot2=0;
	   	   else if(dot1==1)
		   {
		      dot2=1;
		      dot1=0;
		   }
		   else if(dot0==1)
		   {
		      dot1=1;
		      dot0=0;
		   }
       } 

	   else if(keycode==10&&lockH==0)
	   {
		  send(10); ////////////////////////////////////  测试串口  
	      
	      if(dot0||dot1||dot2) 
		    rkey=0;
		  else 
		    dot0=1;
	   }
	   else if(keycode==11&&lockH!=1&&dataH!=0)
	    {
		   lockH=1;
		   if(!(dot1||dot2))
		     targetH = (float)dataH;
		   else 
		   {
			   if(dot1==1)
			     targetH = (float)dataH/10 ;
			   else if(dot2==1)
			     targetH = (float)dataH/100;	      
		   } 
		}
		else if(keycode==22&&lockH==1)		/////////////瞄准  
		{
		  send(0x16);
		} 

	  	 else if(keycode==21)	//急停  
		  {
		    send(0x15);
		    break;
	   	  }


      	 else if((keycode==13&&sudu==0)||(keycode==30&&yang==0))
		     send(0x11);
			 
	     else if(keycode==13&&sudu==1)	   //方向键值 连发	   
		   {
		     send(0x0D);
			 if(yang==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21); 
			 yang=0;
			}
		   }
		 else if((keycode==14&&sudu==0)||(keycode==30&&fu==0))
		     send(0x12);

	     else if(keycode==14&&sudu==1)	     
		  {
		    send(0x0E);
			 if(fu==1)	
		    {
		 	 send(0x21); 
			 send(0x21);
			 send(0x21); //若方向键弹起则发送三个弹起键值  
			 fu=0;
			}
		  }

		 else if((keycode==15&&sudu==0)||(keycode==30&&fan==0))		   
		     send(0x13);
			 	 
		 else if(keycode==15&&sudu==1)	    
		  {
		    send(0x0F);
			 if(fan==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21);  
			 fan=0;
			}
		  }
		  else if((keycode==16&&sudu==0)||(keycode==30&&zheng==0))
		     send(0x14);
			 		 
	      else if(keycode==16&&sudu==1)	   //方向键值 连发	   
		  {
		    send(0x10);
			 if(zheng==1)	
		    {
			 send(0x21); 
			 send(0x21);
			 send(0x21); //若方向键弹起则发送三个弹起键值  
			 zheng=0;
			}
		  }

	   rkey=0;	 	
	}	 
   }

   send(0x20);

   STATE0=0;
   STATE1=0;
   gw=0;
   sw=0;
   bw=0;
   rkey=0;
   dataH=0;
   lockH=0;
   dot0=dot1=dot2=0;
 } 



 void SMBus_Init (void)
{
  SMB0CN    = 0x40;
  SMB0CR    = 0xE9;                                    
}


 void Timer3_Init (void)
{
   TMR3CN = 0x00;                      

   TMR3RL = 0x92;           
   TMR3 = TMR3RL;                     

   EIE2 |= 0x01;                       
   TMR3CN |= 0x04;                     
}


void SMBUS_ISR (void) interrupt 7
{
   bit FAIL = 0;                      
   static char i;                      
   static bit SEND_START = 0;        
   switch (SMB0STA)
   {
      
      case SMB_START:
         SMB0DAT = TARGET;             
         SMB0DAT &= 0xFE;                                              
         SMB0DAT |= SMB_RW;           
         STA = 0;                     
         i = 0;                       
         break;

      case SMB_RP_START:
         SMB0DAT = TARGET;             
         SMB0DAT |= SMB_RW;          
         STA = 0;                    
         i = 0;                     
         break;
    
      case SMB_MTADDACK:

         SMB0DAT = WORD_ADDR;         

         if (SMB_RANDOMREAD)
         {
            SEND_START = 1;            
            SMB_RW = READ;
         }
         break;

      case SMB_MTADDNACK:
         if(SMB_ACKPOLL)
         {
            STA = 1;                  
         }
         else
         {
            FAIL = 1;                  
         }                            

         break;

      case SMB_MTDBACK:

         if (SEND_START)
         {
            STA = 1;
            SEND_START = 0;
            break;
         }

         if (SMB_RW==WRITE)            
         {
            if (i < SMB_DATA_LEN)     
            {
               SMB0DAT = *pSMB_DATA_OUT;
			   pSMB_DATA_OUT++;
               i++;
            }
            else
            {
              STO = 1;                 
              SMB_BUSY = 0;            
            }
         }
         else {}                       

         break;

      case SMB_MTDBNACK:
         if(SMB_ACKPOLL)
         {
            STA = 1;                   
         }
         else
         {
            FAIL = 1;                  
         }                           

         break;

     
      case SMB_MTARBLOST:

         FAIL = 1;                    

         break;

      case SMB_MRADDACK:
         if (i == SMB_DATA_LEN)
         {
            AA = 0;                   
         }
         else
         {
            AA = 1;                    
         }
         break;

      case SMB_MRADDNACK:
         if(SMB_ACKPOLL)
         {
            STA = 1;                  
         }
         else
         {
            FAIL = 1;                 
         }                         

         break;

      
      case SMB_MRDBACK:
         if ( i < SMB_DATA_LEN )       
         {
            *pSMB_DATA_IN = SMB0DAT;  
            pSMB_DATA_IN++;           
            i++;                     
            AA = 1;                                                
         }

         if (i == SMB_DATA_LEN)        
         {
            SMB_BUSY = 0;             
            AA = 0;                                                      
            STO = 1;                   
         }

         break;

      case SMB_MRDBNACK:
         *pSMB_DATA_IN = SMB0DAT;      
         STO = 1;
         SMB_BUSY = 0;
         AA = 1;                      
         break;

      default:
         FAIL = 1;
         break;
   }

   if (FAIL)                           
   {
      SMB0CN &= ~0x40;                
      SMB0CN |= 0x40;
      STA = 0;
      STO = 0;
      AA = 0;
      SMB_BUSY = 0;                   
      FAIL = 0;
   }
   SI = 0;                           
}

void Timer3_ISR (void) interrupt 14
{
   SMB0CN &= ~0x40;                    
   SMB0CN |= 0x40;                     
   TMR3CN &= ~0x80;                    
   SMB_BUSY = 0;                       
}  

void EEPROM_ByteWrite(unsigned char addr, unsigned char dat)
{
   while (SMB_BUSY);                   
   SMB_BUSY = 1;                      
   TARGET = EEPROM_ADDR;              
   SMB_RW = WRITE;                     
   SMB_SENDWORDADDR = 1;              
   SMB_RANDOMREAD = 0;                 
                                      
   SMB_ACKPOLL = 1;                                                        
   WORD_ADDR = addr;                                                        
   SMB_SINGLEBYTE_OUT = dat;           
   pSMB_DATA_OUT = &SMB_SINGLEBYTE_OUT;

   SMB_DATA_LEN = 1;                  
   STA = 1;
}

unsigned char EEPROM_ByteRead(unsigned char addr)
{
   unsigned char  retval;               
   while (SMB_BUSY);                   
   SMB_BUSY = 1;                       
   TARGET = EEPROM_ADDR;             
   SMB_RW = WRITE;                     
   SMB_SENDWORDADDR = 1;              
   SMB_RANDOMREAD = 1;                 
   SMB_ACKPOLL = 1;                   
   WORD_ADDR = addr;                  
   pSMB_DATA_IN = &retval;             
   SMB_DATA_LEN = 1;                   
   STA = 1;
   while(SMB_BUSY);                    
   return retval;
}



⌨️ 快捷键说明

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