اطلاعیه

Collapse
No announcement yet.

شما هم میتونید MP3 Player بسازید اونهم با LCD رنگی لمسی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

    نوشته اصلی توسط ma-bah
    سلام خیلی ممنون از اینکه توابع مربوط به mmc و sd رو شروع کردید. این طوری که من فهمیدم این کتابخونه یعنی mmc برای کار با fat نیست در واقع یه پیش نیاز هست (رفتم تو فاز درس و دانشگاه :icon_razz و کتابخونه ای که کارای اصلی برای fat رو انجام می ده کتابخونه ی ff هستش درسته ؟؟؟؟؟؟؟
    بله شما درست فکر کردین توابع fat توی فایل ff هست من این توابع رو ننوشتم و از اینترنت ورداشتم
    ولی باید بگم این همون توابعی هست که تو ورژنهای بالای کدویژن اضافه شده
    این لینک سایت
    http://elm-chan.org/fsw/ff/00index_e.html
    و این هم لینک دانلود توابع از خود سایت
    http://elm-chan.org/fsw/ff/ff8b.zip
    تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
    به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

    دیدگاه


      #32
      پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

      با سلام
      با توجه به اینکه تعدادی از دوستان فیبر مدار چاپی یا برد اماده MP3 Player رو خواسته بودن من اماده کردم
      اگر بازهم کسی فیبر یا برد آمادهشو بخواد میتونه پیغام خصوصی بزاره یا به من EMAIL بزنه
      POLESTAR.IR@GMAIL.COM
      تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
      به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

      دیدگاه


        #33
        پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

        سلام
        توی توابع فت همه چیز تقریبا مشخص هست ولی باز یه مختصر توضیح هم میدم
        کلا این توابع فت هست


        برای انتخاب دیسک و درایو به کار میره * f_mount - Register/Unregister a work area

        برای باز کردن یا ایجاد فایل بکار میره * f_open - Open/Create a file

        برای خروج از فایل به کار میره * f_close - Close a file

        برای خوندن از فایل به کار میره * f_read - Read file

        برای نوشتن در فایل به کار میره * f_write - Write file

        برای انتقال پواینتر به ادرسی از فایل برای خوندن یا نوشتن * f_lseek - Move read/write pointer, Expand file zize

        * f_truncate - Truncate file size
        * f_sync - Flush cached data

        برای باز کردن یک دایرکتوری یا پوشه * f_opendir - Open a directory

        برای خوندن محتوای یک پوشه * f_readdir - Read a directory item

        * f_getfree - Get free clusters
        * f_stat - Get file status

        برای ایجاد پوشه * f_mkdir - Create a directory

        پاک کردن پوشه یا فایل * f_unlink - Remove a file or directory

        برای تغییر صفات فایل (مثل هیدن بودن یا سیستمی بودن یا ...) * f_chmod - Change attribute

        * f_utime - Change timestamp

        برای تغییر نام یا جابجا کردن فایل یا پوشه * f_rename - Rename/Move a file or directory

        برای ایجاد فایلهای سیستمی در درایو * f_mkfs - Create a file system on the drive

        * f_forward - Forward file data to the stream directly

        برای تغییر پوشه جاری * f_chdir - Change current directory

        برای تغییر درایو جاری * f_chdrive - Change current drive

        * f_getcwd - Retrieve the current directory
        * f_gets - Read a string
        * f_putc - Write a character
        * f_puts - Write a string
        * f_printf - Write a formatted string

        و این هم توابع دیسک یا همون CD کارت خودمون

        برای اینیشیال دیسک * disk_initialize - Initialize disk drive

        برای خوندن مشخصات دیسک * disk_status - Get disk status

        برای جوندن دیسک * disk_read - Read sector(s)

        برای نوشتن دیسک * disk_write - Write sector(s)

        * disk_ioctl - Control device dependent features

        برای خوندن زمان جاری * get_fattime - Get current time

        اونهایی هم که توضیح ندارن یا خودم نمیدونم دقیقا برای چه کاریه یا استفاده نکردم
        تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
        به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

        دیدگاه


          #34
          پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

          البته باید بگم همه این توابع به لایبرری کدویژن های جدید اضافه شده
          فقط کافیه توی منوی Configure < project رفته و توی سربرگ C Compiler برید و باز توی سربرگ Libraries تیک MMC/SD/SD HC Card and FAT Support رو بزنید
          تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
          به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

          دیدگاه


            #35
            پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

            چیزی که اینجا خیلی مهمه و من یادم رفت بگم فایل ffconf.h هست که از فایل ff.h انکلود شده
            این فایل کلا برای تنظیم قابلیتهای فت ما هست که باید قبل از همه توضیح میدادم ولی شرمنده فراموش شد :redface:

            حالا توی این فایل چی هست ؟
            اینجا امکانات توابع فت دیفاین شده و شما میتونید چیزهایی که نمیخواین و از توابع کم کنید یا توابع مورد نیاز رو فعال کنید

            define _FS_TINY
            با یک کردن این دیفاین حجم توابع به میزان قابل توجه کم میشه البته یه توضیحاتی هم خودش داده

            define _FS_READONLY
            0 برای رید و رایت
            1 برای فقط رید همون ریدونلی یا فقط خواندنی

            define _FS_MINIMIZE
            0 محدودیتی ایجاد نمی کنه
            1 توابع f_stat و f_getfree و f_unlink و f_mkdir و f_chmod و f_truncate و f_rename رو خذف میکنه
            2 علاوه بر توابع یک توابع f_opendir و f_readdir رو هم حذف میکنه
            3 علاوه بر توابه 1 و 2 تابع f_lseek هم خذف میشه

            define _USE_STRFUNC
            0 توابع رشته ای رو غیر فعال میشه
            1 توابع رشته ای رو فعال میکنه

            define _USE_MKFS
            0 تابع f_mkfs غیر فعال میشه
            1 تابع f_mkfs فعال میشه

            define _USE_FORWARD
            0 تابع f_forward غیر فعال
            1 تابع f_forward فعال میشه

            define _USE_FASTSEEK
            0 انتقال سریع غیر فعال میشه
            1 انتقال سریع فعال میشه

            define _CODE_PAGE
            برای تعریف کدپیج استفاده میشه که برای اضافه کردن حروف زبان خاص هست که اگر یک باشه فقط کدهای اسکی هست و یا میتونید از لیستش زبانی رو که مد نظرتون هست انتخاب کنید و کد اونو وارد کنید

            define _USE_LFN
            برای اینکه بتونید اسم کامل فایل یا پوشه رو داشته باشید باید مقدار این دیفاین بین 1 تا 3 باشه و اگر 0 باشه غیر فهال هست
            define _MAX_LFN
            برای وارد کردن ماکزیمم کاراکتر اسم فایل یا پوشه ها هستش البته در صورتی که _USE_LFN فعال باشه

            یه تعدادی هم هست که زیاد به کار نمیان و پر مصرفشون همسن ها بود که توضیح دادم
            تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
            به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

            دیدگاه


              #36
              پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

              سلام آقای اسدی . این طوری که من فهمیدم برای دانستن اینکه چه فایلهایی و با چه نامی در یک رم هست باید از تابع f_readdir استفاده کرد.
              میدونم درخواستم یکم زیاد هست اما برای شما که این تاپیک رو راه انداختید فکر نکنم زیاد ناراحت کننده باشه از لحاظ انتقال آموخته ها به دیگران .
              امکانش هست که یک مثال خیلی کوچک فقط برای کار با این تابع بنویسید که یه لیستی از فایل های درون mmc رو بدست بیاره . آخه فکر کنم اولین کار مهم با mmc استفاده از این تابع باشه . اگر این کار رو انجام بدید یا حداقل یه چند خط برنامه بنویسید در حق بنده لطف کردید

              یه جور دیگه سوالم رو مطرح می کنم . شما در مثال mp3 پلیر تون وقتی در آغاز فولدرها را نشون می دادید یا در فولدر ها لیستی از mp3ها رو نشون میدادید که هر کدوم رو که می خواستید اجرا می کردید . من دنبال قسمت لیست کردن فایل ها یا فولدرها هستم البته اگر زحمتی براتون نداشته باشه . البته بگم تازه اول کار هست من با شما هنوز کار دارم . :biggrin:

              دیدگاه


                #37
                پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                نوشته اصلی توسط ma-bah
                سلام آقای اسدی . این طوری که من فهمیدم برای دانستن اینکه چه فایلهایی و با چه نامی در یک رم هست باید از تابع f_readdir استفاده کرد.
                میدونم درخواستم یکم زیاد هست اما برای شما که این تاپیک رو راه انداختید فکر نکنم زیاد ناراحت کننده باشه از لحاظ انتقال آموخته ها به دیگران .
                امکانش هست که یک مثال خیلی کوچک فقط برای کار با این تابع بنویسید که یه لیستی از فایل های درون mmc رو بدست بیاره . آخه فکر کنم اولین کار مهم با mmc استفاده از این تابع باشه . اگر این کار رو انجام بدید یا حداقل یه چند خط برنامه بنویسید در حق بنده لطف کردید

                یه جور دیگه سوالم رو مطرح می کنم . شما در مثال mp3 پلیر تون وقتی در آغاز فولدرها را نشون می دادید یا در فولدر ها لیستی از mp3ها رو نشون میدادید که هر کدوم رو که می خواستید اجرا می کردید . من دنبال قسمت لیست کردن فایل ها یا فولدرها هستم البته اگر زحمتی براتون نداشته باشه . البته بگم تازه اول کار هست من با شما هنوز کار دارم . :biggrin:
                دقت کنید که این a برای درست دیده شدن دستورهاست پس اشتباه نکنید و باید حذف بشه
                اول اینکه باید قبل از هر کاری این دو تابع رو برای اینشیال دیسک و درایو استفاده کنی البته فقط یک بار در اول برنامه
                f_mount(0,&fs);
                disk_initialize(0);a
                اکر توی برنامه من هم دقت کنی پیدا میکنی
                بعدش برای لیست کردن نام پوشه ها و فایلها دو تابه نوشتم البته ریزکاری زیاد داره
                get_albums();a
                get_tracks();a
                sort_items();a
                که توی فایل file_tools.c هست
                a
                کد:
                static
                UINT get_tracks            // Number of found tracks 
                    (        
                    char* dirname,        // Directory to be scanned 
                    BYTE mode           // 0:Create UID, 1:Create Track List 
                    )
                    {
                    UINT ntrks;
                    DIR dir;
                    FILINFO fno;
                    DWORD crc, d;
                    BYTE b;
                    BYTE *fn; 
                    BYTE data[24];
                     
                    if (f_opendir(&dir, dirname) != FR_OK) return 0;
                    fno.lfname = data;
                	fno.lfsize = sizeof(data);
                	ntrks = 0;
                    while (f_readdir(&dir, &fno) == FR_OK && fno.fname[0]) 
                        {
                        if (fno.fattrib & AM_DIR) continue;
                        if (!mode) 
                            {
                            d = (fno.fsize << 16) | fno.ftime;
                            crc = CrcReg;
                            for (b = 32; b; d >>= 1, b--) 
                                {
                                crc <<= 1;
                                if (d & 1) crc |= 1;
                                if (crc & 0x10000) crc ^= 0x11021;
                                }
                            CrcReg = (WORD)crc;
                            }
                        fn = *fno.lfname ? fno.lfname : fno.fname;
                        if ((ntrks < MAX_TRKS ) &&   (  
                                strstrf(fn, ".MP3") || 
                                strstrf(fn, ".mp3") ||
                                strstrf(fn, ".WMA") ||
                                strstrf(fn, ".wma") || 
                                strstrf(fn, ".WAV") ||
                                strstrf(fn, ".wav") || 
                                strstrf(fn, ".MID") ||
                                strstrf(fn, ".mid") ||
                                strstrf(fn, ".BMP") ||
                                strstrf(fn, ".bmp") ))     
                            { 
                            strcpy(TrackTbl[ntrks], fn);
                            ntrks++;
                            }
                        } 
                    sort_items(TrackTbl, ntrks);
                    return ntrks;
                    }
                
                static
                UINT get_albums()    // Number of found albums 
                	{
                    UINT ndirs = 0;
                    DIR dir;
                    FILINFO fno;
                    BYTE res;
                    BYTE *fn;
                    BYTE data[24];
                     
                    fno.lfname = data;
                	fno.lfsize = sizeof(data);
                    res = f_opendir(&dir, "");
                     
                    if (res == FR_OK) 
                    	{
                        do 
                        	{
                            res = f_readdir(&dir, &fno);
                            if (res != FR_OK || !fno.fname[0]) break;
                            if ((fno.fattrib & AM_DIR) && get_tracks(fno.fname, 0)) 
                            	{
                                fn = *fno.lfname ? fno.lfname : fno.fname; 
                                //strcpy(&AlbumTbl[ndirs][0], fn);
                                strcpy(AlbumTbl[ndirs], fn);
                                ndirs++;
                            	} 
                        	} while (ndirs < MAX_ALBMS);
                    	}
                    sort_items(AlbumTbl, ndirs);
                    return ndirs;
                	}
                a
                تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                دیدگاه


                  #38
                  پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                  با سلام
                  امکانش هست برنامه این پروژه رو به زبان شیرین بیسیک هم قرار بدین تا ما بیسیکی ها هم ازش استفاده کنیم
                  روزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است

                  دیدگاه


                    #39
                    پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                    نوشته اصلی توسط جعفر رضائی
                    با سلام
                    امکانش هست برنامه این پروژه رو به زبان شیرین بیسیک هم قرار بدین تا ما بیسیکی ها هم ازش استفاده کنیم
                    دوست من این برنامه حدود 60000 خط برنامه تو c هیت خودت فکرشو بکن اگر تو بیسیک بنویسم چی میشه
                    نه تو میکرو جا میشه و فکر کنم این بیسک کام شما هنگ کنه و نتونه کامپایل بکنه
                    این اخری شوخی بود
                    تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                    به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                    دیدگاه


                      #40
                      پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                      نوشته اصلی توسط POLESTAR
                      دقت کنید که این a برای درست دیده شدن دستورهاست پس اشتباه نکنید و باید حذف بشه
                      اول اینکه باید قبل از هر کاری این دو تابع رو برای اینشیال دیسک و درایو استفاده کنی البته فقط یک بار در اول برنامه
                      f_mount(0,&fs);
                      disk_initialize(0);a
                      اکر توی برنامه من هم دقت کنی پیدا میکنی
                      بعدش برای لیست کردن نام پوشه ها و فایلها دو تابه نوشتم البته ریزکاری زیاد داره
                      get_albums();a
                      get_tracks();a
                      sort_items();a
                      که توی فایل file_tools.c هست
                      a
                      کد:
                      static
                      UINT get_tracks            // Number of found tracks 
                          (        
                          char* dirname,        // Directory to be scanned 
                          BYTE mode           // 0:Create UID, 1:Create Track List 
                          )
                          {
                          UINT ntrks;
                          DIR dir;
                          FILINFO fno;
                          DWORD crc, d;
                          BYTE b;
                          BYTE *fn; 
                          BYTE data[24];
                           
                          if (f_opendir(&dir, dirname) != FR_OK) return 0;
                          fno.lfname = data;
                      	fno.lfsize = sizeof(data);
                      	ntrks = 0;
                          while (f_readdir(&dir, &fno) == FR_OK && fno.fname[0]) 
                              {
                              if (fno.fattrib & AM_DIR) continue;
                              if (!mode) 
                                  {
                                  d = (fno.fsize << 16) | fno.ftime;
                                  crc = CrcReg;
                                  for (b = 32; b; d >>= 1, b--) 
                                      {
                                      crc <<= 1;
                                      if (d & 1) crc |= 1;
                                      if (crc & 0x10000) crc ^= 0x11021;
                                      }
                                  CrcReg = (WORD)crc;
                                  }
                              fn = *fno.lfname ? fno.lfname : fno.fname;
                              if ((ntrks < MAX_TRKS ) &&   (  
                                      strstrf(fn, ".MP3") || 
                                      strstrf(fn, ".mp3") ||
                                      strstrf(fn, ".WMA") ||
                                      strstrf(fn, ".wma") || 
                                      strstrf(fn, ".WAV") ||
                                      strstrf(fn, ".wav") || 
                                      strstrf(fn, ".MID") ||
                                      strstrf(fn, ".mid") ||
                                      strstrf(fn, ".BMP") ||
                                      strstrf(fn, ".bmp") ))     
                                  { 
                                  strcpy(TrackTbl[ntrks], fn);
                                  ntrks++;
                                  }
                              } 
                          sort_items(TrackTbl, ntrks);
                          return ntrks;
                          }
                      
                      static
                      UINT get_albums()    // Number of found albums 
                      	{
                          UINT ndirs = 0;
                          DIR dir;
                          FILINFO fno;
                          BYTE res;
                          BYTE *fn;
                          BYTE data[24];
                           
                          fno.lfname = data;
                      	fno.lfsize = sizeof(data);
                          res = f_opendir(&dir, "");
                           
                          if (res == FR_OK) 
                          	{
                              do 
                              	{
                                  res = f_readdir(&dir, &fno);
                                  if (res != FR_OK || !fno.fname[0]) break;
                                  if ((fno.fattrib & AM_DIR) && get_tracks(fno.fname, 0)) 
                                  	{
                                      fn = *fno.lfname ? fno.lfname : fno.fname; 
                                      //strcpy(&AlbumTbl[ndirs][0], fn);
                                      strcpy(AlbumTbl[ndirs], fn);
                                      ndirs++;
                                  	} 
                              	} while (ndirs < MAX_ALBMS);
                          	}
                          sort_items(AlbumTbl, ndirs);
                          return ndirs;
                      	}
                      a
                      ممنون . من یکم گیج شدم . میشه در مورد این سه تابع که گفتید یکم توضیح بدید البته توضیح کلی مثلا ورودی و خروجی هر تابع چی هست مثل متغیرهای ntrks , ndirs, Album Tbl, trackTbl و دقیقا چی رو بر می گردونند و به طور دقیق تر تابع sort_items چه کار می کنه یه سری تابع توش بود نمی دونم مربوط به lcd هست یا نه مثلا memcpy چی هست؟
                      یه چیز دیگه مثلا در مورد تابع get_album می دونم که خروجیش ndirs تعداد فولدرهاست و اون طوری که من فهمیدم اسم فولدرها در آرایه albumTbl ذخیره می شه و باز اونطوری که من فهمیدم اسم فولدرها توسط دستور
                      strcpy(AlbumTbl[ndirs], fn); در این آرایه ذخیره می شه اما اون چیزی که من نفهمیدم اینه که دقیقا strcpy کجای برنامه ی شما قرار داره ؟؟؟

                      دیدگاه


                        #41
                        پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                        واقعا دست شما درد نکنه بسیار عالی است.
                        لطفا برای درک بهتر کدهای کانفیگ شماتیک مدار را هم بگذارید

                        دیدگاه


                          #42
                          پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                          خدا از حق اینایی که میشینن سایتارو میبمدن نگذره مخصوصا اونای که دستور بستن این سایتارو میدن :cry2:
                          به عذای بچه هاشون بشینن انشالا :cry2: :angry:
                          ا قا ترو خدا این فایل هارو ضمیمه کنید ما بچه مثبتیم سد شکن ندارم :cry:
                          [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                          دیدگاه


                            #43
                            پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                            سلام آقای اسدی
                            آیا امکان این هست که با یک سری تغییرات یا اضافه کردن فایل بتوان فایل های
                            تصویری رو هم پخش و مشاهده کرد؟
                            اگه امکانش باشه، لطفا یه کم در موردش توضیح بدین.
                            ممنون

                            دیدگاه


                              #44
                              پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                              یه سوال از صاحب پروژه صاحب شرکت یه ار چی که اسمشو میزارین :mrgreen::
                              این مدار رو میفروشین ؟ قیمت ؟
                              pcb ? قیمت ؟
                              بچه کدوم شهرین ؟
                              شد 3 تا :bye
                              [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                              دیدگاه


                                #45
                                پاسخ : تحلیل سورس MP3 Player v2.0 با LCD ELT240320ATP تمام رنگی

                                نوشته اصلی توسط حامد رحیمی
                                یه سوال از صاحب پروژه صاحب شرکت یه ار چی که اسمشو میزارین :mrgreen::
                                این مدار رو میفروشین ؟ قیمت ؟
                                pcb ? قیمت ؟
                                بچه کدوم شهرین ؟
                                شد 3 تا :bye
                                دوست من همه این سوالها قبلا جواب داده شده
                                بله 600000R
                                بله 120000R
                                تبریز اگر روی اسم یوزر من اگر کلیک کنید جزیاتش رو هم می تونید ببینید
                                تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                                به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                                دیدگاه

                                لطفا صبر کنید...
                                X