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

📄 waterctrl.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
//
//
#include "p18f6720.h"	                			//PIC18F6720 Head File	
#include "18f6720PinDef.h"
#include "delays.h"		                 		//soft delay Head Flie
						                 		//Delay1TCY();  delay one TCY
                                        			 	//Delay10TCYx(uchar t); (255~0)*10TCY 
						                 		//.....100........ 
                                                           	//.....1K.........
 					                 	 		//.....10K........
						                 		//if uchar t = 0  that delay time = 2560000tCY

#define		uchar			unsigned char
#define		uint			unsigned int	
#define		Delay5tcy()		Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY()


#define		SIN1INTEN		INTCON3bits.INT2IE 
#define	 	SIN2INTEN		INTCON3bits.INT1IE 
#define		DsInt			do{ INTCONbits.PEIE  = 0; INTCONbits.GIE = 0;}while(0)
#define		OpInt			do{	INTCONbits.PEIE  = 1; INTCONbits.GIE = 1;}while(0) 
#define		OpOkKeyInt		INTCONbits.INT0IE = 1	
#define    	 DsOkKeyInt		INTCONbits.INT0IE = 0
#define		OpSelInt		INTCON3bits.INT3IE = 1
#define 		DsSelInt			INTCON3bits.INT3IE = 0
#define		RunTimer0		T0CONbits.TMR0ON = 1
#define     	StopTimer0		T0CONbits.TMR0ON = 0   
#define		RunTimer1		T1CONbits.TMR1ON = 1				 
#define		StopTimer1		T1CONbits.TMR1ON = 0
#define 		RunTimer3		T3CONbits.TMR3ON = 1
#define		StopTimer3		T3CONbits.TMR3ON = 0


			
//////
#define FM1702_OK		    			0		// U}H7 
#define FM1702_NOTAGERR			1		// N^?( 
#define FM1702_CRCERR				2		// ?(F,CRCP#Qi4mNs 
#define FM1702_EMPTY				3		// J}V5Rg3v4mNs 
#define FM1702_AUTHERR			4		// QiV$2;3I9& 
#define FM1702_PARITYERR			5		// ?(F,FfE<P#Qi4mNs 
#define FM1702_CODEERR			6		// M(Q64mNs(BCCP#Qi4m) 
#define FM1702_SERNRERR			8		// ?(F,PrAP:E4mNs(anti-collision 4mNs) 
#define FM1702_SELECTERR			9		// ?(F,J}>]3$6HWV=Z4mNs(SELECT4mNs) 
#define FM1702_NOTAUTHERR		10		// ?(F,C;SPM(9}QiV$ 
#define FM1702_BITCOUNTERR		11		// 4S?(F,=SJU5=5DN;J}4mNs 
#define FM1702_BYTECOUNTERR		12		// 4S?(F,=SJU5=5DWV=ZJ}4mNs=v6A:/J}SPP' 
#define FM1702_RESTERR			13		// 5wSCrestore:/J}3v4m 
#define FM1702_TRANSERR			14		// 5wSCtransfer:/J}3v4m 
#define FM1702_WRITEERR			15		// 5wSCwrite:/J}3v4m 
#define FM1702_INCRERR			16		// 5wSCincrement:/J}3v4m 
#define FM1702_DECRERR			17		// 5wSCdecrement:/J}3v4m 
#define FM1702_READERR			18		// 5wSCread:/J}3v4m 
#define FM1702_LOADKEYERR		19		// 5wSCLOADKEY:/J}3v4m 
#define FM1702_FRAMINGERR		20		// FM1702V!4mNs 
#define FM1702_REQERR				21		// 5wSCreq:/J}3v4m 
#define FM1702_SELERR				22		// 5wSCsel:/J}3v4m 
#define FM1702_ANTICOLLERR		23		// 5wSCanticoll:/J}3v4m 
#define FM1702_INTIVALERR			24		// 5wSC3uJ<;/:/J}3v4m 
#define FM1702_READVALERR		25		// 5wSC8_<66A?iV5:/J}3v4m 
#define FM1702_DESELECTERR		26
#define FM1702_CMD_ERR			42		// C|An4mNs 
////////////////////////////////////////////////////////////////////
//FM1702<D4fFw6(Re 
#define Page_Sel				0x00	// R3P4<D4fFw 
#define Command				0x01	// C|An<D4fFw 
#define FIFO					0x02	// 64WV=ZFIFO;:3e5DJdHkJd3v<D4fFw 
#define PrimaryStatus			0x03	// 7"IdFw=SJUFw<0FIFO5DW4L,<D4fFw1 
#define FIFO_Length				0x04	// 51G0FIFODZWV=ZJ}<D4fFw 
#define SecondaryStatus		0x05	// 8wVVW4L,<D4fFw2 
#define InterruptEn				0x06	// VP6OJ9D\/={V9<D4fFw 
#define Int_Req					0x07	// VP6OGkGs1jJ6<D4fFw 
#define Control					0x09	// ?XVF<D4fFw 
#define ErrorFlag				0x0A	// 4mNsW4L,<D4fFw 
#define CollPos					0x0B	// 3eM;<l2b<D4fFw 
#define TimerValue				0x0c	// 6(J1Fw51G0V5 
#define Bit_Frame				0x0F	// N;V!5wU{<D4fFw 
#define TxControl				0x11	// 7"KM?XVF<D4fFw 
#define CWConductance			0x12	// Q!Tq7"Id=ETX1:MTX27"IdLlO_5DWh?9 
#define ModConductance		0x13	// 6(ReJd3vG}6/Wh?9 
#define CoderControl			0x14	// 6(Re1`BkD#J=:MJ1VSF5BJ 
#define DecoderControl			0x1a	// =bBk?XVF<D4fFw 
#define RxControl1				0x19	// =SJUTvRf?XVF
#define RxControl2				0x1e	// =bBk?XVF<0Q!Tq=SJUT4 
#define RxWait					0x21	// Q!Tq7"Id:M=SJUV.<d5DJ1<d<d8t 
#define ChannelRedundancy		0x22	// RFM(5@<lQiD#J=IhVC<D4fFw 
#define CRCPresetLSB			0x23
#define CRCPresetMSB			0x24
#define MFOUTSelect			0x26	// mf OUT Q!TqEdVC<D4fFw 
#define TimerClock				0x2a	// 6(J1FwV\FZIhVC<D4fFw 
#define TimerControl				0x2b	// 6(J1Fw?XVF<D4fFw 
#define TimerReload				0x2c	// 6(J1Fw3uV5<D4fFw 
#define TypeSH					0x31	// IO:#1jW<Q!Tq<D4fFw
#define TestDigiSelect			0x3d	// 2bJT9\=EEdVC<D4fFw 
#define FM1702HARTPD			HQCRST=1// =xHkS2<~5u5gD#J=	
#define FM1702HARTPO			HQCRST=0// MK3vS2<~5t5gD#J=

