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

📄 save_load.c

📁 用KEIL开发的出租车计费系统
💻 C
字号:
/**************************************************************************
  
						Save & Load Operation
  
	File Name:		Save_Load.c
	Author:			Lin Qian
	Created:		2008/04/28
	Modified:		NO
	Revision: 		1.0
  
***************************************************************************/

#define __SAVE_LOAD
#include "INC\\main.h"
#undef __SAVE_LOAD


// 保存里程数和总价 ******************************
#if SaveDistCost_en
void SaveDistCost (void)
// 功能: 将里程数、总价和停车计时写入EEPROM.
{
	uchar *pDist = (uchar *)(&Dist);	// 里程数地址
	uchar *pTotal = (uchar *)(&Total);	// 总价地址
 
	x24c02_Init();	// 初始化24c02

	//--- 写入里程数 ---
	x24c02_Write(X24C02_0, EEPROM_DIST, *pDist);
	DelayXms(5);
	x24c02_Write(X24C02_0, EEPROM_DIST+1, *(++pDist));
	DelayXms(5);

	//--- 写入总价 ---
	x24c02_Write(X24C02_0, EEPROM_TOTAL, *pTotal);
	DelayXms(5);
	x24c02_Write(X24C02_0, EEPROM_TOTAL+1, *(++pTotal));
	DelayXms(5);

	// --- 写入停车计时 ---
		// Hour
	x24c02_Write(X24C02_0, EEPROM_STOP_HOUR, StopHour);
	DelayXms(5);
		// Min
	x24c02_Write(X24C02_0, EEPROM_STOP_MIN, StopMin);
	DelayXms(5);
		// Sec
	x24c02_Write(X24C02_0, EEPROM_STOP_SEC, StopSec);
	DelayXms(5);
}
#endif

// 读取里程数和总价 ******************************
#if LoadDistCost_en
void LoadDistCost (void)
// 功能: 从24c02中读取里程数、总价和停车计时
{
	uchar *pDist = (uchar *)(&Dist);	// 里程数地址
	uchar *pTotal = (uchar *)(&Total);	// 总价地址

//	x24c02_Init();	// 初始化24c02
	
	//--- 读取里程数 ---
	*pDist = x24c02_Read(X24C02_0, EEPROM_DIST);
	DelayXms(5);
	*(++pDist) = x24c02_Read(X24C02_0, EEPROM_DIST+1);
	DelayXms(5);

	//--- 读取总价 ---
	*pTotal = x24c02_Read(X24C02_0, EEPROM_TOTAL);
	DelayXms(5);
	*(++pTotal) = x24c02_Read(X24C02_0, EEPROM_TOTAL+1);
	DelayXms(5);

	//--- 读取停车计时 ---
		// Hour
	StopHour = x24c02_Read(X24C02_0, EEPROM_STOP_HOUR);
	DelayXms(5);
		// Min
	StopMin = x24c02_Read(X24C02_0, EEPROM_STOP_MIN);
	DelayXms(5);
		// Sec
	StopSec = x24c02_Read(X24C02_0, EEPROM_STOP_SEC);
	DelayXms(5);

	//--- 读取出错修正 ---
	if( Dist == 0xffff )
		Dist = 0;
	if( Total == 0xffff )
		Total = 0;
	if( StopHour >= 24 )
		StopHour = 0;
	if( StopMin >= 60 )
		StopMin = 0;
	if( StopSec >= 60 )
		StopSec = 0;

	//--- 刷新画面显示 ---
	if( MenuMode == MENU_MAIN )
	{
		ShowDist();		// 更新里程数
		ShowCost();		// 更新总价
		ShowStopTimer();	// 更新停车计时
	}
}
#endif

// 存储单价 ******************************
#if SavePrice_en
void SavePrice(void)
{
// --- 变量定义 ---
	uchar *pDayPrice = (uchar *)(&DayPrice);	// 白天单价地址
	uchar *pNightPrice = (uchar *)(&NightPrice);	// 夜晚单价地址

// --- Operation ---
//	x24c02_Init();	// 初始化24c02

	// 写入白天单价
	x24c02_Write(X24C02_0, EEPROM_DAY_PRICE, *pDayPrice);
	DelayXms(5);
	x24c02_Write(X24C02_0, EEPROM_DAY_PRICE+1, *(++pDayPrice));
	DelayXms(5);

	// 写入夜晚单价
	x24c02_Write(X24C02_0, EEPROM_NIGHT_PRICE, *pNightPrice);
	DelayXms(5);
	x24c02_Write(X24C02_0, EEPROM_NIGHT_PRICE+1, *(++pNightPrice));
	DelayXms(5);
}
#endif

// 读取单价 ******************************
#if LoadPrice_en
void LoadPrice (void)
{
	uchar *pDayPrice = (uchar *)(&DayPrice);		// 白天单价地址
	uchar *pNightPrice = (uchar *)(&NightPrice);	// 夜晚单价地址

	//--- 从24c02中读取单价变量 ---
//	x24c02_Init();	// 初始化24c02
	
	// 读取白天单价
	*pDayPrice = x24c02_Read(X24C02_0, EEPROM_DAY_PRICE);
	DelayXms(5);
	*(++pDayPrice) = x24c02_Read(X24C02_0, EEPROM_DAY_PRICE+1);
	DelayXms(5);

	// 读取夜晚单价
	*pNightPrice = x24c02_Read(X24C02_0, EEPROM_NIGHT_PRICE);
	DelayXms(5);
	*(++pNightPrice) = x24c02_Read(X24C02_0, EEPROM_NIGHT_PRICE+1);
	DelayXms(5);

	//--- 若读出内容为空, 则装载单价默认值 ---
	//[注: 当24c02存储单元的出厂内容(或被擦除后内容)为0xff.]
	if( DayPrice == 0xffff )
		DayPrice = DAY_PRICE;	// 白天单价(默认)
	if( NightPrice == 0xffff)
		NightPrice = NIGHT_PRICE;	// 夜晚单价(默认)
}
#endif

// 存储实时时钟 ******************************
#if SaveRTC_en
void SaveRTC (void)
{
	// 写入实时时钟Hour
	x24c02_Write(X24C02_0, EEPROM_CLOCK_HOUR, ClockHour);
	DelayXms(5);

	// 写入实时时钟Min
	x24c02_Write(X24C02_0, EEPROM_CLOCK_MIN, ClockMin);
	DelayXms(5);

	// 写入实时时钟Sec
	x24c02_Write(X24C02_0, EEPROM_CLOCK_SEC, ClockSec);
	DelayXms(5);
}
#endif

// 读取实时时钟 ******************************
#if LoadRTC_en
void LoadRTC (void)
{
	//--- 从24c02读取实时时钟变量 ---
	ClockHour = x24c02_Read(X24C02_0, EEPROM_CLOCK_HOUR);
	DelayXms(5);
	ClockMin = x24c02_Read(X24C02_0, EEPROM_CLOCK_MIN);
	DelayXms(5);
	ClockSec = x24c02_Read(X24C02_0, EEPROM_CLOCK_SEC);
	DelayXms(5);

	//--- 若读取的实时时钟变量值越界, 则装载其默认值 ---
	if( ClockHour >= 24 )
		ClockHour = 10;
	if( ClockMin >= 60 )
		ClockMin = 30;
	if( ClockSec >= 60 )
		ClockSec = 0;
}
#endif

//************************************************************

⌨️ 快捷键说明

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