久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7639|回復: 3
打印 上一主題 下一主題
收起左側

向SD卡寫入實時數據

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發表于 2016-2-12 03:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       將外部采集到的數據或者將內存的運算結果導出到SD中存儲有時很實用。前幾天有人懸賞500刀,征求利用FAT32文件系統的API向SD卡寫入實時數據的代碼,這兩天老夫將其整理出來了。關鍵代碼如下:經過本人測試只需將代碼移植過去稍作修改就能用。

      思路是:將帶符號的整數(實際上浮點數也是可以的,只是函數需要修改一下)轉化為字符存儲在一個數組中,利用利用FAT32的讀寫文件API將數組內容向SD卡寫入。代碼可以優化。
     
//將整形數轉化為字符,
void Int32String_sign(char *p, int n)
{
    int i,m, j;
        //int ;
   // char *p = r->str;//將結構體成員所指向的空間賦值給p,也就是說p指向str
  
    if ( n == 0 )
                {
        *p++ = ' ';
    //    *p++ = '0';
   //     *p++ = '.';
        *p++ = '0';
        *p++ = '0';
        *p = 0;//字符數組P,最后一位賦值0
   
   
       printf("輸入的值是0,直接返回!\n\r" );//
                return;  //如果n是0就結束函數
    }  
    if ( n > 0 ){
        *p++ = ' ';
                printf("輸入的值是正數,第一位加“ ”空格符號!\n\r" );//
        }
    else {
        *p++ = '-';
        n = -n;
       printf("輸入的值是負數,第一位加“-”符號!\n\r" );//
    }
  
    i = 0;
    m=n;
  while ( m >= 10 ) //只要m即n大于或等于10,
{
      
        m/= 10;       
        i++ ;
        printf("計算循環次數i:%d\n\r",i );//
}

if(i>=8)
{
    printf("輸入值過大,直接退出程序!\n\r" );//
    return;
}
switch ( i ) {

    case 9:
        *p++ = '0'+n/1000000000;
      
        n %= 1000000000;
      
    case 8:
        *p++ = '0'+n/100000000;
      
        n %= 100000000;
    case 7:
        *p++ = '0'+n/10000000;
      
        n %= 10000000;
    case 6:
        *p++ = '0'+n/1000000;
      
        n %= 1000000;
      
    case 5:
        *p++ = '0'+n/100000;
        
        n %= 100000;
    case 4:
        *p++ = '0'+n/10000;
        
        n %= 10000;
    case 3:
        *p++ = '0'+n/1000;
      
        n %= 1000;
        *p++ = '0'+n/100;
               
    n %= 100; //n/=10;
  //  printf("n 對100取余 :%d\n\r",n);//55
    *p++ = '0'+n/10;
   // n/=10;
        n %= 10;
  //  printf("n 對10取余:%d\n\r",n );//5
    *p++ = '0'+n;
    *p = 0;
    break;
    case 2:
    *p++ = '0'+n/100;
               
    n %= 100; //n/=10;
   // printf("n 對100取余 :%d\n\r",n);//55
    *p++ = '0'+n/10;
   // n/=10;
        n %= 10;
  //  printf("n 對10取余:%d\n\r",n );//5
    *p++ = '0'+n;
    *p = 0;
    break;
    case 1:
        *p++ = '0'+n/10;
   // n/=10;
        n %= 10;
  //  printf("n 對10取余:%d\n\r",n );//5
    *p++ = '0'+n;
    *p = 0;
    break;
    case 0:
        *p++ = '0'+n; break;
    }

// for( j=0;j<i+2;j++) //注意終止循環的條件,這部分代碼驗證用
//  {
//  
//    printf("轉換結果:%c\n\r",p[j-i-2]);

//  }
   
}

