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

📄 waterctrlv3.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
					systemtempint1 = loopcnt & 0x1fff;
					if(systemtempint1 == 0x01fff)
					{
						carderrorbyte=CheckCardIsMove();
						if(carderrorbyte!=0x01)						//card been remove
						{
							timerscnt = 0;
							carderrorbyte =0x22;
							goto stopusewater;
						}
					}
					if(loopcnt==29000)
					{
						timerscnt += 1;
						loopcnt=0;

						ReflashLcdTimeDpy(1);
					}
					if(timerscnt==10)
					{	
						timerscnt+=1;	
						if(systemflag2&0x80)	
						{				
							ClearNumDpy(1,1);									//display SheDinLiang
							DPY_SDZorDJ_Num(SheDSL,0x01);
						}
						ClearNumDpy(4,4);
						DPY_LJSLorRQ_Num(LieJSL,1);		//display LieJiLiang
						systemflag4 |= 0x01;
					}

					if(timerscnt>22)
					{
						timerscnt=0;
						ClearNumDpy(1,1);										//display DJ
						DPY_SDZorDJ_Num(DanJ,0x00);
						ClearNumDpy(4,4);
						DPY_LJSLorRQ_Num(systemtime,0)	;	//display date
						systemflag4 &= 0xfe;
					}

					//-------------------user turn on the ON/OFF KEY
					if(systemflag2&0x08)
					{
						systemflag2 &= 0xf7;
						KEYDOWNDS; 
						goto stopusewater;
					}
					//--------------------counter water
					if( countWTRCNT > 0)
					{
						while( countWTRCNT)
						{
							countWTRCNT -= 1;
							AddUsingValueOp();
							WaterWheelStChg();
							RtWrCdCNT+=1;
						}
						ReflhDisplayVal();
						if(systemflag4&0x01)					//reflash LieJiLiang			
						{
							ClearNumDpy(4,4);				//
							DPY_LJSLorRQ_Num(LieJSL,1);
						}	
					}
				
					//--------------------GuanHuanGuang error
					if(cntkeyerr!=0)
					{
						if(cntkeyerr&0x22)
						{
							carderrorbyte = 0x31;	
							cntkeyerr = 0;
							cntorder = 0;
							goto stopusewater;
						}
						if(GuHGERRCNT<12)
						{
							cntkeyerr = 0;
							cntorder = 0;
						}
						else
						{
							GuHGERRCNT = 0;
							carderrorbyte = 0x0c;
							cntkeyerr = 0;
							cntorder = 0;
							goto stopusewater;
						}

					}

					//-------------------return write card
					if(RtWrCdCNT>9)
					{
						RtWrCdCNT = 0;
						systemtemp = CntReturnWr();
						if(systemtemp != 0x01 )
						{
							carderrorbyte = 0x22;
							goto stopusewater;	
						}

					}
					//-------------------user use water stop 
					if(0)		
					{
stopusewater:
						RSTVEL;
						CLVEL;
						UnDPY_Failure_Flg();
						systemflag4 |= 0x04;
						DPY_CloseValve_Flg();

						while(VELSTAOPIN)
						{
							systemflag4 &= 0xfb;
							while( countWTRCNT)
							{	
								countWTRCNT -= 1;
								AddUsingValueOp();
								WaterWheelStChg();
								ReflhDisplayVal();
								ClearNumDpy(4,4);				//
								DPY_LJSLorRQ_Num(LieJSL,1);
							}

							ReflashLcdTimeDpy(1);
						}
						RSTVEL;	
						systemflag4 &= 0xfb;

						while( countWTRCNT)
						{	
							countWTRCNT -= 1;
							AddUsingValueOp();
							WaterWheelStChg();
							systemflag2 &= 0xdf;
							ReflhDisplayVal();		
							ClearNumDpy(4,4);				//
							DPY_LJSLorRQ_Num(LieJSL,1);
						}
		
						systemtemp=CntReturnWr();
						if(systemtemp!=0x01)								//card been remove
						{
							timerscnt = 0;
							carderrorbyte =0x22;
						}
						
						 if(carderrorbyte != 0x22)
						{
							for(systemtemp=0;systemtemp<10;systemtemp++)	//add 50L 	
							{ 
								BCDBytesAdd(CardYE,DanJCnt,5);				//
								BCDBytesSub(YongSL,OPnum3,3);				//Yong Shui Liang add 1unit
								BCDBytesSub(YongJE,DanJCnt,5);				//yong jing E add 1 unit
								BCDBytesSub(LieJSL,OPnum4,5);				//LIeJiShuiLiang add 1 unit
							}
							CntReturnWr();
						}
						else
						{	
							ClearNumDpy(0,0);
							Wr1BCDNumToLcd(23,0);		//C
							Wr1BCDNumToLcd(22,1);    	//a
							Wr1BCDNumToLcd(24,2);      	//r
							Wr1BCDNumToLcd(13,3);		//d
							Wr1BCDNumToLcd(19,4);		//-
							Wr1BCDNumToLcd(0,5);		//o
							Wr1BCDNumToLcd(25,6);		//u								Wr1BCDNumToLcd(31,7);		//t
						}
						ReflhDisplayVal();
						ClearNumDpy(4,4);
						DPY_LJSLorRQ_Num(LieJSL,1);
						ReflashLcdTimeDpy(1);
						if(carderrorbyte != 1)
						{
							ClearNumDpy(1,1);
							DisplayErrCode(carderrorbyte);
							carderrorbyte = 0;
						}
						FM1702PWROFF;
						Delay10KTCYx(255);		// 0.16s
						Delay10KTCYx(255);		// 0.16s
						Delay10KTCYx(220);		// 0.16s
						WRITE_E2PROM(LieJSL,LieJiShuiLiangADD,5,0);

						for(systemtemp=4;systemtemp>0;systemtemp--)
						{
							ClearNumDpy(0,0);
							ClearNumDpy(2,2);
							ClearNumDpy(3,3);
							ReflashLcdTimeDpy(1);
							Delay10KTCYx(160);		// 0.16s
							DPY_Card_YLorJE_Num(CardYE,0);
							DPY_SLorJE_Num(YongSL,0);
							DPY_SLorJE_Num(YongJE,1);
							ReflashLcdTimeDpy(1);
							Delay10KTCYx(160);		// 0.16s
						}
						ClearNumDpy(0,0);
						Wr1BCDNumToLcd(0,1);
						Wr1BCDNumToLcd(25,2);
						Wr1BCDNumToLcd(14,3);
						Wr1BCDNumToLcd(10,4);
						Delay10KTCYx(0);
						Delay10KTCYx(0);
						ClearNumDpy(0,0);
						ClearNumDpy(1,1);
						ClearNumDpy(2,2);
						ClearNumDpy(3,3);
						ClearNumDpy(4,4);
						ClearNumDpy(5,5);
						LEDCTRL = 0;				//CLOSE BACK LED LIGHT
						UnDYP_CardOn_Flg();
						UnDPY_Failure_Flg();
						Dsdisplay();
						systemflag |= 0x10;			//set flag to note 							
						CLOUT1;
						CLOUT2;
						SIN1INTDS;
						SIN2INTDS;
						CLR_INT0F;
						CLR_INT1F;
						KEYSELDS;
						KEYONOFFDS;
						KEYDOWNDS;
						KEYUPDS;
						break;	
					}		
			}			
		}
		//-------------------------------------save user note and error manage        
		if(systemflag & 0x10)
		{
			systemflag &= 0xef;
			WeOneCnToE2();	
			systemflag4 |= 0x08;	
		}

		//-------------------------------------recevice whole frame from RS485?
		if(systemflag & 0x40)//
		{
			systemflag &= 0xbf;
		}

		//------------------------------------is velev close??
		if(systemflag4 & 0x08)
		{
			systemflag4 &= 0xf7;
			if(VELSTAOPIN)
			{
				CLVEL;
				while(VELSTAOPIN);
				RSTVEL;
				OPVEL;
				Delay10KTCYx(10);
				RSTVEL;
			}
			systemflag3 |= 0x01;
		}
		//-----------------------------------go to sleep
		if(systemflag3 &= 0x01)
		{
			systemflag3 &= 0xfe;
			KEYUPEN;
			KEYDOWNEN;
			KEYONOFFDS;
			KEYSELDS;	
			countWTRCNT = 0;	
			Sleep();	
		}
		//------------------------------------------------------
	}
}







