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

📄 waterctrlv2.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:

//*****************************************************************//
//Name 		:IsSelectCradOk
//Input		:void				
//Output		:unsigned char :0x01:ok
//				 0x03:defeated 
//Function	:
//D.R.P		:QiuHao
//Date			:06.7.05
//*****************************************************************//
unsigned char  IsSelectCradOk(void)
{
		unsigned char tempa;
		RevBuffer[0] = 0x04 ;						 //Load Command
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{							 
		if((RevBuffer[0] == 0x01) && (RevBuffer[1] == 0x00))
			return 0x01;
		}
		return 0x03;
}

//*****************************************************************//
//Name 		:DownLoadm1CradKey
//Input		:unsigned char :sectornum (0-15)
//			:unsigned char :keyab   (0x60 keya || 0x61 keyb)						
//Output	:unsigned char :0x01:download m1 crad key code ok
//		      	0x04:mater is be using and download m1 crad key code defeated 
//				0x05:mater is not be using and download m1 crad key code defeated 
//
//Function	:download m1 crad key code ok
//D.R.P		:QiuHao
//Date		:06.07.05
//*****************************************************************//
unsigned char DownLoadm1CradKey(unsigned char sectornum,unsigned char keyab)
{
		unsigned char tempa;
		RevBuffer[0] = 0x06;
		RevBuffer[1] = keyab;                        //load keya or keyb
		RevBuffer[2] = sectornum;				     //load sector number
		READ_E2PROM(&tempa,BeingUserFlagADD,1);
		if(tempa==0xa5)
		{
			READ_E2PROM(RevBuffer+3,HartCardLoadPWAdd,6);
		}
		else
		{
			RevBuffer[3]=0xff;
			RevBuffer[4]=0xff;
			RevBuffer[5]=0xff;
			RevBuffer[6]=0xff;
			RevBuffer[7]=0xff;
			RevBuffer[8]=0xff;
		}
		DsInt;
		Cmd_process();
		OpInt;		
		for(tempa=100;tempa>0;tempa--)
		{
			if((RevBuffer[0]==1) && (RevBuffer[1]==00))	
				return 0x01;                     //Down load mi crad key ok
		}
		if(tempa==0xa5)	
		{
			return 0x04;
		}
		else
		{
			return 0x09;
		}
}

//*****************************************************************//
//Name 		:RdCdOneBnk
//Input		:unsigned char banknum:which bank in the card
//Output	:unsigned char :0x01:ok
//			0x05:read card is error
//			0x06:read data checksun is error				
//Function	:
//D.R.P		:QiuHao
//Date		:06.12.4
//*****************************************************************//
unsigned char RdCdOneBnk(unsigned char whichbank)
{
		unsigned char tempa=0,tempb=0,tempc=0;		
		RevBuffer[0] = 0x08;
		RevBuffer[1] = whichbank;
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{
			if((RevBuffer[0]== 0x11)&&( RevBuffer[1]==0x00))
				{
					for(tempb=2;tempb<17;tempb++)
					tempc += RevBuffer[tempb]; 
					if(tempc!=RevBuffer[17])        //check bank cs
						return 0x06;                //bank cs error 

					if(whichbank == 4)
					{
							CdBnk4Grp[0] = RevBuffer[2];
							CdBnk4Grp[1] = RevBuffer[3];
							CdBnk4Grp[2] = RevBuffer[4];
							CdBnk4Grp[3] = RevBuffer[5];
							CdBnk4Grp[4] = RevBuffer[6];
							CdBnk4Grp[5] = RevBuffer[7];
							CdBnk4Grp[6] = RevBuffer[8];
							CdBnk4Grp[7] = RevBuffer[9];
							CdBnk4Grp[8] = RevBuffer[10];
							CdBnk4Grp[9] = RevBuffer[11];
							CdBnk4Grp[10] = RevBuffer[12];
							CdBnk4Grp[11] = RevBuffer[13];
							CdBnk4Grp[12] = RevBuffer[14];
							CdBnk4Grp[13] = RevBuffer[15];
							CdBnk4Grp[14] = RevBuffer[16];
							CdBnk4Grp[15] = RevBuffer[17];
					}
					if(whichbank == 5)
					{
							CdBnk5Grp[0] = RevBuffer[2];
							CdBnk5Grp[1] = RevBuffer[3];
							CdBnk5Grp[2] = RevBuffer[4];
							CdBnk5Grp[3] = RevBuffer[5];
							CdBnk5Grp[4] = RevBuffer[6];
							CdBnk5Grp[5] = RevBuffer[7];
							CdBnk5Grp[6] = RevBuffer[8];
							CdBnk5Grp[7] = RevBuffer[9];
							CdBnk5Grp[8] = RevBuffer[10];
							CdBnk5Grp[9] = RevBuffer[11];
							CdBnk5Grp[10] = RevBuffer[12];
							CdBnk5Grp[11] = RevBuffer[13];
							CdBnk5Grp[12] = RevBuffer[14];
							CdBnk5Grp[13] = RevBuffer[15];
							CdBnk5Grp[14] = RevBuffer[16];
							CdBnk5Grp[15] = RevBuffer[17];	 
					}
					if(whichbank == 6)
					{
							CdBnk6Grp[0] = RevBuffer[2];
							CdBnk6Grp[1] = RevBuffer[3];
							CdBnk6Grp[2] = RevBuffer[4];
							CdBnk6Grp[3] = RevBuffer[5];
							CdBnk6Grp[4] = RevBuffer[6];
							CdBnk6Grp[5] = RevBuffer[7];
							CdBnk6Grp[6] = RevBuffer[8];
							CdBnk6Grp[7] = RevBuffer[9];
							CdBnk6Grp[8] = RevBuffer[10];
							CdBnk6Grp[9] = RevBuffer[11];
							CdBnk6Grp[10] = RevBuffer[12];
							CdBnk6Grp[11] = RevBuffer[13];
							CdBnk6Grp[12] = RevBuffer[14];
							CdBnk6Grp[13] = RevBuffer[15];
							CdBnk6Grp[14] = RevBuffer[16];
							CdBnk6Grp[15] = RevBuffer[17];

					}
					return 0x01;
				}
		}
		return 0x05;//return read card is error code

}

