📄 waterctrlv2.c
字号:
/*--------------------------------------------------------------------------*/
/*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 + -