اطلاعیه

Collapse
No announcement yet.

آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

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

    آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

    با سلام خدمت کلیه دوستان عزیز :bye

    مقدمه :
    با توجه به درخواست برخی از دوستان مبنی بر نحوه استفاده از توابع فونت فارسی، عربی و انگلیسی در LCD های گرافیکی و با استفاده از توابع راه انداز و درایور LCD که خودشون دارند و باهاشون راحت ترند و بطور معمول از اونها استفاده میکنند، تصمیم گرفتم که یک آموزش قدم به قدم در این خصوص در چند مرحله تقدیم حضور دوستان کنم.

    [shadow=red,left]لطفا صبور باشید و از طرح هرگونه سوالی تا انتهای آموزش خودداری کنید! [/shadow] :mrgreen:

    از توجه شما ممنونم
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

    #2
    پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

    قسمت اول :
    در اولین قدم، باید یک LCD گرافیکی متناسب با نیازمون انتخاب کنیم. که من تصمیم گرفتم از LCD گوشی نوکیا 1100 برای این کار استفاده کنم، چونکه هم ارزونه ( 3 الی 4 هزار تومن ) و هم اینکه به راحتی هم قابل تهیه هستش و کمی هم با صفحه های نمایش مورد استفاده دوستان متفاوته و مشخصاتش هم از این قراره :


    Phone : NOKIA 1100
    Driver : PCF8814
    Resolution : 65x96 pixels
    Communication : I2C-BUS INTERFACE (HS-MODE)

    و اما قدم بعدی، نوشتن یه درایور برای این LCD هستش که بتونه اون رو مقدار دهی اولیه و راه اندازی و بطور خلاصه، مدیریت کنه، که البته این موضوع و جزئیاتش، بحث اصلی ما نیست!
    ولی این درایور به اجبار باید یه سری امکانات رو به ما بده، از جمله، امکان ست و ریست کردن یک پیکسل در هر نقطه مورد نظر، رسم یه چهار گوش تو پر و پاک کردن صفحه نمایش و همچنین برگردوندن حداکثر مقادیر X و Y ، اما سایر امکاناتش هم امکانات جنبی محسوب میشه و الزامی نیست .....
    لازم به ذکره که توابع فونت برای رسم کاراکترها از امکانات ست کردن یک پیکسل استفاده میکنه، برای رسم باکسهای نوشته از امکانات رسم چهار گوش تو پر و از حداکثر مقادیر X و Y هم برای چیدمان نوشته ها بهره میبره.

    و تا یادم نرفته، یه نکته هم در مورد این LCD اینه که امکان خوندن رم صفحه نمایش رو به ما نمیده، پس باید اطلاعات صفحه نمایش رو برای پردازش های خودمون Cache کنیم تا بتونیم باهاش کار کنیم! برای اطلاعات بیشتر به دیتاشیت مربوطه مراجعه بفرمائید... :surprised:

    مرسی
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

    دیدگاه


      #3
      پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

      قسمت دوم :

      لطفا به این نکته هم توجه داشته باشید، از اونجایی که من با WinAVR ( یا AVR-GCC ) برنامه مینویسم، پایه برنامه ها توی WinAVR هستش که بعد از تست، توی CodeVision و Keil هم تست میکنم و اگر ارور یا وارنینگ جدیی بود برطرف میکنم و در توابع و برنامه هایی که در این سلسله آموزش ارائه میکنم، با توجه به اینکه توی این سایت اکثرا با کدویژن کار میکنند، بطور پیش فرض تنظیمات مربوط به کدویژنه ....
      برای تغییر کامپایلر، یک سری موارد توی فایل app_config.h تعریف شدند ( که البته موارد مربوط به Keil رو از توش حذف کردم تا زیادی شلوع نشه ) لطفا اونا رو هم بررسی کنید و در صورت نیاز به تغییر کامپایلر مورد استفاده، تغییرات لازم رو در app_config.h اعمال کنید. ( با توجه به توضیحات فوق، کدویژنی ها نیاز به اعمال تغییرات ندارند! )
      برای اونایی که با WinAVR کار میکنند سه تا فایل هست Makefile و MCUprog_make و Global_make که در فایل Makefile تنظیمات اصلی کامپایلر هست و معمولا نیاز به تغییر نداره و در MCUprog_make اطلاعات پروگرامر هست که اگر بخواهید مستقیم میکرو رو پروگرام کنید نیاز به کنترل و اصلاح داره و نهایتا Global_make که اطلاعات پروژه توشه و تغییرات عمده به تناسب هر پروژه ای فقط توی این فایل انجام میشه و الی آخر ....
      و نکته بعدی اینکه بنا به همین توضیحات اخیر، کدویژنی ها با اعمال تغییرات اندکی میتونند از برنامه های تحت WinAVR استفاده کنند و نهایتا یه سری وارنینگ که خیلی هم مهم نیستند رو میگیرند ولی اونایی که Keil کار میکنند باید توی Include کردن ها یه کمی بیشتر دقت کنند! ولی در کل چونکه از C استاندارد استفاده میشه، مشکل خاصی در استفاده از کمپایلر های مختلف وجود نداره...

      ادامه داره .... :biggrin:
      مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

      Sh_Nourbakhsh@Yahoo.com

      http://s2.picofile.com/file/7170362468/_Wall_e_.jp

      دیدگاه


        #4
        پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

        قسمت سوم :

        از اینجا دیگه روال برنامه نویسی شروع میشه! و اول از همه، درایور LCD که البته همونطور که قبلا گفتم، کاری به جزئیاتش نداریم. این فایل ها توی پوشه N11 هستند و یه فایل به اسم N1100config.h و تنها فایلی که نیاز به اعمال تغییرات داره، چونکه تنظیمات سخت افزاری LCD این توئه! و بعدی هم فایل N1100.c که توابع راه انداز و سایر توابع مورد نیاز توشه و هیچ وقت هم نیاز به تغییرات نداره و نهایتا هم فایل N1100.h که شاید یه وقتی نیاز به تغییرات داشته باشه. برای هدف ما، باید N1100.h رو بیشتر بررسی کنیم!

        اینا رزولوشن صفحه رو بر میگردونن :
        #define N11_SIZE_X 96
        #define N11_SIZE_Y 65


        و اینا مقادیر حداکثری X و Y رو که جزو ملزومات کار ما هستند ( دقیقا با همین اسم ها ) :

        #define GetMaxX() ((unsigned char)N11_SIZE_X-1)
        #define GetMaxY() ((unsigned char)N11_SIZE_Y-1)


        و اینا هم توابع مورد نیاز که اصلی ها رو های لایت میکنم و در قسمت بعد ازشون استفاده میکنیم :

        //******************* Function Prototypes
        void N11_Init(void);
        void N11_CLS(void);
        void N11_Update(void);

        void N11_Contrast(unsigned char cont);
        void N11_Backlight(unsigned char x);

        void N11_SetPixel(unsigned char x, unsigned char y, N11_Pmode mode);
        unsigned char N11_ReadPixel(unsigned char x, unsigned char y);
        void N11_FillRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, N11_Pmode mode);

        و نتیجه کار میشه این :


        اینم فایل های مربوطه :
        http://s2.picofile.com/file/7151500107/N1100_P1.rar.html

        بازم ادامه داره ..... :mrgreen:
        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

        Sh_Nourbakhsh@Yahoo.com

        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

        دیدگاه


          #5
          پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

          قسمت چهارم :

          خوب، توی این مرحله باید توابع Graphic که توی یه پوشه به همین اسمه، به پروژه خودمون اضافه کنیم. این مرحله، از مراحل اصلی و اساسی کار ما محسوب میشه چونکه توابع فونت فقط از این توابع جهت رسم کاراکترها وغیره استفاده میکنند.

          در مورد توابع گرافیک باید بگم که این توابع امکان رسم خط افقی و عمودی و یا در هر جهت مورد نیاز، دایره تو پر و تو خالی، چهار گوش تو پر و تو خالی ساده و گوشه گرد، ست و ریست کردن نقطه رو از توابع اصلی LCD و مشخصا از روتین های N11_SetPixel و N11_FillRect به ارث میبره!

          تنها تغییرات لازم رو در فایل Graphic.h اعمال میکنیم، من این موارد رو های لایت میکنم :

          #define PutPixel(x, y, clr) N11_SetPixel(x, y, clr)
          #define RectangleFill(x1, y1, x2, y2, clr) N11_FillRect(x1, y1, x2, y2, clr)

          و

          #define VertLine(x, y, length, clr) N11_FillRect(x, y, x, y+length, clr)
          #define HoriLine(x, y, length, clr) N11_FillRect(x, y, x+length, y, clr)


          و این معنیش اینه که شما روتین های رسم پیکسل و چهارگوش تو پر رو از توابع LCD به توابع Graphic معرفی میکنید...

          و نتیجه کار میشه این :


          اینم فایل های مربوطه :
          http://s2.picofile.com/file/7152555478/N1100_P2.rar.html

          تا فردا، کلا خوش گذشت ...
          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

          Sh_Nourbakhsh@Yahoo.com

          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

          دیدگاه


            #6
            پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

            قسمت آخر :

            و اما تا اینجا تقریبا کل کار انجام شده! و حالا میخوایم فایل های فونت رو به سلامتی به پروژه اضافه کنیم و به بهره برداری برسونیم. ( روبان و قیچی رو حاضر کنید! ) برای این کار فقط کافیه که پوشه FONT رو در پوشه پروژه خودمون کپی کنیم و از امکاناتش استفاده کنیم.

            قبل از شروع به نوشتن، باید در ابتدای main.c خطوط زیر رو که فونت های موجودمون رو معرفی میکنند، اضافه کنیم.

            #include "FONT\font\f5x7.h" //english font 5x7
            #include "FONT\font\f9x14.h" //english font 9x14
            #include "FONT\font\AF12x16.h" //english/persian/arabic font 12x16


            سعی کردم که نحوه استفاده از این توابع رو با ذکر مثال هایی در فایل main.c آموزش داده باشم.

            و در نهایت نتیجه کار میشه این :


            اینم فایل های مربوطه :
            http://s2.picofile.com/file/7152634943/N1100_P3.rar.html

            حالا دیگه اگر سوال و نکته خاصی باشه در حد بضاعتم در خدمت دوستان هستم.

            باز هم از توجه و ابراز لطف همه دوستان تشکر میکنم، موفق و پیروز باشید....
            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه


              #7
              پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

              با سلام، :bye

              فایل پیوست، تکمیل شده فایل های قبلیه، البته ربط چندانی به این مبحث نداره!
              به توابع درایور LCD تابع نمایش تصویر BMP هم اضافه کردم، گفتم شما هم داشته باشید شاید بکارتون بیاد :mrgreen:

              http://s2.picofile.com/file/7154965913/N1100_3.rar.html

              این روتین اضافه شده :
              void N11_DrawBitmap(_const unsigned char *bitmap, unsigned char x, unsigned char y, N11_Pmode mode);

              توضیح اینکه این تابع تصویر BMP رو در هر نقطه X و Y که مشخص کنید رسم میکنه و mode هم میتونه BLACK یعنی حالت عادی و یا INVERS یعنی جای سیاه و سفید معکوس، باشه...

              خوش گذشت....
              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

              Sh_Nourbakhsh@Yahoo.com

              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

              دیدگاه


                #8
                پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                با سلام، :bye

                حسب درخواست برخی از دوستان، درایور KS0108 رو بازنگری کردم و بعد از اعمال تغییرات کلی، فونت فارسی و قابلیت رسم BMP در هر نقطه از صفحه نمایش رو اضافه نمودم.

                سعی کردم که این توابع رو طوری تغییر بدم که هم سرعت قابل قبولی داشته باشن و هم اینکه در WinAVR و CodeVision ( همزمان ) قابل استفاده باشن. نکته اینکه چون بیس برنامه نویسی من WinAVR هستش، یک سری وارنینگ توی CV مشاهده میشن که من سعی کردم تا حد امکان اونها رو برطرف کنم. کنترل کردم، وارنینگ های باقیمانده چیز مهمی نیستن! ( من توی هر دو محیط کمپایل و تست کردم )

                برای آشنایی با نحوه نوشتن برنامه هایی که همزمان بشه توی دوتا پلتفرم کمپایلشون کرد، به فایل app_config.h توجه بفرمائید. ( جنبه آموزشی داره و مفیده :mrgreen: ) توجه کنید که باید Define ها و Include های اختصاصی کامپایلر خودتون رو در این فایل و حتما در قسمت مربوط به خودش اضافه کنید.

                در ضمن سعی کردم که روتین های غیر مرتبط کاملا از همدیگه جدا باشن تا به فراخور برنامه خودتون اونها رو کم و زیاد کنید تا حجم و سرعت برنامتون بهینه باشه.

                تنظیمات سخت افزاری KS0108 در فایل ks0108config.h قرار داره و این تنها فایلی هست که شما با توجه به پروژه خودتون باید تغییرش بدید. توجه کنید که این درایور قابلیت اتصال در حالت پورت ( اتصال معمولی ) و اتصال در حالت Memory mapped رو داره که در همین فایل باید انتخاب کنید....

                اگر مشکلی مشاهده کردید و یا سوالی داشتید، من در خدمتم

                http://s2.picofile.com/file/7161140749/pGLCD4.rar.html
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                  نوشته اصلی توسط aivhl
                  با سلام، :bye

                  حسب درخواست برخی از دوستان، درایور KS0108 رو بازنگری کردم و بعد از اعمال تغییرات کلی، فونت فارسی و قابلیت رسم BMP در هر نقطه از صفحه نمایش رو اضافه نمودم.

                  سعی کردم که این توابع رو طوری تغییر بدم که هم سرعت قابل قبولی داشته باشن و هم اینکه در WinAVR و CodeVision ( همزمان ) قابل استفاده باشن. نکته اینکه چون بیس برنامه نویسی من WinAVR هستش، یک سری وارنینگ توی CV مشاهده میشن که من سعی کردم تا حد امکان اونها رو برطرف کنم. کنترل کردم، وارنینگ های باقیمانده چیز مهمی نیستن! ( من توی هر دو محیط کمپایل و تست کردم )

                  برای آشنایی با نحوه نوشتن برنامه هایی که همزمان بشه توی دوتا پلتفرم کمپایلشون کرد، به فایل app_config.h توجه بفرمائید. ( جنبه آموزشی داره و مفیده :mrgreen: ) توجه کنید که باید Define ها و Include های اختصاصی کامپایلر خودتون رو در این فایل و حتما در قسمت مربوط به خودش اضافه کنید.

                  در ضمن سعی کردم که روتین های غیر مرتبط کاملا از همدیگه جدا باشن تا به فراخور برنامه خودتون اونها رو کم و زیاد کنید تا حجم و سرعت برنامتون بهینه باشه.

                  تنظیمات سخت افزاری KS0108 در فایل ks0108config.h قرار داره و این تنها فایلی هست که شما با توجه به پروژه خودتون باید تغییرش بدید. توجه کنید که این درایور قابلیت اتصال در حالت پورت ( اتصال معمولی ) و اتصال در حالت Memory mapped رو داره که در همین فایل باید انتخاب کنید....

                  اگر مشکلی مشاهده کردید و یا سوالی داشتید، من در خدمتم

                  http://s2.picofile.com/file/7161140749/pGLCD4.rar.html
                  سلام دوست عزیز. واقعا از زحماتی که کشیدید تشکر میکنم.
                  یک سوال داشتم و اینه که فونت ها رو با چه نرم افزاری تهیه میکنید و میشه به راحتی فونت های ویندوز رو برای lcd تبدیل کنیم؟
                  بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                  موفقيت پيش رفتن است نه به نقطه ي پايان رسيدن
                  نلسون ماندلا

                  دیدگاه


                    #10
                    پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                    نوشته اصلی توسط رضا بابایی
                    سلام دوست عزیز. واقعا از زحماتی که کشیدید تشکر میکنم.
                    یک سوال داشتم و اینه که فونت ها رو با چه نرم افزاری تهیه میکنید و میشه به راحتی فونت های ویندوز رو برای lcd تبدیل کنیم؟
                    با سلام،

                    از ابراز لطفتون ممنونم....
                    من از برنامه فونت ادیتور H. Reddmann استفاده میکنم که برنامه اش توی پیوست لینک زیر در دایرکتوری Font هستش :
                    http://www.eca.ir/forum2/index.php?topic=52090.msg296549#msg296549

                    این فونت ادیتور قابلیت import فونت های ویندوز رو هم داره ولی توی فونت های با سایز کوچیک (ارتفاع کمتر از 10 ) فونتها خیلی خوب در نمیاد و کار دستی زیاد میبره که البته این مشکل این برنامه نیست، مشکل همه فونت ادیتورهاست. در کل نرم افزار راحت و خوبیه....
                    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                    Sh_Nourbakhsh@Yahoo.com

                    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                    دیدگاه


                      #11
                      پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                      با سلام.
                      بابت این مطالب آموزنده از aivhl واقعا ممنون و سپاسگزارم.
                      امروز که داشتم این آموزش رو می‎خوندم، سعی کردم مطالب رو بصورت منسجم
                      توی یه دونه فایل بنویسم.
                      الان هم لینک دانلودشو گذاشتم تا سایر دوستان هم به راحتی استفاده بکنن.

                      http://s2.picofile.com/file/7169424187/LCD_N1100.pdf.html

                      دیدگاه


                        #12
                        پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                        سلام


                        در ابتدا با تشکر از آقای نور بخش بخاطر مطالب ارزندهشان

                        سوالی که برای من پیش امده این است اگر بخواهیم تصویری در ابعاد x,y در نقطه X,Y ال سی دی به نمایش در بیاوریم باید به چه صورت باید عمل نماییم؟

                        نادانترين مردم کساني هستند که فکر مي کنند داناترين آنها هستند.

                        دیدگاه


                          #13
                          پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                          با سلام،

                          از اونجایی که شما نوع LCD رو مشخص نکردید، من برای هر دو مورد KS0108 و PCF8814 توضیح میدم.

                          اول روتین رسم تصویر :

                          KS108_DrawBitmap(bitmap, x, y, mode)
                          N11_DrawBitmap(bitmap, x, y, mode)

                          از نظر پارامترهایی که به این روتین ها ارسال میشه، توی هر دو مدل LCD بجز mode که کمی تفاوت داره، بقیه یک جور هستند. bitmap نام آرایه تصویر هست که در هدر فایل تصویر مشخص شده و x و y هم نقطه شروع رسم شکل هست که میشه گوشه سمت چپ و بالای تصویر و mode هم با توجه به توضیحات گذشته، حالت نمایش تصویر هست.

                          یعنی شما در زمان رسم تصویر فقط نقطه گوشه چپ - بالا و حالت نمایش رو مشخص میکنید و کاری به سایز تصویر ندارید، بلکه سایز تصویر، در ابتدای هدر فایل مربوطه باید ثبت شده باشه. پس به ابتدای هدر فایل تصویر تست توجه کنید :
                          کد:
                          //------------------------------------------------------------------------------
                          // File generated by LCD Assistant
                          // http://en.radzio.dxp.pl/bitmap_converter/
                          //------------------------------------------------------------------------------
                          
                          
                          #ifndef	Pic_H
                          	#define Pic_H
                          
                          	PROGMEM unsigned char test[] = {
                          	 	3,		// header size
                          	 	30,		// width
                          	 	30, 	// height
                          	
                          		0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,	0x01, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF,
                          		0xFF, 0x00,	0x00, 0xE0, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,	0x80, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x80, 0x80, 0xF8, 0x00, 0x00, 0xFF,
                          		0xFF, 0x00, 0x00, 0x07,	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x02, 0x03, 0x02, 0x03, 0x02,	0x02, 0x03, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0xFF,
                          		0x3F, 0x20, 0x20, 0x20, 0x20, 0x20,	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3F 
                          		};
                          
                          #endif //Pic_H

                          اینها باید توسط شما، بعد از تبدیل عکس به هگز، در ابتدای آرایه تصویر در هدر فایل اضافه بشه که با توجه به توضیحات مقابلشون مشخصه چی هستند :
                          3, // header size
                          30, // width
                          30, // height

                          اولی اندازه همین هدر اطلاعات هست که اینجا 3 بایته، دومی عرض و سومی ارتفاع تصویر هست ( اندازه تصویر )

                          در نهایت، شما در زمان رسم شکل در LCD کاری به اندازه تصویر نداری.....

                          ( راستش نمیدونم که جواب سوالتون رو گرفتید یا نه، اگر لازم به توضیحات بیشتر هست، لطفا اعلام کنید. )
                          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                          Sh_Nourbakhsh@Yahoo.com

                          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                          دیدگاه


                            #14
                            پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                            سلام

                            از اینکه در پاسخ دادن به سوالات اینگونه شکیبا هستید جای سپاس فراوان دارد



                            شما از نرم افزاز LCD Assistant استفاده کردید امکان داره در باره گزینه های
                            BYTE orientation
                            Include SIZE
                            SIZE endianness
                            Pixels/BYTE

                            توضیح دهید؟



                            من خودم برای عکس ها در ابعاد 128*64 از نرم افزار
                            glcd_editor

                            http://s2.picofile.com/file/71697376...ditor.exe.html

                            وبرای عکس ها در سایز کوچکتر از نرم افزار
                            LFG
                            http://s2.picofile.com/file/71697405...UPLFG.exe.html

                            امکان استفاده از این نرم افزازها وجود نداره؟
                            نادانترين مردم کساني هستند که فکر مي کنند داناترين آنها هستند.

                            دیدگاه


                              #15
                              پاسخ : آموزش استفاده از توابع فونت فارسی، عربی و انگلیسی برای LCD های گرافیکی

                              با سلام و ضمن تشکر از ابراز محبت سرکار عالی.....

                              باید عرض کنم، اینکه شما از چه نرم افزاری برای تبدیل تصویر به هگز استفاده میکنید اصلا مهم نیست، فقط نکته مهم اینه که آرایه ساخته شده نهایی با ساختار LCD شما همخوانی داشته باشه و بیشتر به LCD مربوط میشه که با توضیحات زیر بیشتر موضوع روشن میشه.

                              ترتیب ذخیره و نمایش پیکسل ها در انواع LCD ها ممکنه متفاوت باشه، به ندرت 16 بیتی هستند و اکثرا 8 بیتی، مثلا KS0108 , PCF8814 ,T6963 همگی 8 بیتی با پیکسل ها کار میکنند. یعنی شما برای دسترسی به یک پیکسل برای خوندن و یا نوشتنش، باید محل بایت مربوطه رو محاسبه کنید و رووش عملیات مورد نظرتون رو انجام بدید. این میشه Pixels/BYTE ، حالا همین 8 بیت هم ممکنه روی صفحه نمایش بطور افقی و یا عمودی به پیکسل ها اشاره داشته باشه، که معمولا عمودی هستش، مثلا KS0108 , PCF8814 عمودی اند و T6963 افقی هستش. این یعنی اینکه وقتی شما روی یک بایت مینویسید، 8 تا پیکسل روی LCD بطور افقی و یا عمودی ست و ریست میشن. به این میگن BYTE orientation حالا هر برنامه ای که این دو تا موضوع رو بر اساس LCD شما رعایت کنه، برای کار شما مناسبه. و این برنامه LCD Assistant تقریبا همه طیف LCD رو از این نظرها پوشش میده ( هر چند که در تبدیل تصاویر با ابعاد کوچک مشکل داره! )

                              و اما توی این برنامه LCD Assistant اگر شما Include SIZE رو تیک بزنید، چهار بایت اول، به ابعاد عرض و ارتفاع تصویر اختصاص پیدا میکنه ( دو بایت اول عرض و دو بایت دوم ارتفاع ) و اطلاعات اصلی تصویر از اون به بعد شروع میشه و SIZE endianness هم مشخص میکنه که اول بایت سنگین تر باشه یا بایت سبک تر ( یعنی مثلا برای 800 به این شکل 0x03, 0x20 باشه یا 0x20, 0x03 ) .....

                              در کل ساختار کلی هدر فایل نهایی استفاده شده توسط روتین های من، پس از اعمال تغییرات لازم توسط شما باید اینطوری باشه :

                              کد:
                              #ifndef	Pic_H
                              	#define Pic_H
                              
                              	PROGMEM unsigned char pic-name[] = {
                              	 	xx,		// 1-byte header size
                              	 	xx,		// n-byte width
                              	 	xx, 	// n-byte height
                              		
                              		xx, xx, xx, ......		// n-byte picture pixels data
                              		};
                              
                              #endif //Pic_H

                              البته خود من همیشه بعد از تبدیل تصویر به هگز توسط برنامه LCD Assistant یه فایل با ساختار کلی بالا درست میکنم که اسم آرایه تصویر ( pic-name ) و اون سه تا مقدار اول هم با توجه به ابعاد عرض و ارتفاع تووش ست شده و فقط دیتای تصویر رو از فایل درست شده توسط LCD Assistant کپی کرده و در قسمت دیتای تصویر هدر فایل خودم کپی میکنم و ازش استفاده میکنم......

                              width به اندازه n بایت،اندازه عرض تصویر و height به اندازه n بایت، اندازه ارتفاع تصویر رو مشخص میکنند و یک بایت header size با توجه به تعداد بایت های اشغالی توسط width و height مشخص میکنه که اطلاعات اصلی تصویر از بایت چندم آرایه شروع میشه. مثلا :

                              4, // header size
                              800, // width
                              32, // height

                              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                              Sh_Nourbakhsh@Yahoo.com

                              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                              دیدگاه

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