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

📄 keypass.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "lcd_api.h"
#include "keypass.h"
#include "keymenu.h"
#include "keyscan.h"
#include "menu.h"

#define UNLOCKTIMETICK    10          //0.5S
#define PASSWDTIMETICK   180        //10S
#define NOKEYPRESSTIMETICK  1200    //60S




KPState KeyPassState=SHOW;

unsigned char InPutPass[9];

unsigned int PassNum=0;



KPState KeyPass()
{
	KEYSTATE PADKEYST;
   KEY       InKey;
   unsigned char InChar=0;
   static unsigned long StlockTime=0;
   switch( KeyPassState )
      {
   case SHOW:   	
   	
   	
   	
   case LOCK:  //0
   	        	         
   	         if(clock()>=(StlockTime+UNLOCKTIMETICK))
   	         	{
   	         	StlockTime=clock(); ////在键盘锁定状态每隔一段时间进行键盘扫描,以节约系统时间
   	          	PADKEYST=KeyPadScan();
   	          	//printf("PADKEYST=%d\n",PADKEYST);
   	          if (PADKEYST!=READY) KeyPassState=UNLOCK;
 
        	   }
   	         	
   	         break;	
   	         	     
   case UNLOCK: //1
 	         	
   	   	         	if (KeyPadScan()==READY) 
   	         			{ 
   	         				 if (GetKey()==_Menu)
   	         				 {
   	         			        KeyPassState=PASSWORD;
   	         			        LCD_Clearup();
   	         			        PassNum=0;
   	         			        SCanPassWord(PassNum );
   	         			   }
   	         			   else  KeyPassState=LOCK;
   	         			   	
   	         			   StlockTime=clock();
   	            	         	    
   	         	     }
   	               break;
   	               
	               
   	             
   	case  PASSWORD: //2
   		              KeyPadScan( );
   		              InKey=GetKey();
   		              
   		             if ((InKey==_NOP)&&(clock()>=(StlockTime+PASSWDTIMETICK)))
   		             {
  		                //////10s no key pressed
 	              	
   		                	  KeyPassState=LOCK;
   	         				  	  StlockTime=clock();
   	         	            LCD_Clearup();
                      break;
 		             		
   	               } 
	             		
   		             if (InKey==_Enter) 
   		             {
   		              		//compare passwords
   		              		StlockTime=clock(); 
   		              		if (ComparePass(PassNum))
   		              			 {
   		              			 	 KeyPassState=MENU;
   		              			 	 LCD_Clearup();
   		              			 	 MENUManager.ShowMenu( 0 );
   		              			 	}
   		              		  else
   		              		  {
   		              		  	 PassNum=0;	
   		              		    SCanPassWord(0 );
   		              	    }	             		
   		             		break;
   		             }
   		             		
  		             	
   		             if((InKey>=_Key0)&&(InKey<=_Key9))
   		             {
   		             StlockTime=clock();
   		             InChar=(unsigned char)(InKey -_Key0)+48;
   		             InPutPass[PassNum]=InChar;
   		             PassNum++; 
   		             SCanPassWord(PassNum );
   		               if (PassNum>=8)
   		              	{
   		             	  		//////////////////////compare passwords
                      		if (ComparePass(8))
   		              			  {
   		              			  	KeyPassState=MENU;
   		              			  	LCD_Clearup();
   		              			  	MENUManager.ShowMenu( 0 );
   		              			  	}
   		              		  else
   		              		  {
   		              		  	 PassNum=0;	
   		              		    SCanPassWord(0 );
   		              	    }	             		
   		             	   		             	  		
   		             		}
            
   		              }
         
   		             break;  
   	         	
   	case  MENU:  //3
   		           //keyroutine(); 
   		           KeyPadScan( );
   		              	
   		     	     if(clock()<=StlockTime+NOKEYPRESSTIMETICK)
   		           {
   		              	if (KeyPadScan()!=READY)   StlockTime=clock();
   		           }
   		           else
   		           {
   		                KeyPassState=LOCK;
   	         				  LCD_Clearup();
   	         	        StlockTime=clock();
   	         	   }   //////60s no key pressed
   		       	break;
   	}		
   return KeyPassState;
}       

  

void  SCanPassWord(unsigned int  Pass_num  )
{
   // goto graghic mode
   int    x, y; 
   
   char  OutputPass[9];    
   // show chinese char at center position
   char BufStr[20];
    
    LCD_Clearup();
   strcpy( BufStr, "*水文集控器*" );
   x = (128-strlen(BufStr)*8)/2;
   y = 8;
   LCD_WriteString( x, y, BufStr, 1 );
 
  if (Pass_num>8) Pass_num=8;

  for(int i=0;i<Pass_num;i++)
       OutputPass[i]='*';
   OutputPass[i]='\0';
   
   sprintf( BufStr, "密码:%s",OutputPass );

   x = 0;
   y = 24;
   LCD_WriteString( x, y, BufStr, 1 );

}


int ComparePass(unsigned int Pass_num)
{
	
	if (Pass_num>8)  Pass_num=8;
	InPutPass[Pass_num]='\0';	
		
	if(strcmp(PasswordBuff, InPutPass)==0) return 1;
	else return 0;
	
	
	
}

⌨️ 快捷键说明

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