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

📄 keyprocess.c

📁 这个是安防用的控制键盘C源程序,采用KEIL C51开发.用于控制前端解码器!
💻 C
字号:

#include"reg52.h"
#include"main.h"


bit fgkey=0;
bit fgkey_on=0;
bit IRI_Flag=0;
bit Aux_Flag=0;
bit Lock_Flag=0;
bit Protocol=0;
bit DisableKey=0;
bit PreSet=0;
bit BautSet=0;
bit SoundFlag=0;




unsigned char data keybuffer;
unsigned char scankeycounter;

unsigned char data KeyTemp;
unsigned char data j;

Uchar KeyCounter=0;
Uchar MonAddress=1;
Uchar CamAddress=1;
Uchar DisplayTemp[4];
Uchar AuxNumb;
extern Uchar NumbProtocol;
Uint  LockBuffer=1234;
Uchar IRINumb;
Uchar KeyValue;
Uchar TimeValue;


//extern unsigned int  TimeCounter;
extern Uchar SoundCounter;
extern unsigned char data keydata;
extern bit BUFlag;
extern bit TimerFlag;
extern void keyscan(void);
extern void delay1ms(unsigned char count);
extern void ePutstr(Uchar x,Uchar y, Uchar *ptr);
extern void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
extern void Ptz(Uchar i);
extern void LcdWriteCommand( Uchar CMD,Uchar AttribC );
extern void LocateXY( char posx,char posy);
extern void LcdReset( void );
extern void  x24c02_write(unsigned char address,unsigned char info);
void keyprocess(void);

/*--------------------------------------------------------------------------------------------
                                    数字键处理程序
  --------------------------------------------------------------------------------------------*/

void NumbProcess(Uchar Numb)
{
  Uchar i;
  Uchar Temp;
  if(KeyCounter<=3)
  {
    Temp=18-KeyCounter;
		
	if(!Lock_Flag)
	DispOneChar(Temp,2,'*');

    KeyCounter++;
  	for(i=3;i>=1;i--)
	DisplayTemp[i]=DisplayTemp[i-1];
    DisplayTemp[0]=Numb;
  }

  else
  {
  for(i=0;i<4;i++)
     {
	  KeyCounter=1;
	  DisplayTemp[i]=0;                      
	 }
   DisplayTemp[0]=Numb;

   if(!Lock_Flag)
   DispOneChar(18,2,'*');
   }

  if(Lock_Flag)
 {		   
   for(i=0;i<4;i++)
   {
   Temp=DisplayTemp[i]+48;                       //转换成ASCII 码
   DispOneChar(18-i,2,Temp);
   }
 }


 }

/*----------------------------------------------------------------------------------------------
                                  数字键暂存区清零
  ----------------------------------------------------------------------------------------------*/
void DispTempClear(void)
{  
   Uchar i;
   KeyCounter=0;
   for(i=0;i<4;i++)
   {
	 KeyCounter=0;
	 DisplayTemp[i]=0;                      
   }
	ePutstr(14,2,"[0000]"); 
}

/*----------------------------------------------------------------------------------------------
                                  选择界面显示
  ----------------------------------------------------------------------------------------------*/
void DispProtocol(void)
{

LcdWriteCommand( 0x01, 1);			// 显示清屏	
ePutstr(0,0,"Selecting Protocol");
ePutstr(0,1,"1:PELCO_D");
ePutstr(11,1,"2:PELCO_P");
ePutstr(0,2,"3:YAAN");
ePutstr(11,2,"4:PD_2400");
ePutstr(0,3,"Select:");
LcdWriteCommand( 0x0f, 1);
LocateXY(7,3);
	

}

/*----------------------------------------------------------------------------------------------
                                  通讯协议选择
  ----------------------------------------------------------------------------------------------*/
void SetProtocol(void)
{
 while(Protocol)
 keyprocess();
 DisableKey=0;
 LcdReset();
 MonAddress=1;
 CamAddress=1;
 ePutstr(0,3,"MON[0001]");	    // 上面一行显示一个预定字符
 ePutstr(11,3,"CAM[0001]");	
 ePutstr(11,2,"ENT[0000]");
}

