اطلاعیه

Collapse
No announcement yet.

کتابخانه K108 با قابلیت ایجاد کنترل

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

    کتابخانه K108 با قابلیت ایجاد کنترل

    کتابخانه برای LCD گرافیکی با چیپست K108 در عرض 128*64
    نمونه
    http://telec.persiangig.com/avr_amoo...imple_glcd.swf

    کتابخانه ای که نوشته ام هرچند هنوز کامل نشده و به این زودیها نیز فرصت نمی کنم روش کار کنم، اما امیدوارم مورد توجه دوست واقع بشه و خودشون تکمیلش کنند
    توابع نوشتن متن در هر جایی از lcd با تابع
    lcd_puts(font , address x, address y,Text,Laguage)
    lcd_putsf(font , address x, address y,Text,Laguage)
    lcd_putchar(font , address x, address y,char,Laguage)
    مثلا
    glcd_puts(font16x8,2,2,"Chnage Select",E_LETTER);
    glcd_puts(font16x8,15,11,str,E_LETTER);
    glcd_putchar(font16x8,15,11,’A’,E_LETT ER);
    توابع کشیدن عکس
    void glcd_imgset(char flash *str,char x,char y)
    عکس آرایه ای
    void glcd_imgarray(char flash *ff,char x,char y,char d)
    توابع کشیدن اشکال گرافیکی
    خواندن یک پیکسل
    char glcd_pixelr(char x,char y);
    پر کردن یک پیکسل
    void glcd_pixelw(char x,char y,char color);
    کشیدن یک خط
    void glcd_line(int x1, int y1, int x2, int y2,char wide, char dot,char space);
    کشیدن یک خط افقی
    void glcd_lineh(char x, char y, char length, char wide,char color);
    کشیدن یک خط عمودی
    void glcd_linev(char x, char y, char length, char wide,char color);
    کشیدن دایره
    void glcd_circle(int xc, int yc, int r,char fill,char color);
    کشیدن یک مستطیل
    void glcd_rect(char x1,char y1 , char x2,char y2,char wide,char fill,char color);
    در این کتابخانه همچنین چهار کنترل اصلی تعریف شده است
    کنترل button :برای بکارگیری آن باید یک ساختار از این رو بسازید
    BUTTON btn1;
    //********** Structures ************************
    struct BUTTON{
    unsigned char flash *font;
    char x;
    char y;
    char width;
    char height;
    char status;
    char *str;
    char language;
    };
    // Init Button 1
    btn1.x=5;
    btn1.y=40;
    btn1.font=font8x8;
    btn1.str=stback; //stback = “Back”
    btn1.status=_SELECT_;
    که شامل طول و عرض و موقعیت و وضعیت دکمه است و نوع فونت مورد استفاده و متن دکمه می باشد
    اگر status یا همان وضعیت می تواند سه وضعیت داشته باشد
    #define _NORMAL_ 0 حالت نرمال مقدار صفر
    #define _SELECT_ 1حالت انتخاب مقدار یک
    #define _CLICK_ 2حالت کلیک مقدار دو
    پس از تغییرات ساختار دکمه باید آن را نمایش داده ، که برای کشیدن آن از دستور زیر استفاده می شود
    glcd_button(&btn1);
    کنترل Processor bar :
    این کنترل از ساختار زیر باید ایجاد شود
    struct PROCESSORBAR{
    char x;
    char y;
    char width;
    char height;
    char min;
    char max;
    char scale;
    char control;
    char value;
    };
    x,y موقعیت مکانی کنترل، width,height طول و عرض کنترل، min,max حداکثر و حداقل مقداری که درحال نمایش آن هستیم، scale تعداد اشل بندی (نقطه های کنار کنترل) را مشخص می کند، و value مقداری که کنترل دارد و در حال نمایش آن هست
    هر بیت متغییر control برای تغییر قسمتی از کنترل می باشد
    بیت 0 برای تعیین رنگ کنترل
    بیت 1 برای تعیین افقی یا عمودی بودن کنترل (فقط نوع 000 در حالت افقی عمل می کند) و بقیه انواع کنترلها فقط در حالت عمودی کار می دهد
    بیت 2 نمایش عدد کنار اشل بندی کنار (خیلی روش کار نشده) و باید نمایش اشل هم یک شود
    بیت 3 اشل بندی را نمایش بدهد یا نه بطوری که با صفر کردن یک بیت scale یا همان اشل بندی نمایش داده نمی شود
    بیت 4 اشل بندی سمت راست قرار بگیرد یا سمت چپ اگر صفر باشد سمت راست و اگر یک باشد سمت چپ
    بیت 5و6و7 نوع کنترل را مشخص می کند
    اگر 000 به تر تیب از راست به چپ 5و 6و 7

    نوع 001 و 011 فقط عرض خط نشانده هنده با هم فرق دارد

    نوع 010 مثل بالا است ولی نمایشگر دارای لبه است

    نوع 100

    برای کشیدن یک prossecorbar از دستور زیر باید استفاده کرد
    glcd_processorbar(&اسم ساختار);
    کنترل checkbox
    از ساختار زیر استفاده می کند
    struct CHECKBOX{
    unsigned char flash *font;
    char x;
    char y;
    char status;
    char *str;
    char language;
    };
    تنها نکته در تعیین متغییر status است که سه وضعیت می تواند داشته باشد
    کلیک _CLICK_ یعنی حالت مارک شده
    حالت _SELECT_ یعنی فوکوس روش باشه
    حالت معمولی _NORMAL_ مارک نشده
    برای کشیدن کنترل هم از دستور زیر استفاده می شود
    glcd_checkbox(&اسم ساختار);
    برای کنترل radiobox هم مانند checkbox باید عمل کرد
    ساختار ایجاد آن به صورت زیر است
    struct RADIOBOX{
    unsigned char flash *font;
    char x;
    char y;
    char status;
    char *str;
    char language;
    };
    و دستور کشیدن آن
    glcd_radiobox(&اسم ساختار);
    کتابخانه خیلی جای کار داره اما از اونجایی که حالا حالاها وقت کامل کردن اون رو ندارم فکر کردم بهتر در اختیار دوستان قرار بگیره شاید شما کاملش کنید
    راستی به دلیل اینکه از رم میکرو استفاده نشده سرعت آن خیلی پایین اومده به دلیل اینکه برای کشیدن یا نوشتن هرچیزی باید مقدار درون حافظه LCD را خوانده تغییرات را انجام بدهد و دوباره به lcd بفرستد که سرعت را بشدت پایین می آورد. البته می توان با تغییر دستورات زیربنایی مانند خواندن و نوشتن،و چند تابع دیگر این مشکل سرعت را حل کرد اما باید از رم میکرو استفاده شود.
    چون هنوز کامل نیست برای اینکه دوستان که مایل باشند روی این کتابخانه کار کنند و نتایج خودشون رو جایی اعلام کنند این تایپک رو ایجاد کردم

    دانلود کتابخانه به همراه یک مثال
    http://telec.persiangig.com/avr_amoo...with_farsi.zip
    هیچ کس و هیچ چیز نمی تونه مانع رسیدنت به آرزوهات بشه مگر خودت

    #2
    پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

    واقعا جای تقدیر داره که شما برنامه رو در اختیار همه گزاشتید.
    فکر میکنم خیلی ها به همچین کتابخونه ای نیاز داشتند :applause:
    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

    دیدگاه


      #3
      پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

      سلام
      در ابتدا ممنونم به خاطر قرار دادن این کتابخانه خوب
      ببخشید برای ساخت کد عکس از چه نرم افزاری استفاده کردید .
      من با FastLCD و LCDAssistant کار کردم برنامه ایراد نگرفت اما در خروجی تصاویر را بهم میریزد
      در صورتی که عکس ساخته شما را به راحتی نمایش میدهد
      ابعاد عکس من 128*64
      لطفا نحوه ساخت کد عکس را توضیح دهید .
      ضمنا دو عدد ابتدای رشته عکس برای چی هست ....
      تو بگو ای سنگ صبور تو صبوری یا دل من
      تو بگو ای جام بلور تو شکستی یا دل من

      دیدگاه


        #4
        پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

        سلام خدمت شما دوست عزیز
        مرسی که اطلاع دادید، وقتی از عکس با طول 127 استفاده کنید با x,y غیر صفر ، به دلیل اینکه جمع x با طول عکس از مقدار مجاز بیشتر می شود و هنگامی که در زیر برنامه می خواهد عدد بزرگتر از مقدار مجاز را آدرس دهی کند وارد دستور تغییر خط شروع y می شود به همین دلیل عکس سمت راست با چپ هم خوانی ندارد که برای رفع آن این دستورات را در تابع glcd_write ابتدای خط قرار دهید این دستورات اجازه نوشتن در آدرسهای x بیشتر از 128 و y بیشتر از 64 را نمی دهد (تا وارد دستور دیگر نشود) .(کتابخانه رو با همین تغییر دوباره پلود کردم)
        void glcd_write(char x,char y,char d)
        {
        char nd,r,data,t=y&0x07;
        if(x>127)
        x=127;
        if(y>63)
        y=63;
        ببخشید برای ساخت کد عکس از چه نرم افزاری استفاده کردید .
        برای ساختن فونت و عکس من از FastLCD استفاده می کنم
        ضمنا دو عدد ابتدای رشته عکس برای چی هست ....
        طرز کار این دو عدد در عکس، نشان دهنده طول و عرض عکس می باشد که طول بر حسب پیکسل و عرض بر حسب تعداد page (یا همان تعداد پیکسلها تقسیم بر 8( که عکس اشغال می کند می باشد.
        هنگام ساختن عکسهای کوچکتر ماکزیمم طول و عرض(128x64) حتما سایز عکس را تغییر دهید زیرا باعث صرفه جویی در حجم برنامه و سرعت بالاتر در کشیدن عکس می شود، برای تغییر سایز در FastLCD بر روی آیکنی که فلش به سمت بالا و پایین دارد کلیک کنید.

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

        دیدگاه


          #5
          پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

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

          فقط 313 نفر...

          دیدگاه


            #6
            پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

            با سلام وممنون از کار قشنگتون آیا امکانش هست فونت فارسی را هم بهش اضافه کنید آقای aivhl در تاپیک زیر این فونت را قرار دادند البته برای winavr اگر این را اضافه کنید خیلی خوبه در ضمن برنامتون با کدویژنه درسته؟اینم لینک
            http://www.eca.ir/forum2/index.php?topic=52090.0

            دیدگاه


              #7
              پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

              سلام ممنون از راهنماییتون
              اگه بشه این کتابخانه را با کتابخانه لینک زیر تلفیق کرد فکر کنم یک کتابخانه بی نظیر برای ال سی دی گرافیکی بتوان ساخت
              http://sites.google.com/site/osamaslab/Home/projects-list/glcd-library
              تو بگو ای سنگ صبور تو صبوری یا دل من
              تو بگو ای جام بلور تو شکستی یا دل من

              دیدگاه


                #8
                پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

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

                دیدگاه


                  #9
                  پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

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

                  دیدگاه


                    #10
                    پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل


                    طبق درخواست دوستان ، با استفاده از کتابخانه کاربر aivhl فارسی نیز به کتابخانه اضافه شد . به دلیل اینکه توابع رو خودم نوشتن (با کمک از کتابخانه aivhl)، قابلیتهایی که در کتابخانه ایشان ذکر کردند (مانند چرخیدن متن، ...) در اینجا امکان پذیر نیست.
                    استفاده از کتابخانه به همان شیوه قبل است با این تفاوت که برای نوشتن متن (چه فارسی، چه انگلیسی) باید مشخص کنید مثلا
                    glcd_puts(فونت,مکان x ,مکان y, متن,زبان)
                    مثلا
                    کد:
                    glcd_puts(AF12x16,10,11,”Hello”,E_LETTER); //   Hello
                    glcd_puts(AF12x16,20,30,”سلام”,P_LETTER);   //    سلام
                    glcd_puts(AF12x16,10,40,”12345”,E_LETTER);   //   12345
                    glcd_puts(AF12x16,10,40,”12345”,P_LETTER);    //  12345
                    تابع putchar نیز پارامتر زبان به آن اضافه شده است.
                    در قسمت کنترلها به دکمه و چک باکس و رادیو باکس نیز متغییر زبان اضافه شده است.
                    مشکلاتی که ممکن است با فارسی نویسی روبرو شوید
                    1- حروف فارسی جدا از هم نمایش داده می شود
                    زبان را انگلیسی انتخاب کرده اید ، باید زبان را فارسی کنید
                    2- حروف فارسی درهم برهم نشان داده می شوند
                    فونت خود را چک کنید که فارسی دارد یا خیر ( در فونت های ارائه شده فقط فونت AF12x16 دارای فونت فارسی است).
                    3- حروف انگلیسی عکس نشان داده می شود
                    شما زبان خود را فارسی انتخاب کرده اید باید زبان را به انگلیسی تغییر دهید.
                    این کتابخانه قابلیت خواندن فونتها با عرض ثابت و متغییر را دارد پس می توانید با نرم افزارهایی مثلا FASTLCD نیز فونت طراحی کنید فقط تها نکته ای که دارد بایتهای header آن را باید تغییر دهید
                    در یک فونت 7 بایت اول header فونت هستند ، یعنی برای توصیف فونت استفاده می شوند
                    بایت 0 سایز فونت
                    بایت 1 نحوه رفرش کردن را تعیین می کند. اگر نحوه ذخیره بایتهای یک فونت به صورت زیر باشد باید صفر باشد

                    و اگر یک باشد بایتهای یک فونت باید به صورت زیر در جدول قرار گرفته باشد (FastLCD به صورت زیر فونت را طراحی و در جدول قرار می دهد)

                    بایت 2 : طول فونت
                    بایت 3 : عرض فونت ( دقت کنید که عرض فونت برحسب تعداد پیکسل تقسیم بر 8 می باشد ، مثلا اگر عرض 14 یا 16 باشد مقدار 3 را باید در این محل ذخیره کنید)
                    بایت 4: نشان دهنده این است که فونت با سایز ثابت است (اگر یک باشد) و یا با سایز متغییر (اگر صفر باشد)
                    بایت 5 : کد اسکی اولین بایتی که در جدول قرار گرفته می باشد
                    بایت 6:کد اسکی آخرین بایتی که در جدول قرار گرفته می باشد.
                    همچنین در یک فونت متغییر ترتیب به صورت زیر است
                    Header font
                    طول هر حرف از فونت (تعداد کل این اعداد باید با( آخرین کد – اولین کد) برابر باشد
                    داده های نمایش هر فونت
                    در آخر این کتابخانه خیلی بهتر از این می تواند نوشته شودو ایراداتی ممکن است داشته باشد، در صورت دیدن هرگونه اشکالی در کتابخانه لطفا اطلاع دهید.
                    کتابخانه در پست اول Update شد
                    باز هم از کاربر aivhl به خاطر کتابخانه بسیار کاملشان تشکر می کنم
                    هیچ کس و هیچ چیز نمی تونه مانع رسیدنت به آرزوهات بشه مگر خودت

                    دیدگاه


                      #11
                      پاسخ : کتابخانه K108 با قابل

                      سلام
                      من از کتابخونه استفاده کردم خیلی خوب تو شبیه سازی جواب میده ولی در عمل کار نمیکنه.
                      بعد از چند روز سر و کله زدن به این نتیجه رسیدم که پایه RW زمانش خیلی کمه با اضافه کردن Delay_us(5) در تابع Write() , Read()
                      مشکل حل شد و جواب داد.
                      حالا مشکل اینه که تو شبیه سازی کار نمیکنه ولی در عمل کار میکنه :eek: :eek:
                      در موقع نمایش هم تاخیر بوجود اومده یه جورایی ال سی دی کند شده. :sad:
                      من از کریستال  16 مگا و 8 مگا استفاده و دو نوع ال سی دی هم تعویض کردم ولی نشد.
                      دوستال لطفا راهنما کنند.
                      قومی متفکرند اندر ره دین
                      قومی بگمان فتاده در راه یقین
                      میترسم از آن که بانگ آید روزی
                      که ای بی خبران ، راه نه آن است و نه این...!

                      دیدگاه


                        #12
                        پاسخ : کتابخانه K108 با قابلیت ایجاد کنترل

                        نوشته اصلی توسط savameri

                        طبق درخواست دوستان ، با استفاده از کتابخانه کاربر aivhl فارسی نیز به کتابخانه اضافه شد . به دلیل اینکه توابع رو خودم نوشتن (با کمک از کتابخانه aivhl)، قابلیتهایی که در کتابخانه ایشان ذکر کردند (مانند چرخیدن متن، ...) در اینجا امکان پذیر نیست.
                        استفاده از کتابخانه به همان شیوه قبل است با این تفاوت که برای نوشتن متن (چه فارسی، چه انگلیسی) باید مشخص کنید مثلا
                        glcd_puts(فونت,مکان x ,مکان y, متن,زبان)
                        مثلا
                        کد:
                        glcd_puts(AF12x16,10,11,”Hello”,E_LETTER); //   Hello
                        glcd_puts(AF12x16,20,30,”سلام”,P_LETTER);   //    سلام
                        glcd_puts(AF12x16,10,40,”12345”,E_LETTER);   //   12345
                        glcd_puts(AF12x16,10,40,”12345”,P_LETTER);    //  12345
                        تابع putchar نیز پارامتر زبان به آن اضافه شده است.
                        در قسمت کنترلها به دکمه و چک باکس و رادیو باکس نیز متغییر زبان اضافه شده است.
                        مشکلاتی که ممکن است با فارسی نویسی روبرو شوید
                        1- حروف فارسی جدا از هم نمایش داده می شود
                        زبان را انگلیسی انتخاب کرده اید ، باید زبان را فارسی کنید
                        2- حروف فارسی درهم برهم نشان داده می شوند
                        فونت خود را چک کنید که فارسی دارد یا خیر ( در فونت های ارائه شده فقط فونت AF12x16 دارای فونت فارسی است).
                        3- حروف انگلیسی عکس نشان داده می شود
                        شما زبان خود را فارسی انتخاب کرده اید باید زبان را به انگلیسی تغییر دهید.
                        این کتابخانه قابلیت خواندن فونتها با عرض ثابت و متغییر را دارد پس می توانید با نرم افزارهایی مثلا FASTLCD نیز فونت طراحی کنید فقط تها نکته ای که دارد بایتهای header آن را باید تغییر دهید
                        در یک فونت 7 بایت اول header فونت هستند ، یعنی برای توصیف فونت استفاده می شوند
                        بایت 0 سایز فونت
                        بایت 1 نحوه رفرش کردن را تعیین می کند. اگر نحوه ذخیره بایتهای یک فونت به صورت زیر باشد باید صفر باشد

                        و اگر یک باشد بایتهای یک فونت باید به صورت زیر در جدول قرار گرفته باشد (FastLCD به صورت زیر فونت را طراحی و در جدول قرار می دهد)

                        بایت 2 : طول فونت
                        بایت 3 : عرض فونت ( دقت کنید که عرض فونت برحسب تعداد پیکسل تقسیم بر 8 می باشد ، مثلا اگر عرض 14 یا 16 باشد مقدار 3 را باید در این محل ذخیره کنید)
                        بایت 4: نشان دهنده این است که فونت با سایز ثابت است (اگر یک باشد) و یا با سایز متغییر (اگر صفر باشد)
                        بایت 5 : کد اسکی اولین بایتی که در جدول قرار گرفته می باشد
                        بایت 6:کد اسکی آخرین بایتی که در جدول قرار گرفته می باشد.
                        همچنین در یک فونت متغییر ترتیب به صورت زیر است
                        Header font
                        طول هر حرف از فونت (تعداد کل این اعداد باید با( آخرین کد – اولین کد) برابر باشد
                        داده های نمایش هر فونت
                        در آخر این کتابخانه خیلی بهتر از این می تواند نوشته شودو ایراداتی ممکن است داشته باشد، در صورت دیدن هرگونه اشکالی در کتابخانه لطفا اطلاع دهید.
                        کتابخانه در پست اول Update شد
                        باز هم از کاربر aivhl به خاطر کتابخانه بسیار کاملشان تشکر می کنم
                        با سلام خدمت دوست محترم.این کتابخونه تو gcc کار میکنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                        تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                        تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                        دیدگاه


                          #13
                          پاسخ : کتابخانه K108 با قابل

                          نوشته اصلی توسط هادی دادگستر
                          سلام
                          من از کتابخونه استفاده کردم خیلی خوب تو شبیه سازی جواب میده ولی در عمل کار نمیکنه.
                          بعد از چند روز سر و کله زدن به این نتیجه رسیدم که پایه RW زمانش خیلی کمه با اضافه کردن Delay_us(5) در تابع Write() , Read()
                          مشکل حل شد و جواب داد.
                          حالا مشکل اینه که تو شبیه سازی کار نمیکنه ولی در عمل کار میکنه :eek: :eek:
                          در موقع نمایش هم تاخیر بوجود اومده یه جورایی ال سی دی کند شده. :sad:
                          من از کریستال  16 مگا و 8 مگا استفاده و دو نوع ال سی دی هم تعویض کردم ولی نشد.
                          دوستال لطفا راهنما کنند.
                          منم همین مشکل رو داشتم با این روش برطرفش کردم اما تو شبیه سازی به مشکل بر می خورم
                          این روش رو امتحان کن،همون تاخیری که تو برنامه نوشتیو رو بذار باشه تو پروتئوس روی السیدی گرافیکی کلیک کن و فرکانس کاری رو 100 کیلو هرتز تنظیم کن
                          احتمالن رفع بشه

                          دیدگاه

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