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

📄 waterctrlv2.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
		Wr1BCDNumToLcd(21 , 35);
		Wr1BCDNumToLcd(21 , 36);
		Wr1BCDNumToLcd(21 , 37);
		Wr1BCDNumToLcd(21 , 38);
		Wr1BCDNumToLcd(21 , 39);
	}
	if(WhatNumArea==2)
	{
		Wr1BCDNumToLcd(21 , 8);
		Wr1BCDNumToLcd(21 , 9);
		Wr1BCDNumToLcd(21 , 10);
		Wr1BCDNumToLcd(21 , 11);
		Wr1BCDNumToLcd(21 , 12);
		Wr1BCDNumToLcd(21 , 13);	
	}
	if(WhatNumArea==3)
	{
		Wr1BCDNumToLcd(21 , 29);
		Wr1BCDNumToLcd(21 , 30);
		Wr1BCDNumToLcd(21 , 31);
		Wr1BCDNumToLcd(21 , 32);
		Wr1BCDNumToLcd(21 , 33);
		Wr1BCDNumToLcd(21 , 34);
	}
	if(WhatNumArea==4)
	{
		Wr1BCDNumToLcd(21 , 14);
		Wr1BCDNumToLcd(21 , 15);
		Wr1BCDNumToLcd(21 , 16);
		Wr1BCDNumToLcd(21 , 17);
		Wr1BCDNumToLcd(21 , 18);
		Wr1BCDNumToLcd(21 , 19);
		Wr1BCDNumToLcd(21 , 20);
		Wr1BCDNumToLcd(21 , 21);
		Wr1BCDNumToLcd(21 , 22);
	}
	if(WhatflagAera==0)
	{
		UnDPY_CardJEorYL_Area();
	}
	if(WhatflagAera==1)
	{
		UnDPY_DJorSDL_Area();
	}
	if(WhatflagAera==2)
	{
		UnDPY_SL_Area();
	}
	if(WhatflagAera==3)
	{
		UnDPY_JE_Area();
	}
	if(WhatflagAera==4)
	{
		UnDPY_LJSL_Area();
	}
}

//********************************************************************//
//Name 		:DypWaitSetSDST
//Input		:unsigned char tempdyptype: 
//									0x00:is setting JinE 
//									0x01:is setting ShuiLiang
//          :unsigned char tempdpyst:
//									0x01:on
//									0x00:off
//Function	:when wait to setting value that display  
//D.R.P		:QiuHao
//Date		:06.07.08
//********************************************************************//
void DypWaitSetSDST(unsigned char tempdyptype,unsigned char tempdpyst)
{
	if(tempdpyst)//if this time is display
	{

		if(tempdyptype == 0x00)
		{
			OneLcdFlagSET(43);//SheDinLiang	
			OneLcdFlagSET(73);//'.'
			OneLcdFlagSET(79);//display 'T*' flag	
			OneLcdFlagClear(77);
		}
		else
		{
			OneLcdFlagSET(43);//SheDinLiang	
			OneLcdFlagSET(73);//'.'
			OneLcdFlagSET(77);//display "M2" flag
			OneLcdFlagClear(79);
		}
	//display 6 bit number are '-'
		Wr1BCDNumToLcd( 19 ,35 );
		Wr1BCDNumToLcd( 19 ,36 );
		Wr1BCDNumToLcd( 19 ,37 );
		Wr1BCDNumToLcd( 19 ,38 );
		Wr1BCDNumToLcd( 19 ,39 );
	}
	else//this is not display
	{
		OneLcdFlagClear(43);
		OneLcdFlagClear(73);
		OneLcdFlagClear(79);
		OneLcdFlagClear(77);
		Wr1BCDNumToLcd( 21 ,35 );
		Wr1BCDNumToLcd( 21 ,36 );
		Wr1BCDNumToLcd( 21 ,37 );
		Wr1BCDNumToLcd( 21 ,38 );
		Wr1BCDNumToLcd( 21 ,39 );
	}
}