//-------------------------- E2prom Memory Map Define-----------------------------//

#define SystemNumADD					0x0000				//0x00~0x02  : 3 byte system serail number		
#define BeingUserFlagADD					0x0003				//==0xa5     : this mater is ragister for system  	
																//=='other'	 : dosen`t ragister for system 	
#define	HartCardLoadPWAdd			0x0004				//0X04~0X09  : 6 BYTE hart card PASSWORD
#define SoftcardPWADD 					0x000a				//0x0a~0x0c	 : 3 BYTE software card password
#define AD_DE_NumAdd					0x000d				//0x0d       : Card Data Checksum Add Number
#define	CurrentPriceADD				0x000e         	       //0x0e~0x10  : 3 Bytes Current water Price 
#define	CurrentStartUsingDateADD	0x0011     			//0x11~0x16  : 6 Byte BCD Number year mth day hur min sec

#define	MaterWorkStateByteADD  		0x0012      		//bit[7]-------6LPEM(Q6FpSCN;        \\1:FpSC 0:={SC
															//bit[6]-------?(VPS`6nBCDBkPTVJ     \\1:T*   0:A"7=CW				
															//bit[5:4]-----8I;I9\N;VC            \\00:1000L
															//				   \\01:100L
															//				   \\10:10L
															//				   \\11:1L
															//bit[3:2]-----?*9X7'J1<d            \\00:J1<d15S
															//				   \\01:J1<d20S
															//				   \\10:J1<d25S
															//				   \\11:J1<d30S
															//bit[1]-------JG7qFpSCT$IhA?D#J=    \\1:FpSC 0:={SC
															//bit[0]-------0
