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

📄 waterctrl4-wdt.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
								{
									loopcnt = 0;
									timerscnt++;
								}
								if(timerscnt &0x4f)
								{
									timerscnt ++;
									carderrorbyte=CheckCardIsMove();
									if(carderrorbyte!=0x01)									//card been remove
									{
										KEYDOWNDS;
										KEYUPDS;
										goto tillit1;
									}
									ReflashLcdTimeDpy(1);
								}
								if(timerscnt==50)												//one page display 
								{
									timerscnt ++;
									ClearNumDpy(1,1);
									DPY_SDZorDJ_Num(SheDSL,0x01);
								}
								if(timerscnt==100 )
								{
									timerscnt ++;
									ClearNumDpy(4,4);
									if(systemflag2&0x10)										//display YaLi	 Volt
									{
										DPY_YaLi();
										systemflag2 &= 0xef;
									}	
									else
									{	
										systemflag2 |= 0x10;				
										DPY_Volt();
									}
									systemflag3 &= 0xf7;
								}
								if(timerscnt==150)											//two page display
								{
									timerscnt ++;
									ClearNumDpy(1,1),
									DPY_SDZorDJ_Num(DanJ,0x00);

								}
								if(timerscnt==200 )
								{
									timerscnt =0;
									ClearNumDpy(4,4);										//
									DPY_LJSLorRQ_Num(LieJSL,1);
								}
								if(systemflag2&0x08)
								{
									systemflag &= 0xf7;
									KEYDOWNDS;
									KEYUPDS;
									RevBuffer[0] = 0;
									RevBuffer[1] = 5;
									RevBuffer[2] = 0;
									BCDBytesAdd(SheDSL,RevBuffer,3);
									ClearNumDpy(1,1);										//display SheDinLiang
									DPY_SDZorDJ_Num(SheDSL,0x01);
									goto gonogetwater;
								}
							}
						}
						else
						{	tillit1:
							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								Wr1BCDNumToLcd(31,7);		//t
						}
						ClearNumDpy(4,4);
						DPY_LJSLorRQ_Num(LieJSL,1);
						ReflashLcdTimeDpy(1);
tillit2:
						if(carderrorbyte != 1)
						{
							if(carderrorbyte != 0x22)
							{
								DYP_Failure_Flg();
								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=6;systemtemp>0;systemtemp--)
						{
							ClearNumDpy(0,0);
							ClearNumDpy(2,2);
							ClearNumDpy(3,3);
							ReflashLcdTimeDpy(1);
							Delay10KTCYx(150);		// 0.16s
							DPY_Card_YLorJE_Num(CardYE);
							DPY_SLorJE_Num(YongSL,0);
							DPY_SLorJE_Num(YongJE,1);
							ReflashLcdTimeDpy(1);
							Delay10KTCYx(150);		// 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();
						TURNADOFF;
						ADPWROFF;
						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;
			KEYUPDS;
			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;
	En_dswork();  
	InitHT1623Port();
	InitLcdDpy();
	RSTVEL;
	Delay10KTCYx(255);
	Delay10KTCYx(255);
	while(VELSTAOPIN)
	{
		CLVEL;
	}
	RSTVEL;
	CLR_RBINTF;
	Dsdisplay();

	/*	timer1	*/ 
/*

	//Do 0.131s timer for system Open/Close valve   
	T1CONbits.TMR1ON	= 0;
	T1CONbits.TMR1CS = 0;						//using internal clock
	T1CONbits.T1OSCEN = 0;						//
	T1CONbits.T1CKPS0 = 1;						//1:8 
	T1CONbits.T1CKPS1 = 1;						//
	T1CONbits.RD16 = 1;							//set 16 bit timer
	PIR1bits.TMR1IF   = 0;							//
	IPR1bits.TMR1IP = 0;							//low interrupt pirnoty
	TMR1L = 0x00; 
	TMR1H = 0x00;
	PIE1bits.TMR1IE = 0;
*/

	/*	timer2	*/ 
/*

	//ues for infrared
//	TCON2bits.TMR2ON = 0;
//	TCON2bits.T2CKPS1 = 0;  
//	TCON2bits.T2CKPS0 = 0;						//Fclk/1=4MHz   Tt2 = 0.25uS
//	TCON2bits &= 0x00;							//0.25uS one 
//	PR2 = 26;									//for 38K
//	PR2 = 17;									//for 56K
//	PR2 = 8;										//for 115K
	IPR1bits.TMR2IP = 0;
	PIR1bits.TMR2IF = 0;
	PIE1bits.TMR2IE = 0;
*/

	/*	timer3	*/ 
/*

	//ues for 
	T3CONbits.TMR3ON  = 0;
	T3CONbits.T3CKPS1 = 1;						// 1/4 
	T3CONbits.T3CKPS0 = 0;
	T3CONbits.RD16    = 1;						//16 bit timer
	T3CONbits.TMR3CS  = 0;						//clock from fosc/4	T3CONbits.TMR3ON  = 0;
	IPR2bits.TMR3IP   = 0;						//low interrupt pirnoty
	PIE2bits.TMR3IE   = 0;
	PIR2bits.TMR3IF   = 0;
	TMR3L = 0x00;
	TMR3H = 0x00;
*/

	/*	System Device initialez	*/ 
	InitE2prom();
  	ReadTime(systemtime);
  	WriteTime(systemtime);
//	for(systemtemp =0;systemtemp<40;systemtemp++)
//	{
//		Wr1BCDNumToLcd( 19, systemtemp);
//	}

	READ_E2PROM(&systemtemp,BeingUserFlagADD,1,0);	
	if(systemtemp!=0xa5)
	{
		systemtemp1=0xff;
		for(systemtemp = 0;systemtemp < 6;systemtemp++)
		{
			WRITE_1_BYTE_E2PROM(&systemtemp1,HartCardLoadPWAdd+systemtemp,0);
		}
		Systemnum[0]=0xff;
		Systemnum[1]=0xff;

⌨️ 快捷键说明

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