|
把原子的程序思路和代碼移植到野火板子上,把兩者來了個強強聯合;實現了對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);
}
}
|
|