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

📄 waterctrlv1.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		// 正确 
#define FM1702_NOTAGERR		1		// 无卡 
#define FM1702_CRCERR		2		// 卡片CRC校验错误 
#define FM1702_EMPTY		3		// 数值溢出错误 
#define FM1702_AUTHERR		4		// 验证不成功 
#define FM1702_PARITYERR	5		// 卡片奇偶校验错误 
#define FM1702_CODEERR		6		// 通讯错误(BCC校验错) 
#define FM1702_SERNRERR		8		// 卡片序列号错误(anti-collision 错误) 
#define FM1702_SELECTERR	9		// 卡片数据长度字节错误(SELECT错误) 
#define FM1702_NOTAUTHERR	10		// 卡片没有通过验证 
#define FM1702_BITCOUNTERR	11		// 从卡片接收到的位数错误 
#define FM1702_BYTECOUNTERR	12		// 从卡片接收到的字节数错误仅读函数有效 
#define FM1702_RESTERR		13		// 调用restore函数出错 
#define FM1702_TRANSERR		14		// 调用transfer函数出错 
#define FM1702_WRITEERR		15		// 调用write函数出错 
#define FM1702_INCRERR		16		// 调用increment函数出错 
#define FM1702_DECRERR		17		// 调用decrement函数出错 
#define FM1702_READERR		18		// 调用read函数出错 
#define FM1702_LOADKEYERR	19		// 调用LOADKEY函数出错 
#define FM1702_FRAMINGERR	20		// FM1702帧错误 
#define FM1702_REQERR		21		// 调用req函数出错 
#define FM1702_SELERR		22		// 调用sel函数出错 
#define FM1702_ANTICOLLERR	23		// 调用anticoll函数出错 
#define FM1702_INTIVALERR	24		// 调用初始化函数出错 
#define FM1702_READVALERR	25		// 调用高级读块值函数出错 
#define FM1702_DESELECTERR	26
#define FM1702_CMD_ERR		42		// 命令错误 
////////////////////////////////////////////////////////////////////
//FM1702寄存器定义 
#define Page_Sel			0x00	// 页写寄存器 
#define Command				0x01	// 命令寄存器 
#define FIFO				0x02	// 64字节FIFO缓冲的输入输出寄存器 
#define PrimaryStatus		0x03	// 发射器接收器及FIFO的状态寄存器1 
#define FIFO_Length			0x04	// 当前FIFO内字节数寄存器 
#define SecondaryStatus		0x05	// 各种状态寄存器2 
#define InterruptEn			0x06	// 中断使能/禁止寄存器 
#define Int_Req				0x07	// 中断请求标识寄存器 
#define Control				0x09	// 控制寄存器 
#define ErrorFlag			0x0A	// 错误状态寄存器 
#define CollPos				0x0B	// 冲突检测寄存器 
#define TimerValue			0x0c	// 定时器当前值 
#define Bit_Frame			0x0F	// 位帧调整寄存器 
#define TxControl			0x11	// 发送控制寄存器 
#define CWConductance		0x12	// 选择发射脚TX1和TX2发射天线的阻抗 
#define ModConductance		0x13	// 定义输出驱动阻抗 
#define CoderControl		0x14	// 定义编码模式和时钟频率 
#define DecoderControl		0x1a	// 解码控制寄存器 
#define RxControl1			0x19	// 接收增益控制
#define RxControl2			0x1e	// 解码控制及选择接收源 
#define RxWait				0x21	// 选择发射和接收之间的时间间隔 
#define ChannelRedundancy	0x22	// RF通道检验模式设置寄存器 
#define CRCPresetLSB		0x23
#define CRCPresetMSB		0x24
#define MFOUTSelect			0x26	// mf OUT 选择配置寄存器 
#define TimerClock			0x2a	// 定时器周期设置寄存器 
#define TimerControl		0x2b	// 定时器控制寄存器 
#define TimerReload			0x2c	// 定时器初值寄存器 
#define TypeSH				0x31	// 上海标准选择寄存器
#define TestDigiSelect		0x3d	// 测试管脚配置寄存器 
#define FM1702HARTPD		HQCRST=1// 进入硬件吊电模式	
#define FM1702HARTPO		HQCRST=0// 退出硬件掉电模式

//-------------------------- 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]-------短信通讯起用位        \\1:起用 0:禁用
												//bit[6]-------卡中余额BCD码性质     \\1:元   0:立方米				
												//bit[5:4]-----干簧管位置            \\00:1000L
												//				   \\01:100L
												//				   \\10:10L
												//				   \\11:1L
												//bit[3:2]-----开关阀时间            \\00:时间15S
												//				   \\01:时间20S
												//				   \\10:时间25S
												//				   \\11:时间30S
												//bit[1]-------是否起用预设量模式    \\1:起用 0:禁用
												//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);     //卡余量   。   M2
void DPY_CardJE_Area(void);		//卡金额   。   元
void UnDPY_CardJEorYL_Area(void);

void DPY_SL_Area(void);		    //水量     。   M2
void UnDPY_SL_Area(void);

void DPY_LJSL_Area(void);       //累计水量  。   M2
void UnDPY_LJSL_Area(void);

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

void DPY_SDL_Area(void);		//设定量    。   M2
void DPY_DJ_Area(void);			//单价      。   元
void UnDPY_DJorSDL_Area(void);

void DPY_JE_Area(void);         //金额      。   元
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

⌨️ 快捷键说明

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