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