//*****************************************************************//
//Name 		:InitialPort
//Input		:void
//Output	:void
//Function	:This function initialize all mcu i/oport 
//D.R.P		:QiuHao
//Date		:06.06.05
//*****************************************************************//
void InitializeSystem(void)
{	
	INTCONbits.GIE=0;	
	INTCONbits.PEIE  = 0;

	//--------------------Close COMPARTOR MOUDLE
	CMCON = 0xff; 		
	CVRCON = 0x00;
	
//-----------------------FM1702 Using I/O Port
	/*	DS1302   */
	SETDSCLK;
	SETDSRST;
	SETDSDA;
	/*	AT24C1024	*/ 
	SETE2WP;
	SETE2CLK;
	SETE2DA;
	/*	MOTOR	DREVIC	*/
	SETCLOSE;
	SETOPEN;
	SETVELSTAOP;
	SETVELSTACL;
	SETMTRDET_ANIN;
	/*	SIN1~3	*/
	SETSIN1;
	SETSIN2;	
	SETSIN3;
	SETSOUT1;
	SETSOUT2;
	SETSOUT3; 
	/*	USER KEY	*/
	SETKEYDOWN;	 
	SETKEYUP;
	SETKEYONOFF;
	SETKEYSEL;
	KEYONOFFDS	;
	KEYSELDS;
	KEYUPDS;
	KEYDOWNDS;
	
	SETKBINT;
	/*	HT1623 LCD DISPLAY	*/
	SETLEDCTRL	;
	SETLCDCS;
	SETLCDRD;
	SETLCDRW;
	SETLCDDA;
	/*	FM1702 R/W CARD DEVICE	*/
	SETHQCCLK;
	SETHQCMN;
	SETHQCDI;
	SETHQCDO;
	SETHQCRST;
	SETHQCPWRCTRL;
	DSFM1702IO;	
		
	/*	TC35i  R/T SMS DEVICE	*/
	SETGSMPWRCTRL;
	SETPD;
	SETIGT;
	SETDTETXD;
	SETDTERXD;
	/*	buzzer	*/
	SETBZ;
	/*	PRESSURE DETECT	*/
	SETYLDET_ANIN;
	SETYLPWRCTRL;
	/*	UART1	*/
	SETTXD1;
	SETRXD1;
	
	DSUART1485IO;

	/*	SOLAD battery charge up CONTRL	*/
	SETCDCTRL;
	/*	Power Voltage detect	*/
	SETPWRDET_ANIN;
	/*	SOLAD battery Voltage detect	*/
	SETSPWRDET_ANIN;
	/*	Temputer detect	*/
	SETTEMPUTERDET_ANIN;
	/*	Temputer2 detect	*/
	SETTEMPUTER2DET_ANIN;


//-----------------------Pic18f6720 device
	/*	A/D Conversion Setting	*/ 
	ADCON0bits.ADON = 0;				//close AD moudule
	PIE1bits.ADIE = 0;					//disable AD Interrupt
	ADCON1bits.VCFG1 = 0;				//use vcc and vss for Vref 
	ADCON1bits.VCFG0 = 0;
	ADCON1bits.PCFG3 = 1;				//AN0~AN6 available
	ADCON1bits.PCFG2 = 0;
	ADCON1bits.PCFG1 = 0;
	ADCON1bits.PCFG0 = 0;

//	ADCON2	bits.ADCS2 = 1;				//4uS a bit
	ADCON2bits.ADCS1 = 1;
	ADCON2bits.ADCS0 = 0;
 
	/*   close o/i	  */
	SETSIN3OUT;
	SIN3INTDS;
	SIN3OUT=0;
	SOUT3OUT = 0;
//	PDOUT = 0;
//	IGTOUT = 0;	
//	DTETXDOUT = 0;	
//	DDRGbits.RG1 = 0;
//	DTERXDOUT = 0;	
//	BZOUT = 0;
//	SETTXD1OUT;
//	TXD1OUT = 0;
//	DDRCbits.RC7 = 0;	
//	RXD1OUT = 0;	
//	HWPWCTRL = 0;	
//	RS485RT = 0	;
//	HW38KOUT = 0;

	/*	UART1 for infrared ray	*/ 
/*
	SPBRG1 = 207;						//1.2Kbit/s
	//Sent mode
	TXSTA1bits.SYNC = 0;					//ASYN mode
	TXSTA1bits.BRGH = 0;					//Low buad reta Mode
	TXSTA1bits.TXEN = 1;                     		//TX enialbe
	RCSTA1bits.CREN = 1;					//Continuum receive enialbe
	RCSTA1bits.SPEN = 1;                 		//Serial port1 enabled.
	PIE1bits.TX1IE = 0;
	IPR1bits.TX1IP = 0; 
	IPR1bits.RC1IP = 0;					//Low prionty int
	PIE1bits.RC1IE = 1;	
*/
	/*	UART2 for GSM TC35i	*/ 
/*								

	SPBRG2 = 25;						// 25:= 9.6Kbit/s
	//Sent mode
	TXSTA2bits.SYNC = 0;					//ASYN mode
	TXSTA2bits.BRGH = 0;					//Low buad reta Mode
	TXSTA2bits.TXEN = 1;                             //TX enialbe
	RCSTA2bits.CREN = 1;					//Continuum receive enialbe
	RCSTA2bits.SPEN = 1;          	             	//Serial port2 enabled.
	PIE3bits.TX2IE	=  0;
	IPR3bits.TX2IP	=  0;
	PIE3bits.RC2IE	=  1;
	IPR3bits.RC2IP	=  0;
*/
	/*	timer0	*/ 
/*

	//Do 1s timer for system	display
	T0CONbits.TMR0ON	= 0;
	T0CONbits.T08BIT	= 0;				//16bit timer
	T0CONbits.T0CS		= 0;
//	T0CONbits.T0SE		= 0;
	T0CONbits.PSA		= 0;
	T0CONbits.T0PS2	= 1;					//64:1	
	T0CONbits.T0PS1	= 0;
	T0CONbits.T0PS0	= 1;
	INTCONbits.TMR0IF	= 0;				//Clear interrupt flag
	INTCON2bits.TMR0IP	= 0;				//low  interrupt pironty
	TMR0L	= 0x00; 
	TMR0H	= 0x00;
	INTCONbits.TMR0IE	= 0;				//Enable interrupt Timer0
*/
	/*	RBINT	*/
 	SETRBINTIP;
	IBINTDS;
	CLR_RBINTF;

	RSTVEL;
	while(VELSTAOPIN)
	{
		CLVEL;
	}
	RSTVEL;

⌨️ 快捷键说明

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