找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3849|回复: 0
打印 上一主题 下一主题
收起左侧

SD卡嵌入FAT32系统实验

[复制链接]
跳转到指定楼层
楼主
ID:72008 发表于 2015-1-12 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     把原子的程序思路和代码移植到野火板子上,把两者来了个强强联合;实现了对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);                                                                  
        }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表