اطلاعیه

Collapse
No announcement yet.

کتابخانه راه انداز LCD کاراکتری

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

    کتابخانه راه انداز LCD کاراکتری

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

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

    چیزایی که در آینده فکر میکنم باعث تفاوت این کتابخونه بشه :rolleyes: :
    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)
     {
     }
    }
    که نتیجه باید به این شکل بشه :


    -----------------------------

    لطفا حتما اشکالات و ... کتابخونه رو تو همین تایپک مطرح کنید تا سریع تر این کتابخونه کامل بشه :smile:
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

    #2
    پاسخ : کتابخانه راه انداز LCD کاراکتری

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

    دیدگاه


      #3
      پاسخ : کتابخانه راه انداز LCD کاراکتری

      خیلی ممنون.
      C++ سنگین تره ولی خوب با این حال به به نظر میاد خوبیاش بیشتر می ارزه :smile:
      ولی به هر حال تموم شد ان شاء الله یه نسخه C هم برای Keil مینویسم :read:
      غفلت از يار, گرفتار شدن هم داد
      از شما دور شدن, زار شدن هم دارد
      هرکه از چشم بي افتاد, محلش ندهند
      عبد آلوده شدن, خوار شدن هم دارد
      عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

      دیدگاه

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