//#define CurrentCardUsingTimes		0x13        			//
//#define	
//#define
//#define


//************************************* Functoin Statement *************************************//
//System initialize
void InitializeSystem(void);
//HT1623 DRV
extern void InitHT1623Port(void);	
extern unsigned char RdHT1623OneByte(unsigned char Id_addr);
extern void WrHT1623OneByte(unsigned char Toid_addr,unsigned char Todata);	
extern void SentCmdToHT1623(unsigned char ht1623cmd);
void Endisplay(void);
//FM1702 SPI DRV
extern unsigned char SpiRev(void);
extern void SpiSend(unsigned char var);
extern unsigned char SPIRead(unsigned char SpiAddress);
extern void SPIWrite(unsigned char SpiAddress,unsigned char dat);
//FM1702 DRV
extern void InitialFM1702(unsigned char mode);
extern void Set_BitFraming(unsigned char row, unsigned char col);
extern unsigned char Clear_FIFO(void);
extern void Write_FIFO(unsigned char count, unsigned char *buff);
extern unsigned char Read_FIFO(unsigned char *buff);
extern unsigned char Judge_Req(unsigned char *buff);
extern unsigned char Check_UID(void);
extern void Save_UID(unsigned char row, unsigned char col, unsigned char length);
extern unsigned char Command_Send(unsigned char count,unsigned char *buff,unsigned char Comm_Set);
extern unsigned char Read_E2(unsigned char lsb,unsigned char msb,unsigned char count,unsigned char *buff );
extern unsigned char Write_E2(unsigned char lsb,unsigned char msb,unsigned char count,unsigned char * buff );
extern unsigned char MIF_Halt(void);
extern char M500HostCodeKey(unsigned char *uncoded,signed char *coded);
extern unsigned char Load_keyE2_CPY(unsigned char Secnr, unsigned char Mode);
extern unsigned char Request(unsigned char mode);
extern unsigned char AntiColl(void);
extern unsigned char Select_Card(void);
extern unsigned char Authentication(unsigned char *UID, unsigned char SecNR, unsigned char mode);
extern unsigned char MIF_READ(unsigned char *buff, unsigned char Block_Adr);
extern unsigned char MIF_Write(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Increment(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Decrement(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Restore(unsigned char Block_Adr);
//extern unsigned char HL_Active(unsigned char Block_Adr, unsigned char Mode);
//extern unsigned char MIF_Initival(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char HL_Read(unsigned char *buff, unsigned char Block_Adr, unsigned char Mode);
//extern unsigned char HL_Write(unsigned char *buff, unsigned char Block_Adr, unsigned char Mode);
//
unsigned char IsFindCard(void);
unsigned char IsSelectCradOk(void);
unsigned char IsConflictOk(void);
unsigned char DownLoadm1CradKey(unsigned char sectornum,unsigned char keyab);	   //check M1 RFcrad hart sactor1 6byte keyword 
unsigned char ChkCsSysCrdSerNum(void);     //check crad bank1 cs ,system serial number ,crad cs
unsigned char RdCardMomey(void);
unsigned char CardStopOp(void);
void Cmd_process(void);
//at24c512
void E2PRON_START (void);
void E2PROM_STOP (void);
unsigned char MCU_R_ACK (void);
void MCU_T_ACK (void);
void MCU_T_NOACK (void);
void MCU_T_1BYTE (unsigned char temp);
unsigned char MCU_R_1BYTE (void);
void WRITE_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char n);
void READ_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char n);
void WRITE_1_BYTE_E2PROM (unsigned char *mcu_ramadd,unsigned int e2promadd);
void READ_1_BYTE_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd);

//Value cation
void OpenValve(void);
void CloseValve(void);

//LCD Display Flsg
void OneLcdFlagSET(unsigned char dpy_memory);
void OneLcdFlagClear(unsigned char dpy_memory);

void DYP_OpenValve_Flg(void);
void DPY_CloseValve_Flg(void);
void UnDPY_Valve_FLg(void);