void SetBaut(void)
{
 LcdWriteCommand( 0x01, 1);			// 显示清屏
 ePutstr(0,0,"Selecting Baut");
 ePutstr(0,1,"1:9600");
 ePutstr(11,1,"2:4800");
 ePutstr(0,2,"3:2400");
 ePutstr(11,2,"4:1200");
 ePutstr(0,3,"Select:");
 LcdWriteCommand( 0x0f, 1);
 LocateXY(7,3); 
 while(BautSet)
 keyprocess();
 DisableKey=0;
 LcdReset();
 MonAddress=1;
 CamAddress=1;
 ePutstr(0,3,"MON[0001]");	    // 上面一行显示一个预定字符
 ePutstr(11,3,"CAM[0001]");	
 ePutstr(11,2,"ENT[0000]");
}
/*-----------------------------------------------------------------------------------------------
                                      键盘处理程序
  -----------------------------------------------------------------------------------------------*/
 void keyprocess(void)
{
  Uint Temp;
  keyscan(); 

  if(SoundFlag)
  {
    EA=1;
	ET0=1;
    TR0=1;
  }
/*--------------------------------------------------------------------------------------------*/
 if(keybuffer != keydata)
  {
   keybuffer = keydata;
   scankeycounter = 20;
  }
 /*---------------------------------------------------------------*/
  else if(scankeycounter!=0)
 {
   scankeycounter--;
   delay1ms(1);
 }
  

 /*--------------------------------------------------------------*/   		
  else if (keybuffer!=no_key)
  {
   if(DisableKey)
   {
    if(keybuffer>K_4 & keybuffer!=K_lock)
	fgkey_on=1;
   }

   if(!fgkey_on)
   {
   fgkey_on=1;
   if(BUFlag)
    {
	 SoundFlag=1;
     SoundCounter=2;	
     EA=1;
     ET0=1;
     TR0=1;
	 BU=1;
    }
   switch (keybuffer)
    {
	 
	 case K_0:
	      if(Protocol || BautSet)
		  ;
		  else
          NumbProcess(0);
	
      
          
       
	      break;
	 case K_1:
          
          if(Protocol || BautSet)
		  {
		   DispOneChar(7,3,'1');
           LocateXY(7,3); 
           if(Protocol)
           {
		    NumbProtocol=1;
            x24c02_write(0x00,0x01);
           }
           else
           {
            TH1=0xFD;
            x24c02_write(0x01,0xFD);
           }
		  }
		  
		  else
	      NumbProcess(1);
          
	      break;
	 case K_2:
	      if(Protocol || BautSet)
		  {
		   DispOneChar(7,3,'2');
           LocateXY(7,3); 
           if(Protocol)
		   {
		    NumbProtocol=2;
			x24c02_write(0x00,0x02);
		   }
           else
		   {
            TH1=0xFA;
			x24c02_write(0x01,0xFA);
		   }
		  }
		  
		  else
	       NumbProcess(2);
        
	      break;
	 case K_3:
	      if(Protocol || BautSet)
		  {
		   DispOneChar(7,3,'3');
           LocateXY(7,3);
           if(Protocol)
		   {
 		    NumbProtocol=3;
			x24c02_write(0x00,0x03);
		   }
           else
		   {
            TH1=0xF4;
			x24c02_write(0x01,0xF4);
		   }
		  }
		  else
	      NumbProcess(3);
	      
	      break;
	 case K_4:
	      if(Protocol || BautSet)
		  {
		   DispOneChar(7,3,'4');
           LocateXY(7,3);
           if(Protocol)
		   {
 		    NumbProtocol=4;
			x24c02_write(0x00,0x04);
		   }
           else
		   {
            TH1=0xE8;
			x24c02_write(0x01,0xE8);
		   }
		  }
		  else
	       NumbProcess(4);
          break;
 	 case K_5:
	       NumbProcess(5);
          break;
 	 case K_6:
	       NumbProcess(6);
          break;
 	 case K_7:
           NumbProcess(7);
          break;
 	 case K_8:
          NumbProcess(8);
          break;
 	 case K_9:                         
          NumbProcess(9);
          break;
 	 case K_close: 
          if(Lock_Flag)
           {                
            ePutstr(14,2,"[clos]");
            if(IRI_Flag==0)
            {
			 TimerFlag=0;
             IRI_Flag=1;
             IRINumb=5;
             //Ptz(5);
            }
		   }
	      break;

 	 case K_open:
	     if(Lock_Flag)
		 {
	      ePutstr(14,2,"[open]");
          if(IRI_Flag==0)
          {
            IRI_Flag=1;
            IRINumb=4;
			TimerFlag=0;
            //Ptz(4);
          }
		 }
	      break;

	 case K_near:
          if(Lock_Flag)
          {
           ePutstr(14,2,"[near]");                  
        
           if(IRI_Flag==0)
           {
            IRI_Flag=1;
            IRINumb=7;
			TimerFlag=0;
           // Ptz(7);
           }
          }
          break;
	  case K_far:
	       if(Lock_Flag)
		   {
	        ePutstr(14,2,"[ far]");
           
            if(IRI_Flag==0)
            {
             IRI_Flag=1;
             IRINumb=6;
			 TimerFlag=0;
            // Ptz(6);
            }
           }
	       break;

      case K_wide:
	       if(Lock_Flag)
		   {
	        ePutstr(14,2,"[wide]");
           
            if(IRI_Flag==0)
            {
			 TimerFlag=0;
             IRI_Flag=1;
             IRINumb=9;
             //Ptz(9);
            }	    
	       }
		   break;
	  case K_tele:
	       if(Lock_Flag)
		   {

	        ePutstr(14,2,"[tele]");
	       
            if(IRI_Flag==0)
            {
			  TimerFlag=0;
              IRI_Flag=1;
              IRINumb=8;
              //Ptz(8);
            }
           }
		   break;
	  case K_mon:
           if(Lock_Flag)
		   {
	        MonAddress=DisplayTemp[2]*100 + DisplayTemp[1]*10 + DisplayTemp[0];

	        for(j=0;j<4;j++)
            {

             KeyTemp=DisplayTemp[j]+48;                       //转换成ASCII 码
             DispOneChar(7-j,3,KeyTemp);
            }

		    DispTempClear();
	       }
	       
	    
		   break;
	  case K_cam:
	       
	      if(Lock_Flag)
		  {
	       CamAddress=DisplayTemp[2]*100 + DisplayTemp[1]*10 + DisplayTemp[0];

     	   for(j=0;j<4;j++)
           {
            KeyTemp=DisplayTemp[j]+48;                       //转换成ASCII 码
            DispOneChar(18-j,3,KeyTemp);
           }

		   DispTempClear();
          }	    
		  break;
	  case K_on:
	    
       
	      if(Lock_Flag)
		  {
		   ePutstr(14,2,"[  on]");

           if(BautSet)
           {
            DisableKey=1;
            DispTempClear();
            SetBaut();
           }
         /*-------------选择通讯协议-----------------*/
		   if(Protocol)
		   {
		    DisableKey=1;
		    DispTempClear();
	        DispProtocol();
            SetProtocol();
			}
		 /*--------------辅助功能开-------------------*/
		   if(Aux_Flag)
		   {
		    switch(AuxNumb)
			{
             case 1:Ptz(10);                           //辅助1开
			        break;
			 case 2:Ptz(12);                           //辅助2开
			        break;
			 case 3:Ptz(14);                           //辅助3开
			        break;
			 case 4:Ptz(16);                           //云台自动开 
			        break;
             case 5:BUFlag=1;
                    x24c02_write(0x02,0x01);
			        break;
			 case 10:Ptz(30);                          //设定左边界
			         break;
			 case 11:Ptz(26);                          //自动巡航          
			         break;
			 case 12:Ptz(27);                          //添加巡航点
			         break;
			 case 13:Ptz(28);                          //巡航时间
			         break;
			 default:break;
			}
		    Aux_Flag=0;
           }
         /*--------------调用预置点-------------------*/
		   if(PreSet)
 		   {
		    Ptz(24);
			PreSet=0;
		   }
          DispTempClear();
		  }
           break;

	  case K_off:
	      if(Lock_Flag)
		  {
	       ePutstr(14,2,"[ off]");
          /*-----------------辅助功能关-----------------*/
	       if(Aux_Flag)      
		   {
		     switch(AuxNumb)
			 {
             case 1:Ptz(11);                          //辅助1关
			        break;
			 case 2:Ptz(13);                          //辅助2关
			        break;
			 case 3:Ptz(15);                          //辅助3关
			        break;
			 case 4:Ptz(17);                          //云台自动关
			        break;
			 case 5:BUFlag=0;
                    x24c02_write(0x02,0x00);
			        break;
			 case 10:Ptz(31);                         //设定右边界
			 default:break;
			 }
		    Aux_Flag=0;
           }
           /*---------------清除预置点-------------------*/
		   if(PreSet)
		   {
            Ptz(25);
			PreSet=0;
		   }
		    
	      DispTempClear();
		  }
		  break;
	  case K_shot:
	       /*--------------预置点功能标志----------------*/
           ePutstr(14,2,"[shot]");
           if(Lock_Flag)
           {
           KeyValue=DisplayTemp[2]*100+DisplayTemp[1]*10+DisplayTemp[0];
           PreSet=1;
	       DispTempClear();
	       }
	    
		  break;
	  case K_patran:
          ePutstr(14,2,"[patr]");

	    
	    
		  break;
	  case K_aux:
	      /*--------------辅助功能标志-------------------*/
	      if(Lock_Flag)
		  {
		   PreSet=0;
	       ePutstr(14,2,"[ aux]");
           Aux_Flag=1;
		   AuxNumb=DisplayTemp[1]*10+DisplayTemp[0];
	      }
	    
		  break;
	  case K_clear:
	       DispTempClear();
	  
	    
		  break;
      case K_salvo:
	       ePutstr(14,2,"[salv]");
	       
	    
	    
		  break;
	  case K_run:
	       ePutstr(14,2,"[ run]");
	    
	    
		  break;
	  case K_hold:
	       ePutstr(14,2,"[hold]");
	    
		  break;
	  case K_b:
	       ePutstr(14,2,"[   b]");
	    
	    
		  break;
	  case K_time:
	       ePutstr(14,2,"[time]");
		   if(Lock_Flag)
           {
            TimeValue=DisplayTemp[2]*100+DisplayTemp[1]*10+DisplayTemp[0];
            DispTempClear();
           }
	       break;
      case K_a:
	       ePutstr(14,2,"[   a]");
	    
	    
		  break;
	  case K_ack:
	       ePutstr(14,2,"[ ack]");
	    
	    
		  break;
	  case K_lock:
	       Temp=DisplayTemp[3]*1000 + DisplayTemp[2]*100 + DisplayTemp[1]*10 +DisplayTemp[0];
		   Protocol=0;
           BautSet=0;
           /*--------------键盘锁定功能-------------------*/
		    if(Temp==LockBuffer)
		   {
		    Lock_Flag=~Lock_Flag;
		    if(Lock_Flag)
		    ePutstr(0,2,"    ");
		    else
	        ePutstr(0,2,"lock");
	       }
           /*----------------设定预置点-------------------*/
           	if(PreSet && Lock_Flag)
           {
		    PreSet=0;
            Ptz(23);
           }
	    
		   DispTempClear();
		  break;
	  case K_f1:
	       ePutstr(14,2,"[  f1]");
	
	    
		  break;
	  case K_f2:
	       ePutstr(14,2,"[  f2]");
	    
	    
		  break;
      case K_prog:
	       ePutstr(14,2,"[prog]");
	    
	    
		  break;
	  case K_arm:
	       ePutstr(14,2,"[ arm]");
	    
	    
		  break;
	  case K_last:
	       ePutstr(14,2,"[last]");
	    
	    
		  break;
	  case K_next:
	       ePutstr(14,2,"[next]");
	    
	    
		   break;
	  case K_vcr:
	       ePutstr(14,2,"[ vcr]");
	    
	    
		   break;
      case K_user:
	       /*--------------选择通讯协议-------------------*/
	       if(DisplayTemp[0]==1)
		   Protocol=1;
           if(DisplayTemp[0]==2)
           BautSet=1;
	       ePutstr(14,2,"[user]");
	    
	    
		   break;
	     
 	 default:
	      break;
	}
   }

   else                                                   //等待按键释放
   ;
  
  }
  
  else                                                    
  {
   keybuffer = no_key;
   fgkey_on=0;
   if(IRI_Flag&&Lock_Flag)
   {
    IRI_Flag=0;
    IRINumb=0;
    TimerFlag=0;
    TR0=0;
    Ptz(22);
    DispTempClear();
   }
  }
/*---------------------------------------------------------------------------------*/  
 if(IRI_Flag)
 Ptz(IRINumb);
  
 }




























⌨️ 快捷键说明

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