سلام.
چند وقت پيش دنبال يک کتابخونه براي 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 همين دو تابع کافيه که بايد قبل استفاده از بقيه توابع صدا زده بشه.
براي کار با LCD و نوشتن روي اون ميتونيد از توابع زير استفاده کنيد
توابع :
1. پاک کردن کامل صفحه و انتقال مکان نما به سطر و سطون 0 :
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)
{
}
}
که نتيجه بايد به اين شکل بشه :
-----------------------------
لطفا حتما اشکالات و ... کتابخونه رو تو همين تايپک مطرح کنيد تا سريع تر اين کتابخونه کامل بشه