//********************************************************************//
//Name 		:UserSettingPrice
//Input		:unsigned char settingtype:0x00:JinE
//				:						   0x01:ShuiLiang
//Output		:unsigned char :	          0x00:setting error
//				     						   0x01:setting ok
//Function	:  
//D.R.P		:QiuHao
//Date			:06.07.11
//********************************************************************//
unsigned char UserSettingValue(unsigned char * whichtypedatabuf)
{
	unsigned int temppii = 0;
	unsigned char tempnumaddr = 35;
    	char selectnum=0;
	unsigned char temo=0;
	KEYSELEN;
	KEYONOFFEN;
	KEYUPEN;
	KEYDOWNEN;
	while(1)
	{
		while(1)  
		{	

			temppii++;
			if(temppii == 20000)
			{
				if(tempnumaddr==35)
				selectnum = (*(whichtypedatabuf))&0x0f;
				if(tempnumaddr==36)
				selectnum = ((*(whichtypedatabuf+1))&0xf0)>>4;
				if(tempnumaddr==37)
				selectnum = ((*(whichtypedatabuf+1))&0x0f);			
				Wr1BCDNumToLcd(selectnum ,tempnumaddr );
				//(* (whichtypedatabuf+(tempnumaddr-34)))
			}
			if(temppii == 40000)
			Wr1BCDNumToLcd(21 ,tempnumaddr );

			if(temppii > 40000)
			temppii = 0;
			//setting next number					//KEYSEL
			if(systemflag2 & 0x02)
			{
				systemflag2 &= 0xfd;
				KEYSELEN;
				KEYONOFFEN;
				KEYUPEN;
				KEYDOWNEN;
				Wr1BCDNumToLcd(selectnum , tempnumaddr);
				selectnum = 0;
				break;	    							//exit this number into next number			
			}     
			//number add 1 KEYUP
			if(systemflag2&0x04)
			{
				systemflag2 &= 0xfb;
				KEYSELEN;
				KEYONOFFEN;
				KEYUPEN;
				KEYDOWNEN;
				selectnum +=1;
				if(selectnum>9)
					selectnum=0;
				//Record user setting value 
				if(tempnumaddr==35)
				*whichtypedatabuf = selectnum;
				if(tempnumaddr==36)
				{
					temo=(*(whichtypedatabuf+1)&0x0f);	
					*(whichtypedatabuf+1) = ((selectnum<<4)+temo);		
				}					
				if(tempnumaddr==37)
				{
					temo=(*(whichtypedatabuf+1)&0xf0);
					*(whichtypedatabuf+1) = (selectnum+temo);
				}
			}
			//number DEC 1 KEYDOWN
			if(systemflag2&0x08)
			{
				systemflag2 &= 0xf7;
				KEYSELEN;
				KEYONOFFEN;
				KEYUPEN;
				KEYDOWNEN;
				selectnum -=1;
				if(selectnum<0)
					selectnum = 9;
				//Record user setting value 
				if(tempnumaddr==35)
				*whichtypedatabuf = selectnum;
				if(tempnumaddr==36)
				{
					temo=(*(whichtypedatabuf+1)&0x0f);	
					*(whichtypedatabuf+1) = ((selectnum<<4)+temo);		
				}					
				if(tempnumaddr==37)
				{
					temo=(*(whichtypedatabuf+1)&0xf0);
					*(whichtypedatabuf+1) = (selectnum+temo);
				}
			}
			//user turn on the 'ok'key
			if(systemflag2&0x01)
			{
				Wr1BCDNumToLcd(selectnum , tempnumaddr);
				selectnum = 0;
				
				if(*whichtypedatabuf==0)
				if(*(whichtypedatabuf+1)<1)
				{	
				systemflag2 &= 0xf0;
					KEYSELDS;
					KEYONOFFEN;
					KEYUPDS;
					KEYDOWNEN;
					return 0x21;				
				}
				systemflag2&= 0xf0;
				KEYONOFFEN;						//if uesr stop use water that turn on this key
				return 0x01;
			}
		}
		tempnumaddr += 1;
		if(tempnumaddr == 38)
		tempnumaddr = 35;				
	}

}

//********************************************************************//
//Name 		:ClearRamValue
//Input		:void
//			:						  
//Output	:void        
//									   
//Function	:clear  
//D.R.P		:QiuHao
//Date		:06.07.11
//********************************************************************//
void ClearRamValue(void)
{	   
	Cardnum[1]=0;
	Cardnum[2]=0;
	Settingprice[0]=0;
	Settingprice[1]=0;
	Settingprice[2]=0;
	CardBalance[0]=0;                   	    //XX XX X.X XX
	CardBalance[1]=0; 
	CardBalance[2]=0; 
	CardBalance[3]=0; 
	ShenYuShuiLiang[0]=0;
	ShenYuShuiLiang[1]=0;
	ShenYuShuiLiang[2]=0;
	ShenYuShuiLiang[3]=0;
	ShuiLiang[0]=0;
	ShuiLiang[1]=0;
	ShuiLiang[2]=0;
	JinE[0]=0;
	JinE[1]=0;
	JinE[2]=0;
	SheDinLiang[0]=0;                     		//0x x.x xx
	SheDinLiang[1]=0; 
	SheDinLiang[2]=0; 
	SheDinJinE[0]=0;
	SheDinJinE[1]=0;
	SheDinJinE[2]=0;
	systemflag=0x00;
	systemflag2 = 0x00;
}


//N*<uIYQi?(TZ2;TZ5DJ1<d#,4K:/J}P^8D:s6(ReTZFM1702.CND<~VP
//********************************************************************//
//Name 		:CheckCardIsMove
//Input		:void
//			:						  
//Output	:unsigned char			0x01:Card is been here
//									0x22:Card is benn remove   
//Function	:check the card is been remove thistime
//D.R.P		:QiuHao
//Date		:06.07.12
//********************************************************************//
/*
unsigned char CheckCardIsMove(void)
{
	unsigned char tempc1,tempc2=0;
	//Read Card 
	RevBuffer[0] = 0x08;
	RevBuffer[1] = 0x04;
	DsInt;
	Cmd_process();
	OpInt;
	if((RevBuffer[0] == 0x11)&&(RevBuffer[1]==0x00))
		return 0x01;
	else
		return 0x22;	
}
unsigned char CheckCardIsMove(void)
{
	
	unsigned char tempch1;
	SPIWrite(CRCPresetLSB,0x63);
	SPIWrite(CWConductance,0x3f);
	SPIWrite(ModConductance,0x3f);
	SPIWrite(ChannelRedundancy,0x0f);
	buff[0] = RF_CMD_READ;
	buff[1] = Block_Adr;
	DsInt;
	tempch1 = Command_Send(2, buff, Transceive);
	OpInt;
	if(tempch1 == 0)
	{
		return 0x22;
	}
	else
	{
		return 0x01;
	}
	
}
*/

