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

📄 hand_1010_rs232_ok.c

📁 基于PIC18F6720MCU开发的手持式POS机的原码
💻 C
📖 第 1 页 / 共 5 页
字号:
	1-------0ch---1			down----0fh-------12
	2-------08h---2			right---10h-------13
	3-------04h---3			light---0eh-------14
	4-------0bh---4			Esc-----14h-------15
	5-------07h---5			lamp----12h-------16
	6-------03h---6			set-----0dh-------17
	7-------0ah---7			+/------05h-------18
	8-------06h---8			Enter---01h-------19
	9-------02h---9		
//static uchar rom  KEYCODE[21]={0,19,9,6,3,18,8,5,2,10,7,4,1,17,14,12,13,0,16,11,15 };	
**********************************************************************************/
void	Function(void)																			//按键功能函数
{
    static	uchar   cby[7]={0xb3,0xad,0xb1,0xed,0xd4,0xb1,0};
    static 	uchar   tsy[7]={0xb5,0xf7,0xca,0xd4,0xd4,0xb1,0};
	uchar	i,j,p,n,seq;
	uint	k,m;
	uchar   charh,charl;            	
    uchar   temp_buffer[7]={0x46,0x86,0x89,0,0,0,0};	
  //---------------------------------------------------声音提示操作	
 if(key!=0) speaker();
 switch (functionhandle) 
  { 
  //---------------------------------------------------登陆界面
  case 0:
		//---------------------------------------------------	
		if(displaynextpage==1)
          {
			printscr(0,0,'c',"******************************",buffer.ichar);
            printscr(1,6,'c',"  ",buffer.ichar);
			printscr(2,6,'c',"  ",buffer.ichar);
			printscr(3,6,'c',"操作员:抄表员",buffer.ichar);   
			printscr(4,6,'c',"密 码:",buffer.ichar);
			printscr(5,6,'c',"  ",buffer.ichar);
			printscr(6,6,'c',"  ",buffer.ichar);
			printscr(7,0,'c',"操作员类型选择请按'.'!",buffer.ichar);
			printscr(8,0,'c',"******************************",buffer.ichar);
			printscr(9,2,'c',"优倍电气股份(南京)有限公司",buffer.ichar);
	   		displaytime=0;
            usernumber=0;
            displaynextpage=0;
		 }	   	   
 	    if((key<11)&&(key>0))
		   {			
			if(key==10) key=0;	
			if(step_count0==4) 
			  {	
			 	step_count1++;	 
			 	if(step_count1>6) step_count1=6;		 		
		 	 	line4buffer[step_count1-1]='*';		          //		
		 	 	line4buffer[step_count1]=0;	
			 	line4buffer[step_count1+1]=0;		        
			 	password0[step_count1-1]=key;			 
         	  }
		    }
          //--------------------------------------------
		  if((key==set)&&(deep_count!=0)) line4buffer[--deep_count]=0;   
          //-------------------------------------------  
          if(key==dot) 
             if(usernumber==0)
               { 
                for(i=0;i<7;i++)line3buffer[i]=tsy[i];
                printscr(3,13,'d',SPACE,line3buffer);
                usernumber=1;
               }
              else 
                  {
                   for(i=0;i<7;i++)line3buffer[i]=cby[i];
                   printscr(3,13,'d',SPACE,line3buffer);
                   usernumber=0;
                  }
		  printscr(4,13,'d',SPACE,line4buffer);	          
	      switch(key)
                  {
					case down : 
							  step_count0=4; 
							  step_count1=0;
							  clearhand(3); 							  
							  for(i=0;i<6;i++) line4buffer[i]=0;
							  printscr(4,13,'d',SPACE,line4buffer); //down 
							  break;
                    case up : 
							  step_count0=3; 
							  clearhand(4); 							 
							  step_count1=0;
							  for(i=0;i<6;i++) line3buffer[i]=0;							 
							  break; 			
					case enter :
							  //-------------------------------密码校验程序
							  for(i=0;i<6;i++)	password[i]=read_word1(usernumber*16+i);  //read password from eeprom.								
						      for(i=0;i<6;i++)
                                 {
                                   if(password[i]==password0[i]) continue;
                                   else break;
                                  }
                              for(j=0;j<6;j++)
                                 {
                                   if(password0[j]==superpassword[j]) continue;
                                   else break;
                                  }
                              if((i==6)||(j==6)) 
                                 {
                                  printscr(7,0,'c',"密码正确!",buffer.ichar);  // 
                                  line3buffer[0]=line3buffer[0]-0x30;
								  if(usernumber==0) funtiondisplayselect=0x01;
                                    else funtiondisplayselect=0x02;  
								  step_count0=1;
								  step_count1=0;
                                  functionhandle=1;
								  displaynextpage=1;
								  delayms(100);
								  }   
                                 else  {
                                         printscr(7,0,'c',"密码错误!",buffer.ichar);  // 
                                         for(i=0;i<30;i++) line4buffer[i]=0;
							  			 printscr(4,13,'d',SPACE,line4buffer);
										 step_count0=3;
										 clearhand(4); 
										}	
                                 for(i=0;i<6;i++) {password0[i]=0;line4buffer[i]=0;}							
							  //----------------------------密码校验结束
							    break;    //管理员登陆;
					default:    break;                               
                  }
			printhand(step_count0);		  
			break;
//-------------------------------------------------------------------------------------------
//----总菜单界面
   case 1:  
      if(funtiondisplayselect==0x01)
       {  
		if(displaynextpage)
		  {
		      printscr(0,0,'c',"******************************",buffer.ichar);
              printscr(1,6,'c',"下载抄表信息",buffer.ichar);                   
    		  printscr(2,6,'c',"上传抄表信息",buffer.ichar);
		 	  printscr(3,6,'c',"集    抄",buffer.ichar);			 
			  printscr(4,6,'c',"读单表具",buffer.ichar);		
	          printscr(5,6,'c',"帮助",buffer.ichar);
			  printscr(6,6,'c',"  ",buffer.ichar);
			  printscr(7,6,'c',"  ",buffer.ichar);		
			  printscr(8,0,'c',"******************************",buffer.ichar);
			  printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);
			  displaynextpage=0;			 		 
		   }
	      switch(key)
              {		      
					case down : clearhand(step_count0++);  break;   //down 
               	 	case up   : clearhand(step_count0--);  break;   //up
                    case esc  : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0]=0; break;
					case enter: 
                          //------------------------------------------------------------------------
						  clearlcd();
                          functionhandle=step_count0+1; 
						  displaynextpage=1;
						  step_count0=1;
						  step_count2=1;
						  deep_count=0;
						  for(i=0;i<30;i++)
                             {
						  		line1buffer[i]=0;
						  		line2buffer[i]=0;
						  		line3buffer[i]=0;	
						  		line4buffer[i]=0;
							  }						  
                          break; 				
					 default:break;
			    }
			   if(step_count0==0) {step_count0=5;displaynextpage=1;}	 		
   			   if(step_count0>5)  {step_count0=1;displaynextpage=1;}   //置页标志
		       printhand(step_count0); 
         }          
          else 
             {
             	if(displaynextpage)
		          {
			        printscr(0,0,'c',"******************************",buffer.ichar);
                    if(step_count1==0)
                      {
					  printscr(1,6,'c',"出厂启用",buffer.ichar); 		             
			          printscr(2,6,'c',"表具重置",buffer.ichar);
                      printscr(3,6,'c',"读单表具",buffer.ichar);
                      printscr(4,6,'c',"阀门控制",buffer.ichar);                      
                      printscr(5,6,'c',"表具查询",buffer.ichar);
				      printscr(6,6,'c',"更改价格表",buffer.ichar);   
                      printscr(7,6,'c',"更改结算日",buffer.ichar);
                      printscr(8,0,'c',"******************************",buffer.ichar);
			          printscr(9,0,'c',"1/2          Ent:确认Esc:退出",buffer.ichar);		          
			          } //step_count0=7; 
                     else
                      { 
 					  printscr(1,6,'c',"更改抄表日",buffer.ichar);
                      printscr(2,6,'c',"更改中继器地址",buffer.ichar);
		              printscr(3,6,'c',"更改标准时间",buffer.ichar);			                                      //                     
			          printscr(4,6,'c',"修改手抄器密码",buffer.ichar);		         	
	                  printscr(5,6,'c',"系统时间",buffer.ichar);			         
			          printscr(6,6,'c',"帮助",buffer.ichar);			        
 			          printscr(7,6,'c',"  ",buffer.ichar);
			          printscr(8,0,'c',"******************************",buffer.ichar);
			          printscr(9,0,'c',"2/2          Ent:确认Esc:退出",buffer.ichar);
			          }			         
			         displaynextpage=0;
			         displaytime=0;			 
		          }
              if(step_count1==0)
			     { //first page
              	   switch(key)
                	{		      
					case down : clearhand(step_count0++);  break;   //down 
               	 	case up   : clearhand(step_count0--);  break;   //up
                    case esc  : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0]=0;break;
					case enter: 
                          //------------------------------------------------------------------------
						  clearlcd();
                          functionhandle=step_count0+10; 
						  displaynextpage=1;
						  step_count0=1;
						  step_count2=1;
						  deep_count=0;
						  deep_count1=0;
						  for(i=0;i<30;i++)
                             {
						  		line1buffer[i]=0;
						  		line2buffer[i]=0;
						  		line3buffer[i]=0;	
						  		line4buffer[i]=0;
							  }						  
                          break; 				
					 default:    break;
			    	}
			     if(step_count0==0) {step_count0=6;step_count1=1;displaynextpage=1;}	 		
   			     if(step_count0>7)  {step_count0=1;step_count1=1;displaynextpage=1;}   //置页标志
		         printhand(step_count0);   
                }
                else                                                 //second page
			    {{
			       switch(key)                                       //
                        {		      
				 		case down : clearhand(step_count0++);  break;   //down 
                 		case up   : clearhand(step_count0--);  break;   //up
                        case esc  : displaynextpage=1;functionhandle=0;step_count0=3;line3buffer[0]=0;line4buffer[0];break;
				 		case enter: 
						  			clearlcd();
                          			functionhandle=step_count0+10+7; 
						  			displaynextpage=1;
						  			step_count0=1;
						  			step_count2=1;
						  			deep_count=0;
						  			for(i=0;i<30;i++)
                             			{
						  					line1buffer[i]=0;
						  					line2buffer[i]=0;
						  					line3buffer[i]=0;	
						  					line4buffer[i]=0;
							  			}		
                            break;       			
				         default:  break;
                        }
		  	      if(step_count0>6) {step_count0=1;step_count1=0;displaynextpage=1;}
			      if(step_count0==0){step_count0=7;step_count1=0;displaynextpage=1;}   //置页标志
			      printhand(step_count0); 	 
	            }
            }  
         }     
	    break;