//*****************************************************************//
//Name 		:ChkCsSysCrdSerNum
//Input		:void				
//Output	:unsigned char :0x01:ok
//							0x05:read card defeated  
//							0x06:cs error	
//							0x07:system serial number is wrong
//							0x08:crad serial number wrong	
//Function	:
//D.R.P		:QiuHao
//Date		:06.07.05
//*****************************************************************//
/*
unsigned char ChkCsSysCrdSerNum(void)
{
		unsigned char tempa=0,tempb=0,tempc=0;
		RevBuffer[0] = 0x08;
		RevBuffer[1] = 0x04;
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
			{
				if((RevBuffer[0]==0x11)&&(RevBuffer[1]==0x00))
					{
						Delay10TCYx(5);      			//waitting for recevice 16 data
						for(tempb=2;tempb<17;tempb++)
							tempc += RevBuffer[tempb]; 
						if(tempc!=RevBuffer[17])        //check bank cs
							return 0x06;                //bank cs error  
						Bank10dataCS=tempc;             //load cs
						//chcek system number
						READ_E2PROM(Systemnum,SystemNumADD,3);
						if(RevBuffer[2] != Systemnum[0])
							return 0x07;
						if(RevBuffer[3] != Systemnum[1])
							return 0x07;
						if(RevBuffer[4] != Systemnum[2])
							return 0x07;   				//system serial number is error
						READ_E2PROM(&carderrorbyte,BeingUserFlagADD,1);
						if(carderrorbyte==0xa5)
						{
							tempc = 0;
							for(tempb=0;tempb<3;tempb++)
							tempc += RevBuffer[tempb+5]; 
							tempc -= 3;                     //count card number cs
							if(tempc!=RevBuffer[8])
							return 0x08;				//crad serial number is error
							Cardnum[0] = RevBuffer[5];		//load card number
							Cardnum[1] = RevBuffer[6];
							Cardnum[2] = RevBuffer[7];
	   						Cardtype = RevBuffer[9];		//load card type				   																   //          02 test  
	   						Cardcmd = RevBuffer[10];			//load card command
							Settingprice[0] = RevBuffer[14];//load card setting price
							Settingprice[1] = RevBuffer[15];
							Settingprice[2] = RevBuffer[16];  
							GetHalfDJ();                         
 							return 0x01;
						}		  
					}		
			}
		return 0x05;		
}
*/