//********************************************************************//
//Name 		:BCDBytesAdd
//Input		:unsigned char *source  xx xx xx xx xx xx.....
//			:unsigned char *target	xx xx xx xx xx xx.....	
//			:unsigned char length
//Output	:void
//Function	:source[]+target[]->source[]
//D.R.P		:QiuHao.
//Date		:06.07.14
//********************************************************************//
void BCDBytesAdd(unsigned char *source,unsigned char *target,unsigned char length)
{
	char i0;
	char tmpL,tmpH,tmpC;
	unsigned char tmps_h,tmpt_h,tmps_l,tmpt_l;
	tmpC = 0;								//5MN;5D=xN;
	for (i0 = length-1 ; i0 >= 0; i0--)
	{
		tmps_l = source[i0] & 0x0f;
		tmpt_l = target[i0] & 0x0f;
		tmpL = tmps_l + tmpt_l + tmpC;
		tmpC = 0;
		if (tmpL > 9 )
		{
			tmpL = tmpL - 0xa;
			tmpC = 1;
		}

		tmps_h = source[i0] & 0xf0;
		tmpt_h = target[i0] & 0xf0;
		tmps_h = tmps_h >> 4;
		tmpt_h = tmpt_h >> 4;
		tmpH = tmps_h + tmpt_h + tmpC;
		tmpC = 0 ;
		if (tmpH > 9 )
		{
			tmpH = tmpH - 0xa;
			tmpC = 1;
		}
		tmpH = tmpH << 4;
		source[i0] = tmpH +tmpL;
	}
}	

//********************************************************************//
//Name 		:BCDBytesSub
//Input		:unsigned char *source  xx xx xx xx xx xx.....
//			:unsigned char *target   xx xx xx xx xx xx.....	
//			:unsigned char length
//Output		:int         0x0001: Sub overflow
//					 0x0000: Sub Ok
//Function	:source[]-target[]->source[]
//D.R.P		:QiuHao.
//Date		:06.07.14
//********************************************************************//
unsigned char  BCDBytesSub(unsigned char *source,unsigned char *target,unsigned char length)
{
	char i0;
	char tmpL,tmpH,tmpC;
	char tmps_h,tmpt_h,tmps_l,tmpt_l;
	tmpC = 0;								//5MN;=h=xN;
	for (i0 = length-1 ; i0 >= 0; i0--)
	{	
		tmps_l = source[i0] & 0x0f;
		tmpt_l = target[i0] & 0x0f;
		tmpL = tmps_l - tmpt_l - tmpC;
		if (tmpL<0)
		{
			tmpL = 10 + tmps_l - tmpt_l - tmpC;
			tmpC = 1;
		}
		else tmpC = 0;

		tmps_h = source[i0] & 0xf0;
		tmpt_h = target[i0] & 0xf0;
		tmps_h = tmps_h >> 4;
		tmpt_h = tmpt_h >> 4;
		tmpH = tmps_h - tmpt_h - tmpC;
		if (tmpH < 0 )
		{
			tmpH = 10 + tmps_h - tmpt_h - tmpC;
			tmpC = 1;
		}
		else tmpC = 0;
          		tmpH = tmpH << 4;
		source[i0] = tmpH +tmpL;
	}
	return tmpC;
}

//********************************************************************//
//Name 		:AddUsingValueOp
//Input		:unsigned char :waterunit :water counter pad unit flager 
//Output		:void
//D.R.P		:QiuHao.
//Date		:06.07.17
//********************************************************************//
void AddUsingValueOp(unsigned char waterunit)
{
	unsigned char tempaddvar[3]={0,0,0};
	unsigned char temp1addvar[3]={0,0,0};
	unsigned char temp2addvar[4]={0,0,0,0};
	if(waterunit==0)
	{
		tempaddvar[1]=0x05;				//1m3
		temp1addvar[0]=Settingpricehalf[0];
		temp1addvar[1]=Settingpricehalf[1];
		temp1addvar[2]=Settingpricehalf[2];		
	}
	if(waterunit==1)
	{
		tempaddvar[2]=0x50;				//0.1m3
		temp1addvar[2]|=((Settingpricehalf[2]&0xf0)>>4);
		temp1addvar[2]|=((Settingpricehalf[1]&0x0f)<<4);
		temp1addvar[1]=((Settingpricehalf[1]&0xf0)>>4);
		temp1addvar[0]

⌨️ 快捷键说明

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