void DYP_Failure_Flg(void);
void UnDPY_Failure_Flg(void);

void DYP_CardOn_Flg(void);
void UnDYP_CardOn_Flg(void);

void DPY_0Pow_Flg(void);
void DPY_1Pow_Flg(void);
void DPY_2Pow_Flg(void);
void DPY_3Pow_Flg(void);

void DPY_Full_SigleLv_Flg(void);
void DPY_Half_sigleLv_Flg(void);
void UnDPY_Sigle_Flg(void);

void DPY_WaterWheelSt1(void);
void DPY_WaterWheelSt2(void);
void DPY_WaterWheelSt3(void);
void WaterWheelStChg(void);

void DPY_CardYL_Area(void);     				//?(S`A?   !#   M2
void DPY_CardJE_Area(void);					//?(=p6n   !#   T*
void UnDPY_CardJEorYL_Area(void);

void DPY_SL_Area(void);		    				//K.A?     !#   M2
void UnDPY_SL_Area(void);

void DPY_LJSL_Area(void);       				//@[<FK.A?  !#   M2
void UnDPY_LJSL_Area(void);

void DPY_DateT(void);           					//20  -  - 
void UnDPY_DateT(void);

void DPY_SDL_Area(void);						//Ih6(A?    !#   M2
void DPY_DJ_Area(void);						//5%<[      !#   T*
void UnDPY_DJorSDL_Area(void);

void DPY_JE_Area(void);         					//=p6n      !#   T*
void UnDPY_JE_Area(void);

void DPY_Time_Area(void);					//  :    :  
void UnDPY_Time_Area(void);

//IniTialoze LCD Display
void InitLcdDpy(void);
//clear LCD Display
void ClearLcdMem(void);
//Display One Number to LCD
void Wr1BCDNumToLcd(unsigned char NumToDpy , unsigned char LcdNumNum);
//Display Card YE/YL 
void DPY_Card_YLorJE_Num(unsigned char * databuf,unsigned char dpy_type);
//Display meter use ShuiLiang Jine
void DPY_SLorJE_Num(unsigned char * databuf,unsigned char dpy_type);
//Display meter Setting-price or setting value
void DPY_SDZorDJ_Num(unsigned char * databuf1,unsigned char dpy_type1);

void DisplayErrCode(unsigned char errcode);

void ClearNumDpy(unsigned char WhatNumArea,unsigned char WhatflagAera);
//Clear one of five Number display area
 
void LcdWheelDisplay(void);
//
void DypWaitSetSDST(unsigned char tempdyptype,unsigned char tempdpyst);
//
unsigned char UserSettingValue(unsigned char * whichtypedatabuf);
//
void ClearRamValue(void);
//
extern unsigned char CheckCardIsMove(void);
//
void BCDBytesAdd(unsigned char *source,unsigned char *target,unsigned char length);
//
unsigned char  BCDBytesSub(unsigned char *source,unsigned char *target,unsigned char length);
//
//void Arithmetic_ShenYuShuiLiang(void);
//
unsigned char HexNumGuptoBcd(unsigned char * HexNumGup,char Guplth);
//
void AddUsingValueOp(unsigned char waterunit);
//
void GetHalfDJ(void);
//
void CardOffOp(void);
//
unsigned char WrCdMomey(unsigned char whichbank);
//
unsigned char ReadCardOneBank(unsigned char banknum);
//
void DpyRdCardOk(void);

//DS1302
extern void ResetDs(void);
extern void OutByte(unsigned char outdata);
extern unsigned char InByte(void);
extern void WriteByteDs(unsigned char addr,unsigned char outdata);
extern unsigned char ReadByteDs(unsigned char addr);
extern void WriteTime(unsigned char * time);
extern void ReadTime(unsigned char * time);
extern void En_dswork(void);
void ReflashLcdTimeDpy(void);
//Serial port
void Uart1senddata(unsigned char num , unsigned char *dpoint);	//Uart1 sent datas *
void Uart2senddata(unsigned char num , unsigned char *dpoint);	//Uart2 sent datas *
void Uart1RevInt(void);
//Interruot ISR 
//******************** Interrup ISR statement *********************//
void		interrupth(void);						
#pragma		code Vector=0x08
void    	vector(void)
  {
			_asm GOTO interrupth _endasm
  }
