Unicode表存儲SD卡中讀取,轉為GBK顯示FATFS文件名
本實驗將實現如下功能:開機的時候先初始化SD卡,如果SD卡初始化完成,則讀取扇區0的數據,然后通過串口打印到電腦上。如果沒初始化通過,則在LCD上提示初始化失敗。 同樣用DS0來指示程序正在運行。
注意:
1,本實驗可以SWD下載仿真.
2,如果遇到不能識別的卡,有可能是不兼容造成的,請換卡.
STM32單片機源程序如下:
- #include <stm32f10x_lib.h>
- #include "sys.h"
- #include "usart.h"
- #include "delay.h"
- #include "led.h"
- #include "key.h"
- #include "exti.h"
- #include "timer.h"
- #include "lcd.h"
- #include "touch.h"
- #include "mmc_sd.h"
- #include "24cxx.h"
- #include "text.h"
- #include "SDfont.h"
- #include "exfuns.h"
- #include "malloc.h"
- #include "string.h"
- #include "spi.h"
- #include "ff.h"
-
- u8 buf[512];//SD卡數據緩存區
- const TCHAR flie1[]={"0:news/news.txt"};
- const TCHAR flie2[]={"0:news/apple.txt"};
- const TCHAR flie3[]={"0:news/love.txt"};
- void myflie(const TCHAR *p2)
- {
- FRESULT res=FR_OK;
- u8 a;
- LCD_Clear(WHITE);
- file=(FIL*)mymalloc(SRAMIN,sizeof(file));
- res = f_open(file,p2,FA_OPEN_EXISTING|FA_READ);
- if(!res)
- {
- br=1;
- for (;;)
- {
- for(a=0; a<64; a++) buf[a]=0;
- res = f_read(file, buf, sizeof(buf),&br);
- if (res || br < sizeof(buf)) break; // error or eof
- }
- }
- Show_Str(50,250,300,16,buf,16,0);
- }
- u8 sim900a_hex2chr(u8 hex)
- {
- if(hex<=9)return hex+'0';
- if(hex>=10&&hex<=15)return (hex-10+'A');
- return '0';
- }
- int main(void)
- {
-
- u8 shuzu[20];
- u8 *dst=shuzu;
- u16 temp;
- const u8 *src="我";
- u8 test[2];
- u32 total,free;
- FRESULT res=FR_OK;
- u32 sd_size;
- Stm32_Clock_Init(9);//系統時鐘設置
- delay_init(72); //延時初始化
- uart_init(72,9600); //串口1初始化
- LCD_Init(); //初始化液晶
- LED_Init(); //LED初始化
- KEY_Init();
- exfuns_init(); //exfuns 初始化
- mem_init(SRAMIN); //初始化內部內存池
- POINT_COLOR=RED;//設置字體為紅色
- LCD_ShowString(50,50,"Mini STM32");
- LCD_ShowString(50,70,"SD Card TEST");
- LCD_ShowString(50,90,"ATOM@ALIENTEK");
- LCD_ShowString(50,110,"Only use sd card");
- LCD_ShowString(50,230,"2014/7/31");
- while(SD_Initialize()!=0)//檢測不到SD卡
- {
- LCD_ShowString(50,130,"SD Card Failed!");
- delay_ms(500);
- LCD_ShowString(50,130,"Please Check! ");
- delay_ms(500);
- LED0=!LED0;//DS0閃爍
- }
- //檢測SD卡成功
- LCD_ShowString(50,130,"SD Card Checked OK ");
- LCD_ShowString(50,150,"SD Card Size: Mb");
- sd_size=SD_GetSectorCount();//得到扇區數
- LCD_ShowNum(154,150,sd_size>>11,5,16);//顯示SD卡容量
- SDFont_Init();
- exfuns_init();
- f_mount(0,fs[0]); //掛載SD卡
- while(exf_getfree("0",&total,&free))
- {
- LCD_ShowString(50,170,"fatfs error!") ;
- delay_ms(200);
- LED0=!LED0;
- }
- LCD_ShowString(50,170,"fatfs ok!") ;
- LCD_ShowString(50,190,"SD Card Size: Mb");
- LCD_ShowNum(154,190,total>>10,5,16);
- LCD_ShowString(50,210,"SD free Size: Mb");
- LCD_ShowNum(154,210,free>>10,5,16);
- Show_Str_Mid(0,30,"!漢字測試成功!",16,240);
- LCD_Clear(WHITE);//清屏
- /****************讀取SD卡文件**************/
- // file=(FIL*)mymalloc(SRAMIN,sizeof(file));
- // res = f_open(file,"0:news/news.txt",FA_OPEN_EXISTING|FA_READ);
- // if(!res)
- // {
- // br=1;
- // for (;;)
- // {
- // res = f_read(file, buf, sizeof(buf),&br);
- // if (res || br < sizeof(buf)) break; // error or eof
- // }
- // }
- // Show_Str(0,0,300,16,buf,16,0);
- // f_close(file);
- // myfree(SRAMIN,file);
- // Show_Str(50,270,400,16,"好煩躁。。。。",16,0);
-
- test[1]=*src++;
- test[0]=*src++;
- temp=(u16)ff_convert((WCHAR)*(u16*)test,1);
- LCD_ShowNum(50,300,(u32)temp,6,16);
- // dst[0]=sim900a_hex2chr((temp>>12)&0X0F);
- // dst[1]=sim900a_hex2chr((temp>>8)&0X0F);
- // dst[2]=sim900a_hex2chr((temp>>4)&0X0F);
- // dst[3]=sim900a_hex2chr(temp&0X0F);
- // dst[4]=0;
- //// LCD_ShowString(60,110,dst);
- while(1)
- {
- // t=KEY_Scan();
- // if(t)
- // {
- // switch(t)
- // {
- // case 1:
- // myflie(flie1);
- // break;
- // case 2:
- // myflie(flie2);
- // break;
- // case 3:
- // myflie(flie3);
- // break;
- // }
- // }else delay_ms(10);
- delay_ms(200);
- LED0=!LED0;
- }
- }
復制代碼
所有資料51hei提供下載:
SD卡 FATFS.rar
(2.23 MB, 下載次數: 37)
2017-9-29 17:36 上傳
點擊文件名下載附件
SD卡+FATFS 下載積分: 黑幣 -5
|