stc15--znfat,往SD卡创建文件,写数据

2023-10-14 02:50
文章标签 数据 创建 sd stc15 znfat

本文主要是介绍stc15--znfat,往SD卡创建文件,写数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************★★★★★★★★★★★★★★★★★★★★★★★★《51单片机轻松入门-基于STC15W4K系列》 一书已经由北航出版社正式出版发行。作者亲手创作的与教材配套的51双核实验板(2个MCU)对程序下载、调试、仿真方便,不需要外部仿真器与编程器,这种设计方式彻底解决了系统中多个最高优先级谁也不能让谁的中断竞争问题。淘宝店地址:https://shop117387413.taobao.comQQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。验证信息:STC15单片机邮箱:xgliyouquan@126.com★★★★★★★★★★★★★★★★★★★★★★★★*/#include "znfat/znFAT.h"
#include "sd.h"
#include "uart.h"
#include "myfun.h"//=============================== 
struct znFAT_Init_Args idata Init_Args; // 初始化参数集合
struct FileInfo idata fileinfo;         // 文件信息集合
struct DateTime idata dt;               // 日期与时间
unsigned char buf[100];
unsigned char tempint[11];		// 长整数最大值4294967295,转ASCII码后占用10字节//	由于后面程序要使用strlen()库函数计算长度,需增加1个字节存放结束符0void port_mode()                        // 端口模式
{P0M1=0xff; P0M0=0xff;P1M1=0x0C;P1M0=0x0C;P4M1=0x80;P4M0=0x80; 
}
int main()
{ unsigned int res=0,i=0;unsigned char ti;unsigned long len=0;unsigned char monthG,dayG,hourG,minG,secG;unsigned char wenduG,shiduG,shuiliangG,dianliangG;wenduG=20;shiduG=35;shuiliangG=54;dianliangG=20;monthG=4;dayG=5;hourG=10;minG=50;secG=32;port_mode();UART_Init(); UART_Send_Str("串口设置完毕\r\n");		znFAT_Device_Init();                // 存储设备初始化UART_Send_Str("SD卡初始化完毕\r\n");znFAT_Select_Device(0,&Init_Args);  // 选择设备res=znFAT_Init();                   // 文件系统初始化	 if(!res) //文件系统初始化成功{UART_Send_Str("Suc. to init FS\r\n");UART_Send_StrNum("BPB_Sector_No:",Init_Args.BPB_Sector_No);   UART_Send_StrNum("Total_SizeKB:",Init_Args.Total_SizeKB); UART_Send_StrNum("BytesPerSector:",Init_Args.BytesPerSector); UART_Send_StrNum("FATsectors:",Init_Args.FATsectors);  UART_Send_StrNum("SectorsPerClust:",Init_Args.SectorsPerClust); UART_Send_StrNum("FirstFATSector:",Init_Args.FirstFATSector); UART_Send_StrNum("FirstDirSector:",Init_Args.FirstDirSector); UART_Send_StrNum("FSsec:",Init_Args.FSINFO_Sec);UART_Send_StrNum("Next_Free_Cluster:",Init_Args.Next_Free_Cluster);UART_Send_StrNum("FreenCluster:",Init_Args.Free_nCluster); }else //文件系统初始化失败{UART_Send_StrNum("Fail to init FS, Err Code:",res);}//==================================================================dt.date.year=2014; dt.date.month=01; dt.date.day=20;dt.time.hour=22;   dt.time.min=38;   dt.time.sec=41;res=znFAT_Create_File(&fileinfo,"/test14.txt",&dt);    //创建文件if(!res)    // 创建文件成功{delay(30000);UART_Send_Str("Suc. to create file.\r\n");UART_Send_Str("================================\n");UART_Send_Str("File_Name(Short 8.3):");UART_Send_Str(fileinfo.File_Name);UART_Send_Enter();UART_Send_StrNum("File_Size:",fileinfo.File_Size);UART_Send_Str("File_CDate:");UART_Send_Num(fileinfo.File_CDate.year); UART_Send_Str("年");UART_Send_Num(fileinfo.File_CDate.month);UART_Send_Str("月"); UART_Send_Num(fileinfo.File_CDate.day);  UART_Send_Str("日");UART_Send_Num(fileinfo.File_CTime.hour); UART_Send_Str("时");UART_Send_Num(fileinfo.File_CTime.min);  UART_Send_Str("分");UART_Send_Num(fileinfo.File_CTime.sec);  UART_Send_Str("秒\r\n");UART_Send_StrNum("File_StartClust:",fileinfo.File_StartClust);UART_Send_StrNum("File_CurClust:",fileinfo.File_CurClust);UART_Send_StrNum("File_CurSec:",fileinfo.File_CurSec);UART_Send_StrNum("File_CurPos:",fileinfo.File_CurPos);UART_Send_StrNum("File_CurOffset:",fileinfo.File_CurOffset);UART_Send_Str("================================\n");// 		for(i=0;i<22;i++)
// 		{
// 			//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧
// 				buf[i]="0123456789abcdef中国\r\n"[i];	// 字符数组赋值技巧
// 		}									    //// 		for(i=0;i<10;i++)
// 		{
// 			len=znFAT_WriteData(&fileinfo,22,buf); //向文件写入数据
// 			if(len==ERR_OVER_FILE_MAX_SIZE || len==ERR_OVER_DISK_SPACE)
// 			{
// 				UART_Send_StrNum("Have some Err :",len);
// 			}
// 			else
// 			{
// 				UART_Send_StrNum("Write Data,times:",i);
// 				UART_Send_StrNum("Current file offset is ",fileinfo.File_CurOffset);
// 			}
// 			//将数据变成字符串形式,拼接成整串,然后再一次性写入到SD卡文件中。//字符串格式为//时间2021/02/03/15:30:wendu:35;shidu:25;shuiliang:20,dianliang:25;//时间2021/02/03/,15:30,温度35,湿度25%,水量25%,电量30%;for(ti=0;ti<5;ti++)   //连续写5次内容,测试换行对不对{for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="时间"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据//2021的20//将20转变成字符串len=znFAT_WriteData(&fileinfo,1,":"); //向文件写入数据Long_Str(monthG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,"/"); //向文件写入数据Long_Str(dayG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,"/"); //向文件写入数据Long_Str(monthG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,"/"); //向文件写入数据Long_Str(dayG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,"/"); //向文件写入数据Long_Str(hourG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,":"); //向文件写入数据Long_Str(minG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,"]"); //向文件写入数据len=znFAT_WriteData(&fileinfo,1,":"); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"\r\n"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="温度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(wenduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,4,"deg;"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="湿度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shiduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%/"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="湿度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shiduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%/"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="湿度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shiduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%/"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="湿度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shiduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%/"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="湿度"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shiduG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%;"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="水量"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(shuiliangG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%;"); //向文件写入数据for(i=0;i<4;i++){//buf[i]="0123456789abcdefghij"[i];	// 字符数组赋值技巧buf[i]="电量"[i];	// 字符数组赋值技巧}len=znFAT_WriteData(&fileinfo,4,buf); //向文件写入数据Long_Str(dianliangG,tempint);len=znFAT_WriteData(&fileinfo,2,tempint); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"%;"); //向文件写入数据len=znFAT_WriteData(&fileinfo,2,"\r\n"); //向文件写入数据if(len==ERR_OVER_FILE_MAX_SIZE || len==ERR_OVER_DISK_SPACE){UART_Send_StrNum("Have some Err :",len);}else{UART_Send_StrNum("Write Data,times:",i);UART_Send_StrNum("Current file offset is ",fileinfo.File_CurOffset);}} 	znFAT_Close_File(&fileinfo); //关闭文件}else{UART_Send_StrNum("Fail to create file, Err Code:",res);}znFAT_Flush_FS(); //刷新文件系统while(1);return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于stc15--znfat,往SD卡创建文件,写数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207623

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的