//********************************************************************//
//Name 		:RdCardMoney
//Input		:void				
//Output	:unsigned char :0x01:ok
//							0x0a:Read card defeated
//							0x0b:bank cs error 
//							0x0c:card residual money keypassword error	
//														
//Function	:
//D.R.P		:QiuHao
//Date		:06.07.05
//********************************************************************//
 /*
unsigned char RdCardMomey(void)
{
	unsigned char tempa=0,tempb=0,tempc=0;
	RevBuffer[0] = 0x08;
	RevBuffer[1] = 0x05;
	DsInt;
	Cmd_process(); 
	OpInt;
	for(tempa=100;tempa>0;tempa--)
		{
			if((RevBuffer[0]==0x11) && (RevBuffer[1]==0x00))
				{
					for(tempa=2;tempa<17;tempa++)
						{
							tempb += RevBuffer[tempa];
						}											//count bank cs
					if(tempb!=RevBuffer[17])
						{
							return 0x0b;
						}
					//load cs to mcu memory#?
//					if(RevBuffer[2]!=CardBalancekey[0])
//							return 0x0c;
//					if(RevBuffer[3]!=CardBalancekey[1])
//							return 0x0c;
//					if(RevBuffer[4]!=CardBalancekey[2])
//							return 0x0c;
//					if(RevBuffer[5]!=CardBalancekey[3])
//							return 0x0c;
					CardBalance[0] = RevBuffer[6];				   //read card balance
					CardBalance[1] = RevBuffer[7];
					CardBalance[2] = RevBuffer[8];
					CardBalance[3] = RevBuffer[9];

							return 0x01;
				}
		}
	return 0x0a;
	
}
*/
//*****************************************************************//
//Name 		:WrCdOneBnk
//Input		:uchar whichbank	
//Output	:unsigned char :0x01:ok
//							0x0d:defected
//								
//Function	:
//D.R.P		:QiuHao
//Date		:06.12.04
//*****************************************************************//
unsigned char WrCdOneBnk(unsigned char whichbank)
{
	unsigned char tempa,tempb=0;
	RevBuffer[0] = 0x09;
	RevBuffer[1] = whichbank;
	if(whichbank ==4)
	{
		RevBuffer[2] = CdBnk4Grp[0];
		RevBuffer[3] = CdBnk4Grp[1];
		RevBuffer[4] = CdBnk4Grp[2];
		RevBuffer[5] = CdBnk4Grp[3];
		RevBuffer[6] = CdBnk4Grp[4];
		RevBuffer[7] = CdBnk4Grp[5];
		RevBuffer[8] = CdBnk4Grp[6];
		RevBuffer[9] = CdBnk4Grp[7];
		RevBuffer[10] = CdBnk4Grp[8];
		RevBuffer[11] = CdBnk4Grp[9];
		RevBuffer[12] = CdBnk4Grp[10];
		RevBuffer[13] = CdBnk4Grp[11];
		RevBuffer[14] = CdBnk4Grp[12];
		RevBuffer[15] = CdBnk4Grp[13];
		RevBuffer[16] = CdBnk4Grp[14];
		RevBuffer[17] = CdBnk4Grp[15];
	}
	if(whichbank ==5)
	{
		RevBuffer[2] = CdBnk5Grp[0];
		RevBuffer[3] = CdBnk5Grp[1];
		RevBuffer[4] = CdBnk5Grp[2];
		RevBuffer[5] = CdBnk5Grp[3];
		RevBuffer[6] = CdBnk5Grp[4];
		RevBuffer[7] = CdBnk5Grp[5];
		RevBuffer[8] = CdBnk5Grp[6];
		RevBuffer[9] = CdBnk5Grp[7];
		RevBuffer[10] = CdBnk5Grp[8];
		RevBuffer[11] = CdBnk5Grp[9];
		RevBuffer[12] = CdBnk5Grp[10];
		RevBuffer[13] = CdBnk5Grp[11];
		RevBuffer[14] = CdBnk5Grp[12];
		RevBuffer[15] = CdBnk5Grp[13];
		RevBuffer[16] = CdBnk5Grp[14];
		RevBuffer[17] = CdBnk5Grp[15];
	}
	if(whichbank ==6)
	{
		RevBuffer[2] = CdBnk6Grp[0];
		RevBuffer[3] = CdBnk6Grp[1];
		RevBuffer[4] = CdBnk6Grp[2];
		RevBuffer[5] = CdBnk6Grp[3];
		RevBuffer[6] = CdBnk6Grp[4];
		RevBuffer[7] = CdBnk6Grp[5];
		RevBuffer[8] = CdBnk6Grp[6];
		RevBuffer[9] = CdBnk6Grp[7];
		RevBuffer[10] = CdBnk6Grp[8];
		RevBuffer[11] = CdBnk6Grp[9];
		RevBuffer[12] = CdBnk6Grp[10];
		RevBuffer[13] = CdBnk6Grp[11];
		RevBuffer[14] = CdBnk6Grp[12];
		RevBuffer[15] = CdBnk6Grp[13];
		RevBuffer[16] = CdBnk6Grp[14];
		RevBuffer[17] = CdBnk6Grp[15];
	}
	READ_E2PROM(&systemtemp1,AD_DE_NumAdd,1);
	systemtemp = CardBalance[0]+CardBalance[1]+CardBalance[2]+CardBalance[3];
	systemtemp -= systemtemp1;
	RevBuffer[6] = systemtemp;
	RevBuffer[11] = systemtemp;
//	RevBuffer[16] = CardUsingTimes;
	for(tempa=2;tempa<17;tempa++)
		tempb += RevBuffer[tempa];
	RevBuffer[17] = tempb;
	DsInt;		
	Cmd_process();
	OpInt;
	if((RevBuffer[0]!=0x01) || (RevBuffer[1]!=0x00))
		return 0x0d;
	return 0x01;
}

