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

📄 writefile.c

📁 全国电子设计大赛:智能电动车的设计.实现功能:以AT89C52单片机为核心
💻 C
📖 第 1 页 / 共 2 页
字号:
//*************************************************************************************************
//  Module Name :  WriteFile.C
//  CreateDate  :  2005-05-09
//  ModifData   :  2005-05-09
//  Description :  
//  Author      :  李远正
//  Version     :  V1.0
//*************************************************************************************************
// 
// U盘文件读写模块, 
// MCS-51单片机C语言程序, 仅适用于V2.5及以上版本的模块 
// 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源 

#include <C8051F020.H> 
#include <string.h>
#include <stdio.h>
#include "Function.H"
#include "12C887.H"   // Save temporary data 
#include "USBP.H" 
#include "WriteFile.H" 

//=================================================================================================
// 显示U盘操作的进度子程序 
void DisplayGuage ( unsigned char guage )
{
	GUAGE  = guage; 
	SCREEN = 51;  // 进入 51 屏幕,显示U盘操作进度 
	Display( ); 
}

//-------------------------------------------------------------------------------------------------
// 检查操作状态,如果错误则显示错误代码并停机,应该替换为实际的处理措施 
void mStopIfError( unsigned char iError )
{
	if ( iError == ERR_SUCCESS ) return;  // 操作成功返回 
	
	SCREEN = 52; modifying  = 1;   // 进入 52 屏幕,显示错误 
	Display( ); 
}

//-------------------------------------------------------------------------------------------------
// 16位大端与小端格式的数据处理 
unsigned short	SwapUINT16( unsigned short d )
{
	return( ( d << 8 ) & 0xFF00 | ( d >> 8 ) & 0xFF );
}

//=================================================================================================
// 向缓冲区写入要发送的数字 
void mCopyNumberToBUF( unsigned char number )
{
	WriteFileSize++;           // 文件总大小 
	*buffer++ = number; 
	*buffer = '\0';
}

//-------------------------------------------------------------------------------------------------
// 向缓冲区写入要发送的字符串 
void mCopyCodeStringToBUF( unsigned char *CodeString )
{
	for ( ; *CodeString!=0; )  // 遇到停止符\0结束
	{
		WriteFileSize++;       // 文件总大小 
	    *buffer++ = *CodeString++;
	}
}

