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

📄 waterctrlv2.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
/*--------------------------------------------------------------------------*/
/*WQ-WC01																	*/
/*																			*/
/*																			*/
/*																			*/
/*																			*/
/*--------------------------------------------------------------------------*/
#include "p18f6720.h"	                 //PIC18F6720 Head File	
#include "PIC18F6720_IO.h"
#include "PIC18F6720_PERIPHERYDEVICE.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 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 SystemE2size				0x007f				
#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]
														//bit[6]			
														//bit[5]
														//bit[4]				  
														//bit[5]				  
														//bit[6]				 
														//bit[7]
#define	MeterNumber 				0x0013        		//0x0013~0x0019	7byte meter serial number
#define	StartTime					0x001a				//0x001a~0x001f



//************************************* 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);
//
void ANALYSE_CARD (void);
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);
//
unsigned char WrCdOneBnk(unsigned char whichbank);
unsigned char RdCdOneBnk(unsigned char whichbank);
unsigned char CntReturnWr(void);
//
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[20];						       //Command data r/t buffer
unsigned char Systemnum[3];									//system serail number
unsigned char Cardnum[3];									//card user serail number 
unsigned char  CdBnk4Grp[16];
unsigned char CdBnk5Grp[16];
unsigned char CdBnk6Grp[16];
extern unsigned char UID[5];							            	//S/N
extern unsigned char Secnr;			 	      		   		     	//Card Secnr  
extern unsigned char tagtype[2];			                       	     	//card
//---------------------------------------------------------------//


	   unsigned char systemflag;
//		0x80	set 1		recevice whole frame from infrared
//		0x40	set 1		recevice whole frame from GSM
//		0x20	set 1		water counter one unit 
//		0x10	set 1		will save use note
//		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 valuem
	   unsigned char systemflag3;
//		0x01	set1		will open velve				reset0		will close velve
//		0x02	set1		fault precaution close velve
//		0x04	set1		user stop use water ,the stop key been turn on
//		0x08	set1		stop use water in gear	
//		0x10	set1		stop use water not in gear (card move outside,disturb,or other case)	
//		0x20	set1		
//		0x40	set1
//		0x80	set1

        unsigned char systemflag2;
//		0x01     	set1        	key 'ok' is on 
//		0x02	set1		key 'selecet' is on
//		0x04	set1		key 'up' is on
//		0x08	set1		key 'down' is on  
//		0x10	set1		card been moved
//		0x20     	set1		setting value is over
//		0x40     	set1		Read card error flag
//		0x80     	set1		setting use water mode

       unsigned char cntkeyerr;	
//		0x01:SIN1 Disturb
//		0x02:SIN1 SIN2 ALL ON
//		0x04:SIN1 ON TWO TIMES
//		0x08:
//		0x10:SIN2 Disturb
//		0x20:SIN2 SIN1 ALL ON
//		0x40:SIN2 ON TWO TIMES
//		0x80:
	unsigned char cntorder;	
									//0x00: initialze state
									//0x01:	sin1 is on
									//0x02:	sin2 is on
									//0x03: 
																									
extern unsigned char systemtime[7];									//rtc time datatype[year,mon,week,day,hour,min,sec] 
	   unsigned char systemtemp;
	   unsigned char systemtemp1;
	   unsigned int    timerscnt;
	   unsigned char timer3counter;
	   unsigned char timer3cntadj;
	   unsigned char wheelcnt1;
	   unsigned char WheelTimes;
	   unsigned char MtWkSeBRam;
                                            
	   unsigned char systemtemp;
	   unsigned int    loopcnt;
	   unsigned char usercardstateB;
									//0x01:  1:	lawless exit at this times befor  0:exit in gear at this times befor
									//0x02:
									//0x04:
									//0x08:
									//0x10:
									//0x20:
									//0x40:
									//0x80:

	   unsigned int   adresult;			//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 ---- 
//	0x24 ---- 
//   	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 no effect
//	0x2c ---- 
//	0x2d ---- 
//	0x2e ---- 
//	0x2f -----
//-----------------------------------------------------------------//  

//water meter value
unsigned char DanJ[4];		//xx.xx xx xx		yuan/m3
unsigned char YongJESL[4];	//xx x.x xx xx		yuan or m3
unsigned char CardYEYL[5];	//xx xx x.x xx xx	yuan or m3
unsigned char SheDJESL[3];	//0x x.x xx		yuan or m3
unsigned char LieJSL[5];		//xx xx xx .xx xx	m3


//------------------------- LCD Number type Tab ----------------------------//
//LcdNum[X]=  B( x   x   x   x   x   x   x   x )
//			     d3  d2  d1  d0  d3  d2  d1  d0
//			     ---HighAddr--   ---LowAddr---
//[0]	'0':     x   1   1   1   0   1   1   1	        HEX: 0x77
//[1]	'1':     x	0   0   1   0   0   1   0           HEX: 0x12
//[2]	'2':	   x	1   1   0   1   0   1   1		 HEX: 0x6b
//[3]	'3':	   x  1   0   1   1   0   1   1		 HEX: 0x5b
//[4]	'4':     x   0   0   1   1   1   1   0	  	 HEX: 0x1e
//[5]	'5':	   x  1   0   1   1   1   0   1		 HEX: 0x5d

⌨️ 快捷键说明

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