//文件測試函數
void FAT32_Test()
{
        u8 j;
        printf("|\t文件系統版本R0.1b\r\n");
        printf ( "|\t開始初始化......\r\n" );

        /*掛載存儲器*/
       res = f_mount(&fs,"0:",1);
        if(res == FR_OK)
        {
          printf("|\t掛載成功\r\n");
        LCD_DispStr(10, 40, "Succeed Load FAT32 !", RED);
        }
        else {
                printf("|\t掛載錯誤,錯誤代碼%d\r\n",res);
       
                LCD_DispStr(10, 40,"Failar Load FAT32 !", RED);
        }
        /*創建文件,并寫入數據*/
        printf("\r\n|\t正在創建新文件:例程.TXT\r\n");                           
        res = f_open(&fdst,"0:/例程實時數據.TXT",FA_OPEN_ALWAYS | FA_WRITE);
                  //打開文件,如果不存在就新建
       
        while( (res == FR_OK )||(res ==FR_EXIST))
        {
                DATA++;delay_ms(100);
               
                Int32String_sign(str, DATA);
                res = f_write(&fdst, str, sizeof(DATA), &bw);
                f_lseek(&fdst,f_size(&fdst));//重復寫入
               
        //        printf( "|\t文件創建成功,并寫入了新數據:\r\n" );  
        //        printf( "|\t%s \r\n ", &DATA);          
                LCD_DispStr(10, 70,"Succeed Create .TXT !", RED);
                if(DATA==100)
                {
                        DATA=0;
                  f_sync(&fdst);// f_close(&fdst);//關閉文件   
                        LCD_DispStr(10, 90,"Close File !", RED);
                        break;
                }
//        else if ( res == FR_EXIST )
//        if ( res == FR_EXIST )
//        {
//                printf( "|\t文件已經存在\r\n" );
//                LCD_DispStr(10, 90,"File have been exsited !", RED);
//               
//        }
       
}
        LCD_DispStr(10, 120,"READ File...", BLUE);
/*讀取文件內容*/
        printf("\r\n|\t正在讀取文件:例程.TXT\r\n");
        res = f_open(&fdst, "0:/例程實時數據.TXT", FA_OPEN_EXISTING | FA_READ);//只讀方式打開文件               

//        br = 1;
//        for ( res=0; res<1024; res++ )//清除緩沖區
//                buffer[res]=0;               
//          res = f_read( &fdst, buffer, sizeof(buffer), &br );//讀取文件
        if( (res == FR_OK )||(res ==FR_EXIST))
        {
                LCD_DispStr(10, 180,"READ..data:", RED);
                for( j=0;j<100;j++){
                res = f_read( &fdst, buffer, sizeof(buffer), &br );//讀取文件
                printf("|\t從文件讀取到的內容是:\r\n|\t%s", buffer);
               delay_ms(100);
                LCD_DispChar(120,180,buffer[j],BLUE);
               
                // LCD_Number(120,180,buffer[j],BLUE);
                }
        }
        else {
                printf("|\t讀取文件失敗,錯誤代碼是:%d",res);       
    LCD_DispStr(10, 180,"READ  error!", BLUE);
        }                               
        f_close(&fdst);       

        printf("\r\n|\t試驗結束。");       
        LCD_DispStr(10, 140,"File test OVER!", RED);
}

///////////////////---------GKXW-------2016年2月6日18:10:44--------------------------///////////////////////////////////////////////




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:91926 發表于 2016-3-18 19:33 | 只看該作者
謝謝分享
回復

使用道具 舉報

板凳
ID:91926 發表于 2016-3-18 19:33 | 只看該作者
樓主真讓人佩服,能遇上這樣的老師是命好。
回復

使用道具 舉報

地板
ID:429276 發表于 2019-11-25 19:34 | 只看該作者
你好,我寫進去的數據,順序反了。比如存入1234,TXT里面顯示4321怎么辦
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区成人影院 | 超碰成人免费 | 91色视频在线 | 久久久做 | 99热首页| 国产精品免费一区二区三区四区 | 国产日韩欧美一区二区 | 亚洲精选久久 | 久久丝袜 | 日韩午夜在线观看 | 国产精品18hdxxxⅹ在线 | 国产精品久久国产精品 | 亚洲69p | 中文字幕精品一区 | 在线黄av | 91精品一区二区三区久久久久久 | 中文字幕不卡在线88 | 国产精品第2页 | 91福利在线观看视频 | 另类视频在线 | 国产精品久久久久久久久久久久冷 | 国产精品亚洲成在人线 | 国产在线二区 | 久久久精品一区二区三区四季av | 视频二区国产 | 久久久久免费 | 国产精品色| 国产极品车模吞精高潮呻吟 | 人人九九精 | 在线观看国产h | 成人福利网 | 中文字幕在线视频一区二区三区 | 久久精品亚洲精品国产欧美 | 精品美女在线观看视频在线观看 | 国产美女久久久 | 美女久久久久 | 色网在线观看 | 日韩欧美三区 | 九九久久在线看 | 久久精品国产免费 | 女人一区|