//-------------------------------------------------------------------------------------------------
// 向指定缓冲区写入数据块文件 
// 要写入数据的缓冲区首地址:  BufStart
// 记录文件数据的总大少    :  TotalFileSize 
// 记录数据写到缓冲区的位置:  buffer 
void WriteDataToBUF( unsigned char *BufStart )
{
	unsigned char i, IronNumber;
	unsigned int  MetalDistance;
	#define  Distance  MetalDistance     // 节约一个变量单元 

	WriteFileSize = 0;    // 写入文件数据数目清零 
	buffer =  BufStart;   // 指向缓冲区碎片数据(需要重新写入的)的末地址 

	if ( superaddition )  // 追加数据次数计数 
	{
	    mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 
	    mCopyCodeStringToBUF( "(数据追加)" ); 
		mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 
	}
	
	mCopyCodeStringToBUF( "现在日期是 20" );
	i = time_buf[6]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 ); mCopyNumberToBUF( '-' ); 
	i = time_buf[5]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 ); mCopyNumberToBUF( '-' ); 
	i = time_buf[4]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 );
	mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 
	mCopyCodeStringToBUF( "现在时间是 " );
	i = time_buf[2]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 ); mCopyNumberToBUF( ':' ); 
	i = time_buf[1]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 ); mCopyNumberToBUF( ':' ); 
	i = time_buf[0]; 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 );
	mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 

	mCopyCodeStringToBUF( "“直道区”检测到铁片的数目为:" );
	i = Read12C887RAM( IRON_NUMBER_RANGE );    // 从 12C887 中取出数据 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 );
	mCopyCodeStringToBUF( "(个)" ); 
	mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 

	IronNumber = i;  // 检测铁片数目,确定存储数据量多少 

	if( IronNumber > 0 )
	{
	    mCopyCodeStringToBUF( "第一片铁片到起跑线的距离为:" ); 
	    i = Read12C887RAM( DISTANCE_RANGE_1_H );    // 从 12C887 中取出数据 
	    MetalDistance =  ( unsigned int )i*256;
	    i = Read12C887RAM( DISTANCE_RANGE_1_L );
	    MetalDistance += i;
	    mCopyNumberToBUF( MetalDistance/10000+0x30 ); mCopyNumberToBUF( MetalDistance%10000/1000+0x30 ); mCopyNumberToBUF( '.' ); mCopyNumberToBUF( MetalDistance%1000/100+0x30 ); mCopyNumberToBUF( MetalDistance%100/10+0x30 ); mCopyNumberToBUF( MetalDistance%10+0x30 ); 
	    mCopyCodeStringToBUF( "(m)" ); 
	    mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 
	}
	if( IronNumber > 1 )
	{
	    mCopyCodeStringToBUF( "第二片铁片到起跑线的距离为:" ); 
	    i = Read12C887RAM( DISTANCE_RANGE_2_H );    // 从 12C887 中取出数据 
	    MetalDistance =  ( unsigned int )i*256;
	    i = Read12C887RAM( DISTANCE_RANGE_2_L );
	    MetalDistance += i;
	    mCopyNumberToBUF( MetalDistance/10000+0x30 ); mCopyNumberToBUF( MetalDistance%10000/1000+0x30 ); mCopyNumberToBUF( '.' ); mCopyNumberToBUF( MetalDistance%1000/100+0x30 ); mCopyNumberToBUF( MetalDistance%100/10+0x30 ); mCopyNumberToBUF( MetalDistance%10+0x30 ); 
	    mCopyCodeStringToBUF( "(m)" ); 
	    mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 
	}
	if( IronNumber > 2 )
	{
	    mCopyCodeStringToBUF( "第三片铁片到起跑线的距离为:" ); 
	    i = Read12C887RAM( DISTANCE_RANGE_3_H );    // 从 12C887 中取出数据 
	    MetalDistance =  ( unsigned int )i*256;
	    i = Read12C887RAM( DISTANCE_RANGE_3_L );
	    MetalDistance += i;
	    mCopyNumberToBUF( MetalDistance/10000+0x30 ); mCopyNumberToBUF( MetalDistance%10000/1000+0x30 ); mCopyNumberToBUF( '.' ); mCopyNumberToBUF( MetalDistance%1000/100+0x30 ); mCopyNumberToBUF( MetalDistance%100/10+0x30 ); mCopyNumberToBUF( MetalDistance%10+0x30 ); 
	    mCopyCodeStringToBUF( "(m)" ); 
	    mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 	
	}

	mCopyCodeStringToBUF( "全程路程:" ); 
	i = Read12C887RAM( DISTANCE_RANGE_H );   // 从 12C887 中取出数据 
	Distance = ( unsigned int )i*256;
	i = Read12C887RAM( DISTANCE_RANGE_L );   // 从 12C887 中取出数据 
	Distance += i; 
	mCopyNumberToBUF( Distance/10000+0x30 ); mCopyNumberToBUF( Distance%10000/1000+0x30 ); mCopyNumberToBUF( '.' ); mCopyNumberToBUF( Distance%1000/100+0x30 ); mCopyNumberToBUF( Distance%100/10+0x30 ); mCopyNumberToBUF( Distance%10+0x30 ); 
	mCopyCodeStringToBUF( "(m)" ); 
	mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 

	mCopyCodeStringToBUF( "全程行驶时间为:" ); 
	i = Read12C887RAM( JOURNEY_TIME_RANGE );   // 从 12C887 中取出数据 
	mCopyNumberToBUF( i/10+0x30 ); mCopyNumberToBUF( i%10+0x30 );
	mCopyCodeStringToBUF( "(s)" ); 
	mCopyNumberToBUF( 0x0D ); mCopyNumberToBUF( 0x0A );   // 回车换行 

	*buffer = '\0';                 // 文件结束标志 
}


//=================================================================================================
//                                File Procedure: USB 
//=================================================================================================
// 保存文件数据到U盘中名为:(智能小车.TXT) 的文本文件中 
void FileProcess( void )
{
	unsigned char   guage = 0;      // 进度参数 
	unsigned char	i, SecCount;    // 

	unsigned long   OldFileSize;    // 原文件数据大少 
	unsigned int    LastSize;       // 原文件尾部不足一个扇区的零碎数据字节数(0--511) 

#ifdef CH375HM_INT 
#if CH375HM_INT == 0 
	ExecCommand( CMD_QueryStatus, 0 );  // 查询当前模块的状态,中断方式则不需要此步骤 
	mIntStatus = mCmdParam.Status.mIntStatus; 
#endif 
#endif 

⌨️ 快捷键说明

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