一、硬件设计
水是生命之源,在日常的生活生产中需要对水的信息进行检测,最早的对水温水位信息的检测是采用人工,采用温度计和标尺,把信息记录到工作本上,然后再进行相应的统计和整理。近年来伴随着电子信息技术的发展,特别是嵌入式技术的进步和低成本化,为水位水温信息的采集记录智能化的实现提供了可能,本文就是利用STC单片机和压力传感器,水温传感器为一体,通过单片机把水的信息进行采集,然后在液晶上面实时显示出来。同时把采集到的信息记录到SD卡上面,方面查看以往的信息记录
二、设计功能
系统采用防水型的DS18B20检测水的温度,采用压力传感器检测水位的高度,然后通过单片机把传感器输出的模拟量转换为对应的高度,同时系统还有时间信息,记录的时候也把时间现象添加上,方面后面整理。系统有按键信息输入功能,方便对时间信息的调试和校准。这就是整个系统所需要实现的功能。
三、设计原理图
四、软件程序
1、软件流程图
2、主程序源码
int main()
{
unsigned int res=0,i=0;
unsigned long len=0;
LCD1602_cls();
LCD1602_write(0,0x80);
LCD1602_writebyte(" Please Insert ");
LCD1602_write(0,0xC0);
LCD1602_writebyte("The Memory Card ");
UART_Init();
UART_Send_Str("\r\n串口设置完毕\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_Put_Inf("BPB_Sector_No:",Init_Args.BPB_Sector_No);
UART_Put_Inf("Total_SizeKB:",Init_Args.Total_SizeKB);
UART_Put_Inf("BytesPerSector:",Init_Args.BytesPerSector);
UART_Put_Inf("FATsectors:",Init_Args.FATsectors);
UART_Put_Inf("SectorsPerClust:",Init_Args.SectorsPerClust);
UART_Put_Inf("FirstFATSector:",Init_Args.FirstFATSector);
UART_Put_Inf("FirstDirSector:",Init_Args.FirstDirSector);
UART_Put_Inf("FSsec:",Init_Args.FSINFO_Sec);
UART_Put_Inf("Next_Free_Cluster:",Init_Args.Next_Free_Cluster);
UART_Put_Inf("FreenCluster:",Init_Args.Free_nCluster);
}
else //文件系统初始化失败
{
UART_Put_Inf("Fail to init FS, Err Code:",res);
}
//==================================================================
// dt.date.year=2012; dt.date.month=12; dt.date.day=21;
// dt.time.hour=15; dt.time.min=14; dt.time.sec=35;
res=znFAT_Create_File(&fileinfo,"\\Record.txt",&dt); //创建文件
if(!res) //创建文件成功
{
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_Put_Inf("File_Size:",fileinfo.File_Size);
UART_Send_Str("File_CDate:");
UART_Put_Num(fileinfo.File_CDate.year); UART_Send_Str("年");
UART_Put_Num(fileinfo.File_CDate.month);UART_Send_Str("月");
UART_Put_Num(fileinfo.File_CDate.day); UART_Send_Str("日");
UART_Put_Num(fileinfo.File_CTime.hour); UART_Send_Str("时");
UART_Put_Num(fileinfo.File_CTime.min); UART_Send_Str("分");
UART_Put_Num(fileinfo.File_CTime.sec); UART_Send_Str("秒\r\n");
UART_Put_Inf("File_StartClust:",fileinfo.File_StartClust);
UART_Put_Inf("File_CurClust:",fileinfo.File_CurClust);
UART_Put_Inf("File_CurSec:",fileinfo.File_CurSec);
UART_Put_Inf("File_CurPos:",fileinfo.File_CurPos);
UART_Put_Inf("File_CurOffset:",fileinfo.File_CurOffset);
UART_Send_Str("================================\n");
}
else
{
UART_Put_Inf("Fail to create file, Err Code:",res);
}
完整资料:基于单片机的水温水位SD卡存储系统设计