|
把原子的程序思路和代码移植到野火板子上,把两者来了个强强联合;实现了对SD卡的文件创建,和文件内容的实时读写。带日历程序。就这么点东西折腾了老子几天;实现功能:1,实时时钟;2,文件夹创建;3,读SD卡文件内容。通过本实验基本上可以熟悉FAT32文件系统的一些简单应用函数功能。
FIL fnew; /* file objects */
FATFS fs; /* Work area (file system object) for logical drives */
FRESULT res;
UINT br, bw; /* File R/W count */
BYTE buffer[4096]={0}; /* file copy buffer */
BYTE textFileBuffer[] = "HELLO WORLD ! 我是王衍。 ";
int main(void)
{ u8 i,t=0;
uart_init(9600);
delay_init();
mem_init(SRAMIN);
LCD_Init();
LCD_Clear(0, 0, 240, 320, WHITE);
Key_init();
LED_GPIO_Config();
NVIC_Configuration();
RTC_Init();
usmart_dev.init(SystemCoreClock/1000000);
Sd_fs_init();
while(RTC_Init())
{
LCD_DispStr(60,60,"RTC ERROR! ",RED);
delay_ms(200);
LCD_DispStr(60,60,"RTC Trying...",RED);
}
LCD_DispStr(30,120," - - ",RED); //
LCD_DispStr(10,140," : : ",RED); //
while(1)
{
f_mkdir("sub");
f_mkdir("sub/sub1");
/* function disk_initialize() has been called in f_open */
#if 0 //如果将条件编译内容注释掉,则可以实时读出SD卡某个文件的内容,只要文件内容改变了显示(即读出)也随之变化。
res = f_open(&fnew, "0:íõ«`.txt", FA_CREATE_ALWAYS | FA_WRITE );
if (res == FR_OK)
{
LCD_DispStr(20, 160, "start write!", RED);
do{ res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);
if(res)
{ LCD_DispStr(20, 160, "write error!", RED);
break;
}
LCD_DispStr(20, 180, "write ok!", RED);
}
while (bw != sizeof(textFileBuffer)); //
f_close(&fnew);
LED2_TOGGLE;
}
#endif
res = f_open(&fnew, "0:王玚 .txt", FA_OPEN_EXISTING | FA_READ);
res = f_read(&fnew, buffer, sizeof(textFileBuffer), &br);
LCD_DispEnCh(10, 80, buffer, RED);
printf("\r\n %s ", buffer);
delay_ms(100);
printf("\r\n this is a fatfs test demo \r\n");
/* Close open files */
f_close(&fnew);
/* Unregister work area prior to discard it */
f_mount(0, NULL);
if(t!=calendar.sec)
{
t=calendar.sec;
LCD_DisNum(30, 120, calendar.w_year, BLUE);
LCD_DisNum(85, 120, calendar.w_month, BLUE);
LCD_DisNum(110, 120, calendar.w_date, BLUE);
switch(calendar.week)
{
case 0:
LCD_DispEnCh(150, 120, "星期一", BLUE);
break;
case 1:
LCD_DispEnCh(150, 120, "星期二",BLUE);
break;
case 2:
LCD_DispEnCh(150, 120, "星期三", BLUE);
break;
case 3:
LCD_DispEnCh(150, 120, "星期四", BLUE);
break;
case 4:
LCD_DispEnCh(150, 120, "星期五", BLUE);
break;
case 5:
LCD_DispEnCh(150, 120, "星期六", BLUE);
break;
case 6:
LCD_DispEnCh(150, 120,"星期天", BLUE);
break;
}
LCD_DisNum(50, 140, calendar.hour, BLUE);
LCD_DisNum(80, 140, calendar.min, BLUE);
LCD_DisNum(110, 140, calendar.sec, BLUE);
}
i++;
if((i%20)==0)
{ //LCD_DisNum(125,150, mem_perused(SRAMIN), BLUE);
LED1_TOGGLE;
}
delay_ms(10);
}
}
|
|