//#pragma		interrupt interrupth save=PROD,PRODL,PRODH,TBLPTRL,TBLPTRH

//*****************************************************************//
void		interruptl(void);													
#pragma		code atlowVector=0x18
void 		atlowVector(void)
  {
			_asm GOTO interruptl _endasm
  }	
#pragma 	code
//#pragma		interruptlow interruptl save=PROD,PRODL,PRODH,TBLPTRL,TBLPTRH
//*****************************************************************//


//************************************** Variable statement  ***********************************// 
//unsigned char KEY_A[6] = {'0','v','c','w','q','W'};   	      		       //s50 card keyworda A
																       	//hex: 0x48 0x76 0x63 0x77 0x71 0x57			
unsigned char KEY_B[6];								  	          	       //s50 card keyworda B
extern unsigned char RevBuffer[36];								       //Command data r/t buffer
extern unsigned char UID[5];									              //S/N
extern unsigned char Secnr;				    		    		   			//Card Secnr  
extern unsigned char tagtype[2];			                       				//card
//-----------------------------------------------------------------//
	   unsigned char systemflag = 0x00;
//		0x80	set 1		recevice whole frame from RS485
//		0x40	set 1		recevice whole frame from GSM
//		0x20	set 1		water counter one unit 
//		0x10	set 1		GuangHuangGuan turn on flager 
//		0x08	set 1		user card ok
//		0x04	set 1		user begin use water 
//		0x02	set 1		user will setting ues value
//		0x01	set 1		user sure to setting use value

	   unsigned char systemflag1 = 0x00;
//      0x01     set1        key 'ok' is on 
//	   0x02     set1		key 'selecet' is on
//	   0x04     set1		key '<' is on
//	   0x08     set1		key '>' is on  
//      0x10     set1		DEC one unit water value,must write to card
//	   0x20     set1		user setting valua is over
//	   0x40     set1		Read card error flag
//	   0x80     set1
//
																						
	   unsigned char com1bytebuf;								  		//
	   unsigned char com1bufaerapointer=0;						       //			
	   unsigned char com1bytecnt = 0;
	   unsigned char com1cmdlth;
extern unsigned char systemtime[7];									//rtc time datatype[year,mon,week,day,hour,min,sec] 
	   unsigned char systemtemp;
	   unsigned char systemtemp1;
	   unsigned char counterflag;
	   unsigned int  timerscnt;
	   unsigned char timer3counter;
	   unsigned char timer3cntadj;
	   unsigned char wheelcnt1;
	   unsigned char WheelTimes;
	   unsigned char MtWkSeBRam;									//meter current setting
//-------------------------------------------------------------------//
	   unsigned char carderrorbyte;         
//------------------- meter option error code -----------------------//
//	store in value of carderrorbyte
//	0x01 ---- options is Ok
//	0x00 ---- Find card is error
//	0x02 ---- Prevent conflict defeated
//	0x03 ---- Select card defeated
//	0x04 ---- mater is be using and download m1 crad key code defeated 
//	0x05 ---- Read Which data of bank defested
//	0x06 ---- Which Bank data CS error
//	0x07 ---- System serial number cs error
//	0x08 ---- Card Software Password CS error 
//	0x09 ---- mater is not be using and download m1 crad key code defeated 
//	0x0a ---- Card hart password cs error
//	0x0b ---- Card price checksum error
//	0x0c ---- Card YuLiang cs error
//	0x0d ---- Card YuLiang backup cs error 
//	0x0e ---- card momey < 1.0 yuan 
//	0x0f ---- card type error
//	0x20 ---- Card stop option
//	0x21 ---- User setting value erroe
//	0x22 ---- card been removed
//	0x23 ---- Guan Huang Guan error (one of three two tims)
//	0x24 ---- Guan Huang Guan error (all on at same times)
//   0x25 ---- start useing mater is not ok
//	0x26 ---- read/write e2prom error
//	0x27 ---- soft card passwork error
//	0x28 ---- system serial is error
//	0x29 ---- card number is error
//	0x2a ---- Stop mater option is error
//	0x2b ---- card on effect
//
//-----------------------------------------------------------------//                                              

⌨️ 快捷键说明

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