//-----step_count级子功能菜单界面
  case 2: 
		if(displaynextpage)
			{
	   		printscr(0,0,'c',"*下载抄表信息",buffer.ichar);
       		printscr(1,0,'c',"  ",buffer.ichar);
	   		printscr(2,0,'c',"  ",buffer.ichar);
			printscr(8,0,'c',"  ",buffer.ichar);
			printscr(8,0,'c',"******************************",buffer.ichar);
	   		printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);		
        	displaynextpage=0;
			displaytime=0;
			}
/*************************************************************
uchar   	current_count;                                  //当前接收或发送的数据包数。
uint        current_repeater_addr; 							//当前有效的中继器地址。
**************************************************************/   
			                displaynextpage=1;	
							functionhandle=1;					                                 
                         	printscr(1,1,'c',"正在连接......",buffer.ichar);	   					
							printscr(9,14,'c',"Ent:确认Esc:退出",buffer.ichar);
							key=0;
						    comm_wrong_flag=0;
                            current_count=0;
                            current_repeater_addr=0;                                        
							start_re_send_flag=0;
							//-----------------------------------------------下栽数据
                            for(i=0;i<50;i++)
								{	
										if(rs232receive())
                                              {
                                               m=dealrs232revedata();//该程序返通讯类型同时置

⌨️ 快捷键说明

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