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

📄 record.c

📁 智能水表程序 来着互联网
💻 C
字号:
//-----------------------------------------------------------------------------
// record.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <string.h>
#include "main/main.h"
#include "ext/x5045.h"
#include "ext/ds1307.h"
#include "rfid/card.h"
#include "misc/general.h"
//-----------------------------------------------------------------------------
// Record Constants Define
//-----------------------------------------------------------------------------
#define RECORD_LEN  		  8
#define RECORD_N_MAX		  60
#define RECORD_STBLOCK		  4
#define RECORD_DONE 		  1
#define CLEAR                 0
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
bit  Record_Auto_Store ( void );
bit  Clear_All_Record  ( void );
char Write_Card_Record ( char * buf, char * key );
//-----------------------------------------------------------------------------
// Record Auto Store Routine
//-----------------------------------------------------------------------------
bit Record_Auto_Store ( void )
{
	STDS1307 idata t;
	STRecord c;

	if ( bMem = x5045_Is_Busy ()) return FALSE;
	ds1307_Read ((char *) &t );
	if (( t.Date == 0x01 || t.Date == 0x06 || t.Date == 0x11 || t.Date == 0x16 ||
          t.Date == 0x21 || t.Date == 0x26 || t.Date == 0x31 ) && t.Hour == 0 ) {;}
	else  return bRecord = CLEAR;

	if ( bRecord == RECORD_DONE ) return bRecord = CLEAR;
	c.Year  = t.Year;	c.Month = t.Month;
	c.Date  = t.Date;	c.Hour  = t.Hour;
	c.Total = r.Total;
	x5045_Read ( Record_n_memAddr, (char *) &f.Record_n, 1 );
	if ( f.Record_n >= RECORD_N_MAX ) f.Record_n = 0;

	x5045_Write_Enable ();
	x5045_Write ( Record_memAddr + f.Record_n * RECORD_LEN, (char*) &c, RECORD_LEN );
	f.Record_n ++;
	x5045_Write ( Record_n_memAddr, (char *) &f.Record_n, 1 );
	return bRecord = RECORD_DONE;
}
//-----------------------------------------------------------------------------
// Clear All Memory Record Routine
//-----------------------------------------------------------------------------
bit Clear_All_Record ( void )
{
	char i;
	char idata buf[2 * RECORD_LEN];

	if ( bMem = x5045_Is_Busy ()) return FALSE;
	memset ( buf, 0, 2 * RECORD_LEN );
	x5045_Write_Enable ();
	for ( i = 0; i < ( RECORD_N_MAX / 2 + 1); i++ )
		x5045_Write ( Record_memAddr + i * 2 * RECORD_LEN, buf, 2 * RECORD_LEN );
	x5045_Write ( Record_n_memAddr, (char *) &f.Record_n, 1 );
	return TRUE;
}
//-----------------------------------------------------------------------------
// Write Card Record Routine
//-----------------------------------------------------------------------------
char Write_Card_Record ( char * buf, char * key )
{
	char i, rtn, block, n;
	char *pkey = key;

		#ifdef CARD_LOAD_nRECORD
	x5045_Read ( Record_n_memAddr, (char *) &f.Record_n, 1 );
	if ( f.Record_n == ZERO ) return FALSE;
	if ( f.Record_n > RECORD_N_MAX ) return FALSE;
	n = f.Record_n / 2 + LSB & f.Record_n;
		#else
	n = RECORD_N_MAX / 2;
		#endif

	block = RECORD_STBLOCK;
	for ( i = 0; i < n; block++ )
	{
		if ( block == 7  || block == 11 || block == 12 || block == 13 || block == 14 ||
			 block == 15 || block == 19 || block == 23 || block == 27 || block == 31 ||
			 block == 35 || block == 39 || block == 43 ) continue;
     							 else if ( block == 47 ) break;
		x5045_Read ( Record_memAddr + i * 2 * RECORD_LEN, buf, 2 * RECORD_LEN );
			#ifndef USE_JMY_MODULE
		if (( rtn = Access_Card_Module ( WRITE_KEY,   block, pkey  )) != TRUE ) return rtn;
			#endif
		if (( rtn = Access_Card_Module ( WRITE_BLOCK, block, buf )) != TRUE ) return rtn;
		memset ( buf + BLOCK_LEN, 0xAA, BLOCK_LEN );
		if (( rtn = Access_Card_Module ( READ_BLOCK,  block, buf + BLOCK_LEN )) != TRUE ) return rtn;
		if ( memcmp ( buf, buf + BLOCK_LEN, BLOCK_LEN )) return Fail( Comp_Err );
		i++;
	}
	return TRUE;
}

⌨️ 快捷键说明

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