NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3713 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 1 از 1

موضوع: کتابخانه راه انداز lcd کاراکتری

  1. #1
    عضو جدید mnkh1375 آواتار ها
    تاریخ عضویت
    Jan 2014
    نوشته ها
    10
    تشکر
    7
    تشکر شده 4 بار در 1 پست

    پیش فرض کتابخانه راه انداز lcd کاراکتری

    سلام.
    چند وقت پيش دنبال يک کتابخونه براي LCD هاي کاراکتري براي IAR ميگشتم. کتابخونه بود ولي به نظرم اومد يه سري مشکلات دارند که يکم کار رو سخت ميکنه. براي همين تصميم گرفتم يه کتابخونه جديد بنويسم که اون مشکلات رو نداشته باشه و خيلي هم خوش دست باشه
    در حال حاضر هنوز نواقصي داره که ان اشالله آروم آروم درستش با کمک شما درست ميشه. (مثلا الان فقط براي AT91SAM7S64 نوشته شده)
    چيزايي که در حال حاضر فکر ميکنم باعث تفاوت اين کتابخونه ميشه :

    1. نوشته شده تحت برنامه نويسي شي گرا
    2. امکان اتصال چند LCD
    3. استفاده با فرکانس هاي مختلف
    4. قابل استفاده براي lcd هاي بالاي 2 سطري
    4. کنترلر خودکار مکان نما ( به عنوان مثال با کتابخونه هاي ديگه اگه يک رشته 21 کاراکتري رو روي يک lcd 4*20 چاپ کنيد مکان نما جاش خراب ميشه)
    چيزايي که در آينده فکر ميکنم باعث تفاوت اين کتابخونه بشه :
    1. قابل استفاده براي تمام ميکرو کنترلر هاي سري AT91
    2. فونت سفارشي
    3. ....

    اين هم لينک خود کتابخونه نسخته 1.0 :

    http://cld.persiangig.com/sync-view.html#PzHDrgxaB1

    لینک کمکی :

    http://uplod.ir/vxff75hwcak1/LCD-V1.0.rar.htm

    فقط ميمونه نحوه کار با کتابخونه :
    اول بايد پايه هاي LCD رو به اين صورت به ميکرو متصل کنيم :

    پايه 1 به زمين
    پايه 2 به 5 ولت
    پايه 3 با يک مقاومت 1.8 کيلو به زمين
    پايه 4 به پين دلخواه ميکرو
    پايه 5 به زمين
    پايه 6 تا 14 به پين هاي دلخاه ميکرو
    پايه 15 به 5 ولت
    پايه 16 به زمين

    فايل هاي LCD.h و LCD.cpp رو هم به پروژه اضافه ميکنيم و LCD.h رو ضميمه کد ميکنيم :

    کد:
    #include <Atmel/ioat91sam7s64.h>
    #include "LCD.h"
    
    int main()
    {
      AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
      AT91C_BASE_RSTC->RSTC_RMR = 0xA5000001;
      AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
      AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
      AT91C_BASE_PMC->PMC_MCKR= 0x3;
      AT91C_BASE_PMC->PMC_SCER = 0x1; 
      while(1)
      {
      }
    }
    بعد هم بايد يک شيء از نوع LCD تعريف کنيم تا به وسيله اون به توابع دسترسي داشته باشيم :

    کد:
    #include <Atmel/ioat91sam7s64.h>
    #include "LCD.h"
    
    LCD lcd; 
    
    int main()
    {
      AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
      AT91C_BASE_RSTC->RSTC_RMR = 0xA5000001;
      AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
      AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
      AT91C_BASE_PMC->PMC_MCKR= 0x3;
      AT91C_BASE_PMC->PMC_SCER = 0x1; 
      while(1)
      {
      }
    }
    اولين تا بعي که بايد صدا بزنيم تابع InitPin هست که مشخص ميکنه کدوم پايه LCD به کدوم پين ميکرو وصل شده - اين تابع بع اين شکل تعريف شده :

    کد:
      void InitPin(unsigned char RS, unsigned char E, unsigned char DB0, unsigned char DB1, unsigned char DB2, unsigned char DB3,
                          unsigned char DB4, unsigned char DB5, unsigned char DB6, unsigned char DB7);
    براي مثال اگه پايه هاي LCD رو به اين شکل وصل کرده باشيم :
    پايه 4 ( RS ) به PA31
    پايه 6 ( E ) به PA30
    پايه 7 (DB0) به PA29
    پايه 8 (DB1) به PA28
    پايه 9 (DB2) به PA27
    پايه 10 (DB3) به PA26
    پايه 11 (DB4) به PA25
    پايه 12 (DB5) به PA24
    پايه 13 (DB6) به PA23
    پايه 14 (DB7) به PA22

    اين تابع رو به اين صورت صدا ميزنيم :

    کد:
    lcd.InitPin(31, 30, 29, 28, 27, 26, 25, 24, 23, 22);
    بعد هم بايد تابع Init رو صدا بزنيم که اين تابع دو وردي ميگيره که يکي اختياري و يکي اجباريه :
    ورودي اول طول LCD هست. به عنوان مثال براي LCD 4*20 بايد 20 و براي LCD 2*16 بايد 16 وارد بشه.
    ورودي دوم هم فرکانس هست که به صورت پشفرض روي 48054857 هرتز تنظيم شده ولي اگه غيرا ز اني هست بايد توي وردوي دوم فرکانس رو وارد کنيد.
    براي مثال ما براي يک LCD 4*20 و فرکانس 48MH اين تابع رو به اين شکل صدا ميزنيم :

    کد:
    lcd.Init(20);
    براي راه اندازي اوليه LCD همين دو تابع کافيه که بايد قبل استفاده از بقيه توابع صدا زده بشه.
    براي کار با LCD و نوشتن روي اون ميتونيد از توابع زير استفاده کنيد
    توابع :

    1. پاک کردن کامل صفحه و انتقال مکان نما به سطر و سطون 0 :

    کد:
    void Clear();
    2. چاپ کردن رشته , عدد :

    کد:
      void Put(unsigned char chr);
      void Put(char* text);
      void Put(int val);
    3. انتقال مکان نما به نقطه اي خاص :

    کد:
      void GoToXY(unsigned char X, unsigned char Y);
    اين هم يک مثال کوچيک :

    کد:
    #include <Atmel/ioat91sam7s64.h>
    #include "LCD.h"
    
    LCD lcd;
    
    int version = 1;
    
    int main()
    {
      AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
      AT91C_BASE_RSTC->RSTC_RMR = 0xA5000001;
      AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
      AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
      AT91C_BASE_PMC->PMC_MCKR= 0x3;
      AT91C_BASE_PMC->PMC_SCER = 0x1; 
      lcd.InitPin(31, 30, 29, 28, 27, 26, 25, 24, 23, 22);
      lcd.Init(20);
      lcd.Clear();
      lcd.Put("********************");
      lcd.GoToXY(2, 1);
      lcd.Put("AMMR LCD Library");
      lcd.GoToXY(6, 2);
      lcd.Put("Version:");
      lcd.Put(version);
      lcd.GoToXY(0, 3);
      lcd.Put("********************");
      while(1)
      {
      }
    }
    که نتيجه بايد به اين شکل بشه :


    -----------------------------
    لطفا حتما اشکالات و ... کتابخونه رو تو همين تايپک مطرح کنيد تا سريع تر اين کتابخونه کامل بشه
    ویرایش توسط mnkh1375 : 27-02-2014 در ساعت 22:52

  2. کاربران : 4 تشکر کرده اند از شما mnkh1375 برای ارسال این پست سودمند:


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

مجوز های ارسال و ویرایش

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