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

📄 waterctrlv1.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
												}
												switch(RevBuffer[9])
												{

													case 0x00://修改硬件卡密码
													READ_E2PROM(RevBuffer+18,HartCardLoadPWAdd,6);//将原密码先存下来	
													WRITE_E2PROM(RevBuffer+10,HartCardLoadPWAdd,6);//写当前修改密码
													for(systemtemp1=0;systemtemp1<6;systemtemp1++)
													{
 														READ_E2PROM(&systemtemp,HartCardLoadPWAdd+systemtemp1,1);
														if(systemtemp!=RevBuffer[10+systemtemp1])
														{
															WRITE_E2PROM(RevBuffer+18,HartCardLoadPWAdd,6);//写入原密码
															carderrorbyte = 0x26;
															systemflag1|=0x40;
															break;	
														}
													}		
													break;

													case 0x01://修改系统号
													READ_E2PROM(RevBuffer+18,SystemNumADD,3);//将原系统号先存下来	
													WRITE_E2PROM(RevBuffer+10,SystemNumADD,3);//写当前更改系统号
													for(systemtemp1=0;systemtemp1<3;systemtemp1++)
													{
 														READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
														if(systemtemp!=RevBuffer[10+systemtemp1])
														{
															WRITE_E2PROM(RevBuffer+18,SystemNumADD,3);//写入原系统号
															carderrorbyte = 0x26;
															systemflag1|=0x40;
															break;	
														}
													}		
													break;

													case 0x02://修改卡软件密码
													READ_E2PROM(RevBuffer+18,SoftcardPWADD,3);
													WRITE_E2PROM(RevBuffer+10,SoftcardPWADD,3);
													for(systemtemp1=0;systemtemp1<3;systemtemp1++)
													{
 														READ_E2PROM(&systemtemp,SoftcardPWADD+systemtemp1,1);
														if(systemtemp!=RevBuffer[10+systemtemp1])
														{
															WRITE_E2PROM(RevBuffer+18,SoftcardPWADD,3);
															carderrorbyte = 0x26;
															systemflag1|=0x40;
															break;	
														}
													}
													break;

													case 0x03:
													READ_E2PROM(RevBuffer+18,AD_DE_NumAdd,1);
													WRITE_E2PROM(RevBuffer+10,AD_DE_NumAdd,1);
													READ_E2PROM(&systemtemp,AD_DE_NumAdd,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,AD_DE_NumAdd,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}														
													break;

													case 0x04://校准时间
													systemtime[0]=RevBuffer[10];
													systemtime[1]=RevBuffer[11];
													systemtime[2]=RevBuffer[12];
													systemtime[3]=RevBuffer[13];
													systemtime[4]=RevBuffer[14];
													systemtime[5]=RevBuffer[15];
													systemtime[6]=RevBuffer[16];
													WriteTime(systemtime);

													break;

													case 0x05://修改干黄管位置
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		
													break;

													case 0x06://修改开关阀门的时间
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		
													break;

													case 0x07://修改断行通讯启用
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		
													break;

													case 0x08://修改有无预设量模式
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		
													break;

													case 0x09://修改卡量的属性
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		

													break;

													case 0x0a://修改表取单价的模式
													READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
													WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
													READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
													if(systemtemp!=RevBuffer[10])
													{
														WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
														carderrorbyte = 0x26;
														systemflag1|=0x40;
														break;
													}		
													break;
					
													default:
													break;
												}
												//setting error
												if(systemflag1&0x40)
												{
													break;
												}
												//setting is complete
												else
												{
													//将卡写成无效卡
													RevBuffer[0]=0x09; 
													RevBuffer[1]=0x04; 
													RevBuffer[2]=0x04;
													DsInt;		
													Cmd_process();
													OpInt;
												}																			
									break;
									//---------------------------------------------------------stop user card
									case 0x03:

												for(systemtemp=0;systemtemp<3;systemtemp++)
												{
													READ_E2PROM(&systemtemp1,SystemNumADD+systemtemp,1);
													if(systemtemp1!= RevBuffer[3+systemtemp])	
													{
														carderrorbyte = 0x27;
														systemflag1|=0x40;
														break;		
													}
												}
												if(systemflag1&0x40)
													break;	
												for(systemtemp=0;systemtemp<3;systemtemp++)
												{
													READ_E2PROM(&systemtemp1,SoftcardPWADD+systemtemp,1);
													if(systemtemp1!= RevBuffer[6+systemtemp])	
													{
														carderrorbyte = 0x29;
														systemflag1|=0x40;
														break;		
													}
												}
												if(systemflag1&0x40)
													break;	
												if(RevBuffer[9]=='s')
												{
													systemtemp = 's';
													WRITE_E2PROM(&systemtemp,BeingUserFlagADD,1);
													READ_E2PROM(&systemtemp,BeingUserFlagADD,1);
													if(systemtemp=='s')								
													{
														//将卡写成无效卡
														RevBuffer[0]=0x09; 
														RevBuffer[1]=0x04; 
														RevBuffer[2]=0x04;
														DsInt;		
														Cmd_process();
														OpInt;
													}
													else
													{
														systemtemp=0xa5;
														WRITE_E2PROM(&systemtemp,BeingUserFlagADD,1);
														carderrorbyte = 0x2a;
														systemflag1|=0x40;
													}
												} 
																	
												break;
												//---------------------------------------------------------无效卡
									case 0x04:
												carderrorbyte = 0x2b;
												systemflag1|=0x40;
												break;

									default:
									break;
								}							
							}
							else	//Read card is error
							{
								systemflag1|=0x40;
							}
						}					
						else  //download password error 
						{
							systemflag1|=0x40;
						}
					}	
					else	//selecet card is error
					{
						systemflag1|=0x40;
					}
				}
				else	//FangChong is error
				{
					systemflag1|=0x40;					
				}
			}	
			else //found card is error 
			{
				systemflag1|=0x40;	
			}
			//-------------------------------------read card error or right 
			if(systemflag1 & 0x40)
			{
				systemflag & 0xbf;                      
				DisplayErrCode(carderrorbyte);
				Delay10KTCYx(250);
				Delay10KTCYx(250);
				UnDYP_CardOn_Flg();	
				ClearNumDpy(1,1);
				LEDCTRL = 1;//CLOSE BACK LED LIGHT		
			}
			else
			{
				DpyRdCardOk();
			}
		}
		//-------------------------------------read card ok into uesr setting function
		if(systemflag & 0x08)
		{

			//some delays
			systemflag &= 0xf7;
			READ_E2PROM(&MtWkSeBRam,MaterWorkStateByteADD,1);//			
			READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);//判断干簧管位置
			switch(systemtemp&0x30)
			{
				case 0x00:panma = 0;	break;
				case 0x10:panma	= 1;	break;
				case 0x20:panma	= 2;	break;
				case 0x30:panma	= 3;	break;
			}
			INTCON3bits.INT3IF = 0; 
			OpSelInt;					
			LcdWheelDisplay();
			DsSelInt;
		}
		//-------------------------------------setting user value ok and wait user kid ok key 
		if(systemflag & 0x01)	
		{
			systemflag &= 0xf7;
			DsInt;
			carderrorbyte = CheckCardIsMove();
			OpInt;
			if(carderrorbyte==0x01)
			{
				systemflag = 0x04;
			}
			else 									//card been moved or card error
			{
				goto CardIsRemove;					//:)		
			}
			
		}
		//-------------------------------------begin use water
		if(systemflag==0x04)
		{
			systemflag &= 0xfb;
//			DPY_Card_YLorJE_Num(CardBalance,0);		//display card YUE
//			DPY_SDZorDJ_Num(SheDinLiang,1);			//display SheDinLiang


			READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
			systemtemp &= 0x0c;
			systemtemp = systemtemp>>2; 
			switch(systemtemp)
			{
				case 0x00:setvalvetime=76;	break;//10s
				case 0x01:setvalvetime=114;	break;//15s
				case 0x02:setvalvetime=152;	break;//20s
				case 0x03:setvalvetime=190;	break;//25s
				default:
						  setvalvetime=190;		  
						  break;
			}
			OpenValve();						  //Open valve
												  //-Timer1 start count , when (valuetime == setvaluetime)
												  //-I/O OPEN and CLOSE reset 0
			//deduct 1 unit water of card vaule 
			counterflag = 0;
			loopcnt = 0;
			systemtemp = 0;
			INTCON3bits.INT1IF=0;
			INTCON3bits.INT2IF=0;
			SIN2INTEN=1;
			SIN1INTEN=1;
			counterflag=0;
			READ_E2PROM(&panma,MaterWorkStateByteADD,1);
			panma &= 0x30;
			panma = panma>>4;
			AddUsingValueOp(panma);
			systemflag1 |= 0x10;			 //for return write card 
			counterflag=0;					 //initalioez counterflag
			//---------------------------------this loop is aboat count value of uesing water
			while(1)
			{
					loopcnt += 1;
					if(loopcnt==10000)
					{
						carderrorbyte=CheckCardIsMove();
						if(carderrorbyte!=0x01)	//card been remove
						{
							timerscnt = 0;
							goto CardIsRemove;
						}
					}

					if(loopcnt==30000)
					{
						timerscnt += 1;
						loopcnt=0;
						ReflashLcdTimeDpy();
					}
					if(timerscnt==10)
					{	
						timerscnt+=1;
						ClearNumDpy(1,1);			//display SheDinLiang
						DPY_SDZorDJ_Num(SheDinLiang,0x01);
//						ClearNumDpy(0,0);		
//						DPY_Card_YLorJE_Num(ShenYuShuiLiang,1);
					}

					if(timerscnt>22)
					{
						timerscnt=0;
						ClearNumDpy(1,1);			//display DJ
						DPY_SDZorDJ_Num(Settingprice,0x00);
//						ClearNumDpy(0,0);
//						DPY_Card_YLorJE_Num(CardBalance,0);
					}

					//-------------------------card remove 
					if(0)
					{
							CardIsRemove:
							InitialFM1702(0);
							CardOffOp();	
							break;		
					}
					
					//-------------------------have counter ?

⌨️ 快捷键说明

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