اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط POLESTAR
    فکر نمیکردم از این پست اینطوری استقبال سردی بشه
    کسی سوالی نداره؟
    اگر انطوری بیخیال بشیم
    ضمن تشکر و تقدیر مجدد از شما به خاطر در اختیار قرار دادن نتیجه زحماتتان و پیگیری های بعدی، به این نکته توجه کنید که آمار افرادی که مستعد تحلیل یک کد مفصل C باشند چندان زیاد نیست و نباید آن را به حساب بی توجهی به کار خود بگذارید. بنابراین به این زودی دلسرد نشوید و به کار خود ادامه بدهید.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


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

      سلام
      کتابخانه LCD ELT240320ATP رو تو پروتئوس رو از کجا می تونم پیدا کنم ؟
      آیا قابلیت شبیه سازی داره ؟
      لطفا درباره راه اندازی تاچ این lcd توضیح می دهید :job: :job: :job:
      تشکر

      دیدگاه


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

        خواهشن ادامه بدید جناب POLESTAR . داریم استفاده می‎کنیم از نوشته‎هاتون
        ممنون
        :bye

        دیدگاه


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

          جناب اسدی داریم استفاده میکنیم . لطفا ادامه بدید.

          با تشکر فراوان از شما :smile:
          مهم نیست که چه اندیشه ای در سر و چه ترسی در دل دارید؛ مهم آن است که بیکار ننشینید و دست به کاری بزنید و وارد میدان عمل بشوید.

          نمی توانید به کودکی بیاموزید که از خود مواظبت کند، مگر آنکه او را آزاد بگذارید تا برای مواظبت از خود بکوشد؛ ممکن است اشتباه کند، ولی دانایی او از میان همین اشتباهات سرچشمه می گیرد.

          دیدگاه


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

            بنده نیز موافق به ادامه هستم :job: :job: :job: :job: :job:
            هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
            بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
            میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

            تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

            دیدگاه


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

              با تشکر از همتون چشم ادامه میدیم
              خوب دوستان اگر نیازی به تحلیل هر کدوم از این توابع بگید
              ولی برنامه MP3 Player یه مثال خوبه من تقریبا از همه این توابع توی این برنامه استفاده کردم میتونید برای درک کامل یه نگاهی بهش بندازید
              فقط کافیه تو فایل MAIN.C سرچ کنید LCD
              اکر کفایت میکنه بریم به فایل های بعدی یا اگر جوابتون نه است سوال کنید (من وقتی میبینم کسی سوال نمیکنه احساس تنهایی میکنم) :redface:
              تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
              به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

              دیدگاه


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

                نوشته اصلی توسط meran asadi
                سلام
                کتابخانه LCD ELT240320ATP رو تو پروتئوس رو از کجا می تونم پیدا کنم ؟
                آیا قابلیت شبیه سازی داره ؟
                لطفا درباره راه اندازی تاچ این lcd توضیح می دهید :job: :job: :job:
                تشکر
                دوست من شرمنده من در مورد پروتئوس چیزی نمیدونم و باهاش زیاد کار نکردم
                در مورد تاچ هم باید بگم باید صبر کنی تا به اونجا برسیم
                تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                دیدگاه


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

                  نوشته اصلی توسط POLESTAR
                  با تشکر از همتون چشم ادامه میدیم
                  خوب دوستان اگر نیازی به تحلیل هر کدوم از این توابع بگید
                  ولی برنامه MP3 Player یه مثال خوبه من تقریبا از همه این توابع توی این برنامه استفاده کردم میتونید برای درک کامل یه نگاهی بهش بندازید
                  فقط کافیه تو فایل MAIN.C سرچ کنید LCD
                  اکر کفایت میکنه بریم به فایل های بعدی یا اگر جوابتون نه است سوال کنید (من وقتی میبینم کسی سوال نمیکنه احساس تنهایی میکنم) :redface:
                  ممنون که تصمیم به ادامه ی کار گرفتید . من به شخصه دوست دارم که روی توابع مربوط به fat و sd کار رو ادامه بدید

                  دیدگاه


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

                    با سلام میشه در مورد توابع فونت توضیح بدید که چه جوری یک فونت را لود میکنید و روی lcd نشون میدید؟توی lookup table هر فونت از چند سطر تشکیل شده؟برای bold کردن چه کار کردید؟کلا روتین های فونت را توضیح بدید ممنونم

                    دیدگاه


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

                      سلام :smile:
                      اگه ممکنه قسمت خوندن از مموری و نشون دادن اطلاعات رو lcd رو توضیح بدید (منظورم توابع قسمت fat و bmp هست) اینا به نظر سخت تر میاد .

                      با تشکر

                      دیدگاه


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

                        نوشته اصلی توسط POLESTAR
                        با تشکر از همتون چشم ادامه میدیم
                        خوب دوستان اگر نیازی به تحلیل هر کدوم از این توابع بگید
                        اکر کفایت میکنه بریم به فایل های بعدی یا اگر جوابتون نه است سوال کنید (من وقتی میبینم کسی سوال نمیکنه احساس تنهایی میکنم) :redface:
                        فایل های مربوط به bmp فقط میتونه تصاویری که به سایز LCD هستند رو نشون بده؟ برای تصاویر بزرگ تر کاری نمیشه کرد؟
                        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                        دیدگاه


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

                          شرمنده از اینکه یه هفته نبودم
                          اول از همه اگر اشتباه تایپی یا املایی بود شرمنده شما ببخشید :icon_razz:
                          امروز میخوام در مورد تابع
                          void LCDPrintStr(unsigned char line,unsigned char column,char *str,LCD_mode_t mode);
                          که برای نوشتن متن رو LCD به کار میره بیشتر توضیح بدم
                          اینت تابع خروجی نداره ولی چهارتا وردی داره
                          1 unsigned char از اسمش هم پیداست سطر که میخوایم متن تو اون سطر باشه (این LCD در حالت عمودی به 20 سطر و درحالت افقی به 15 سطر تقسیم شده)
                          2 unsigned char column این متغیر هم ابتدای متن میگیره (که میتونه درحالت عمودی تا 240 و در حالت افقی تا 320 باشه)
                          3 char *str متنی هست که قراره چاپ بشه و از نوع رشته و در رم باید باشه
                          4 LCD_mode_t mode مود نوشتن هست و سه حالت داره
                          درمورد این مود هم باید بگم که
                          1 LCD_MODE_NORMAL یعنی رنگ خود متن که با تابع LCDSetFontColor تعریف شده و رنگ جاهای خالی متن هم با رنگی که با تابع LCDSetBackColor تعریف شده پر میشه
                          LCD_MODE_INVERSE 2 یعنی رنگ خود متن که با تابع LCDSetFontColor تعریف شده و رنگ جاهای خالی متن هم با مخالف (نات) رنگی که با تابع LCDSetBackColor تعریف شده پر میشه
                          LCD_MODE_FULL 3 یعنی رنگ خود متن که با تابع LCDSetFontColor تعریف شده و رنگ جاهای خالی متن هم با رنگی قبلا بوده پر میشه

                          خود تابع رو اگر دقط کنید از یک while هست که توش از تابع
                          void LCDCharDisp(char charactor,LCD_pos_t sx,LCD_pos_t sy,LCD_mode_t mode)
                          که برای نوشتن یک کاراکتر هست استفاده شده یعنی توی این while ما یکی یکی کاراکترهارو به این تابع میدیم تا تو LCD چاپ بشه
                          بقییه وایل هم برای پاک کردن جاهای خالی هست اگر یادتون باشه یه توظیحی در مورد تابع
                          void LCDSetVaryWidth(unsigned char on)
                          داده بودم که کارش فشورده کردن متن هست اگر به این تابع مقدار یک بدیم متغیر vary_width_on یک میشه و در نتیجه وارد IF شده و دستور
                          posx += last_non_zero-first_non_zero+char_gap; اجرا میشه این دستور مقدار posx (موقعیت X LCD ) رو به مقدار جاهای خالی فونت کم میکنه
                          ولی خود تابع
                          void LCDCharDisp(char charactor,LCD_pos_t sx,LCD_pos_t sy,LCD_mode_t mode)
                          این تابع هم مثل تابع قبل چهار ورودی مشابه داره و خروجی نداره
                          تنها تفاوت این دو تابه اینه که سومین ورودی اولی رشته یا متن هست در حالی که این تابه کاراکتر میگیره
                          ببینیم توی تابه چه خبره
                          این تابه کمی بزرگه ولی همشو توضیح میدم

                          void LCDCharDisp(char charactor,LCD_pos_t sx,LCD_pos_t sy,LCD_mode_t mode) //low level function to print a character on LCD
                          {
                          unsigned int x,y;
                          unsigned char i,j;
                          LCD_pos_t ex,ey;
                          unsigned short c;

                          buf_store(charactor - 0x20);

                          if (vary_width_on)
                          {
                          ex = sx + (last_non_zero - first_non_zero) + char_gap - 1;
                          }
                          else
                          {
                          ex = sx + FONT_WIDTH - 1;
                          }

                          ey = sy + FONT_HEIGHT - 1;

                          LCDOutIns(LCD_INS_START_ADX);
                          LCDOutDat(sx);
                          LCDOutIns(LCD_INS_END_ADX);
                          LCDOutDat(ex);
                          LCDOutIns(LCD_INS_GRAM_ADX);
                          LCDOutDat(sx);
                          x = ex - sx + 1;

                          #ifndef LCD_ORN_PORTRAIT
                          sy = LCD_SIZE_Y - 1 - sy; // mirror start y address
                          ey = LCD_SIZE_Y - 1 - ey; // mirror end y address
                          LCDOutIns(LCD_INS_START_ADY);
                          LCDOutDat(ey);
                          LCDOutIns(LCD_INS_END_ADY);
                          LCDOutDat(sy);
                          LCDOutIns(LCD_INS_GRAM_ADY);
                          LCDOutDat(sy);//fix from bug of v1_00
                          y = sy - ey + 1;
                          #else
                          LCDOutIns(LCD_INS_START_ADY);
                          LCDOutDat(sy);
                          LCDOutIns(LCD_INS_END_ADY);
                          LCDOutDat(ey);
                          LCDOutIns(LCD_INS_GRAM_ADY);
                          LCDOutDat(sy);
                          y = ey - sy + 1;
                          #endif

                          LCDOutIns(LCD_INS_RW_GRAM);

                          if (mode == LCD_MODE_NORMAL)
                          {
                          for (j=0; j<y; j++)
                          for (i=0; i<x; i++)
                          {
                          if (buf_read(i,j))
                          {
                          LCDOutDat(font_color);
                          }
                          else
                          {
                          c = LCDInDat(); // ignore invalid data
                          c = LCDInDat();
                          LCDOutDat(c);
                          }
                          }
                          }
                          else
                          if (mode == LCD_MODE_INVERSE)
                          {
                          for (j=0; j<y; j++)
                          for (i=0; i<x; i++)
                          {
                          c = LCDInDat(); // ignore invalid data
                          c = LCDInDat();
                          if (buf_read(i,j))
                          {
                          LCDOutDat(~c);
                          }
                          else
                          {
                          LCDOutDat(c);
                          }
                          }
                          }
                          else
                          if (mode == LCD_MODE_FULL)
                          {
                          for (j=0; j<y; j++)
                          for (i=0; i<x; i++)
                          {
                          if (buf_read(i,j))
                          {
                          LCDOutDat(font_color);
                          }
                          else
                          {
                          LCDOutDat(back_color);
                          }
                          }
                          }
                          }

                          اگر دقت کنید این تابع به دو قسمت تقسیم شده
                          1 اینیشیال LCD
                          2 انتخاب نوع مود LCD (همونهایی که بالا توضیح دادم)
                          من توضیح خط به خط نمیدم اما اگر لازم بود و هر کجاش نا مفهوم بود بگین
                          توی این تابع ما از چندتا تابع که قبلا توضیح کارشونو دادم استفاده شده
                          unsigned char buf_read(unsigned char column,unsigned char row)
                          unsigned char buf_read(unsigned char column,unsigned char row)
                          void LCDOutDat(unsigned short dat)
                          unsigned short LCDInDat(void)
                          void LCDOutDat(unsigned short dat)
                          void buf_store(unsigned char charactor)
                          unsigned char buf_read(unsigned char column,unsigned char row)
                          فقط باید بگم این دو تابع اخری دیتای مورد نیاز برای یک کاراکتر رو از لیست فونت استخراج کرده و در رم قرار میده
                          و با دو تا FOR تو در توی داخل هر مود بایت به بایت دیتا رو در هر پیکسل قرار میدن
                          موفق باشید و سربلند
                          تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                          به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                          دیدگاه


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

                            با سلام
                            امروز میخوام توابع MMC رو براتون بگم
                            یکی از فایلهای انکلود شده در برنامه MMC.C هست که از 12-13 تا تابع تشکیل شده
                            چند تاشون برای SPI هستن و بقیش برای خود MMC

                            BYTE rcvr_spi (void)
                            برای خوندن یک بایت از SPI به کار میره
                            int wait_ready (void)
                            تاخیر برای پاسخ از دیوایس در SPI به کار میره
                            void deselect (void)
                            MMC رو دیسلکت میکنه
                            int select (void)
                            برای سلکت MMC به کار میره توی این تابع از تابه wait_ready استفاده شده که در صورت جواب ندادن MMC از تابه خارج و مقدار 0 برگردونده میشه ولی
                            در صورت پاسخگویی مقدار 1 برگردونده خواهد شد
                            void init_spi (void)
                            برای اینیشیال پینهای SPI و خود رجسترهای SPI به کار رفته و فقط یک بار استفاده میشه
                            void power_off (void)
                            این تابع تو این برنامه غیر فعال است که برای قطع ولتاژ MMC به کار میره
                            int rcvr_datablock (BYTE *buff,UINT btr)
                            برای خوندن یک بلوک دیتای MMC بکار میره
                            BYTE send_cmd ( BYTE cmd,DWORD arg)
                            برای نوشتن کامند در MMC بکار میره
                            DSTATUS disk_initialize (BYTE drv)
                            برای تشخیص و اینشیال نوع MMC بکار میره (SD v1 , SD v2 , SD v3 , MMC)
                            DRESULT disk_read (BYTE drv,BYTE *buff,DWORD sector,BYTE count)
                            برای خوندن دیتا از MMC بکار میره
                            DRESULT disk_write (BYTE drv,BYTE *buff,DWORD sector,BYTE count)
                            برای نوشتن دیتا در MMC بکار میره البته چون نیازی بهش نیست توضیحش کردم
                            void disk_timerproc (void)
                            این تابع برای چک کردن وضعیت MMC بکار میره که باید توی یه تایمر 100HZ قرار بگیره
                            تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                            به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                            دیدگاه


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

                              سلام خیلی ممنون از اینکه توابع مربوط به mmc و sd رو شروع کردید. این طوری که من فهمیدم این کتابخونه یعنی mmc برای کار با fat نیست در واقع یه پیش نیاز هست (رفتم تو فاز درس و دانشگاه :icon_razz و کتابخونه ای که کارای اصلی برای fat رو انجام می ده کتابخونه ی ff هستش درسته ؟؟؟؟؟؟؟

                              دیدگاه


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

                                نوشته اصلی توسط ma-bah
                                سلام خیلی ممنون از اینکه توابع مربوط به mmc و sd رو شروع کردید. این طوری که من فهمیدم این کتابخونه یعنی mmc برای کار با fat نیست در واقع یه پیش نیاز هست (رفتم تو فاز درس و دانشگاه :icon_razz و کتابخونه ای که کارای اصلی برای fat رو انجام می ده کتابخونه ی ff هستش درسته ؟؟؟؟؟؟؟
                                منم منتظر بودم mmc شروع بشه. ممنون که شروع کردین.
                                منتها مشکل منم دقیقا مثل شما بود حل شد.یعنی مونده بودم چیجوری با fat کار کنم.
                                آره برای کار با fat از همون کتابخونه ff.h استفاده کن.
                                کدویژن جدید هم حتما بگیر بدرد می خوره
                                هستم اگر می روم گر نروم نیستم

                                دیدگاه

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