//********************************************************************//
//Name 		:CardStopOp
//Input		:void				
//Output		:unsigned char :0x01:ok
//							0x20:card stop options defseted	
//Function	:
//D.R.P		:QiuHao
//Date			:06.07.05
//********************************************************************//
unsigned char CardStopOp(void)
{
	unsigned char tempa;
	RevBuffer[0] = 0x01;
	DsInt;
	Cmd_process();
	OpInt; 
	for(tempa=100;tempa>0;tempa--)
	{
		if((RevBuffer[0] == 0x01) && (RevBuffer[1] == 0x00))
			return 0x01;
	}
	return 0x20;

}

//********************************************************************//
//Name 		:DisplayErrCode
//Input		:unsigned char errcode: error code 				
//Function		:display error code in Number address area (35`38)
//D.R.P		:QiuHao
//Date			:06.07.07
//********************************************************************//
void DisplayErrCode(unsigned char errcode)
{
	unsigned char temppa,tempppa;
	temppa = errcode;
	tempppa = errcode;
	tempppa = (tempppa >> 4) & 0x0f;    //high bit number
	temppa = temppa & 0x0f;				//low bit number           
	Wr1BCDNumToLcd(14 , 35);			//E
	Wr1BCDNumToLcd(19 , 36);			//-
	Wr1BCDNumToLcd(tempppa , 37);		//X
	Wr1BCDNumToLcd(temppa , 38);		//X
}

//********************************************************************//
//Name 		:ClearNumDpy
//Input		:unsigned char WhatNumArea (0-4)
//			0:?(S`A?S`6nGx
//			1:5%<[Ih6(A?Gx
//			2:K.A?Gx
//			3:=p6nGx
//			4:@[<FK.A?Gx
//          :unsigned char WhatflagAera(0-4)
//			0:?(S`A?S`6nGx1j<G
//			1:5%<[Ih6(A?Gx1j<G
//			2:K.A?Gx1j<G
//			3:=p6nGx1j<G
//			4:@[<FK.A?Gx1j<G
//Function	:clear some display area 
//D.R.P		:QiuHao
//Date		:06.07.07
//********************************************************************//
void ClearNumDpy(unsigned char WhatNumArea,unsigned char WhatflagAera)
{
	unsigned char temppb=0,temppc=0;
	if(WhatNumArea==0)
	{
		Wr1BCDNumToLcd(21 , 0);
		Wr1BCDNumToLcd(21 , 1);
		Wr1BCDNumToLcd(21 , 2);
		Wr1BCDNumToLcd(21 , 3);
		Wr1BCDNumToLcd(21 , 4);
		Wr1BCDNumToLcd(21 , 5);
		Wr1BCDNumToLcd(21 , 6);
		Wr1BCDNumToLcd(21 , 7);
	}
	if(WhatNumArea==1)
	{

⌨️ 快捷键说明

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