سلام.
چند وقت پیش دنبال یک کتابخونه برای 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 رو ضمیمه کد میکنیم :
بعد هم باید یک شیء از نوع LCD تعریف کنیم تا به وسیله اون به توابع دسترسی داشته باشیم :
اولین تا بعی که باید صدا بزنیم تابع InitPin هست که مشخص میکنه کدوم پایه LCD به کدوم پین میکرو وصل شده - این تابع بع این شکل تعریف شده :
برای مثال اگه پایه های 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
این تابع رو به این صورت صدا میزنیم :
بعد هم باید تابع Init رو صدا بزنیم که این تابع دو وردی میگیره که یکی اختیاری و یکی اجباریه :
ورودی اول طول LCD هست. به عنوان مثال برای LCD 4*20 باید 20 و برای LCD 2*16 باید 16 وارد بشه.
ورودی دوم هم فرکانس هست که به صورت پشفرض روی 48054857 هرتز تنظیم شده ولی اگه غیرا ز انی هست باید توی وردوی دوم فرکانس رو وارد کنید.
برای مثال ما برای یک LCD 4*20 و فرکانس 48MH این تابع رو به این شکل صدا میزنیم :
برای راه اندازی اولیه LCD همین دو تابع کافیه که باید قبل استفاده از بقیه توابع صدا زده بشه.
برای کار با LCD و نوشتن روی اون میتونید از توابع زیر استفاده کنید
توابع :
1. پاک کردن کامل صفحه و انتقال مکان نما به سطر و سطون 0 :
2. چاپ کردن رشته , عدد :
3. انتقال مکان نما به نقطه ای خاص :
این هم یک مثال کوچیک :
که نتیجه باید به این شکل بشه :

-----------------------------
لطفا حتما اشکالات و ... کتابخونه رو تو همین تایپک مطرح کنید تا سریع تر این کتابخونه کامل بشه :smile:
چند وقت پیش دنبال یک کتابخونه برای 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) { } }
کد:
#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) { } }
کد:
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);
پایه 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);
ورودی اول طول LCD هست. به عنوان مثال برای LCD 4*20 باید 20 و برای LCD 2*16 باید 16 وارد بشه.
ورودی دوم هم فرکانس هست که به صورت پشفرض روی 48054857 هرتز تنظیم شده ولی اگه غیرا ز انی هست باید توی وردوی دوم فرکانس رو وارد کنید.
برای مثال ما برای یک LCD 4*20 و فرکانس 48MH این تابع رو به این شکل صدا میزنیم :
کد:
lcd.Init(20);
برای کار با LCD و نوشتن روی اون میتونید از توابع زیر استفاده کنید
توابع :
1. پاک کردن کامل صفحه و انتقال مکان نما به سطر و سطون 0 :
کد:
void Clear();
کد:
void Put(unsigned char chr); void Put(char* text); void Put(int val);
کد:
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:
دیدگاه