آموزش کار با بهترین کتابخانه GLCD برای کدویژن
جمعه 3 آذر 1391 6:32 PM
هميشه کار با کتابخانه GLCD يا ال سي دي گرافيکي اصلي کدويژن براي خودم دشوار بوده و خيلي مبهم و هيچوقت توابع آنرا بصورت کامل نتوانستم پيدا کنم . براي همين از کتابخانه هاي ديگر براي راه اندازي ال سي دي گرافيکي استفاده مي کردم . اين بار تصميم گرفتم يکي از کتابخانه هايي که خيلي برايم کاربرد داشته و تمامي پروژه هاي خودم را با اين کتابخانه انجام داده ام با شما به اشتراک بگذارم . اين کتابخانه از زبان فارسي و عربي به خوبي پشتيباني مي کند . همچنين قابليت کشيدن هر شکلي را دارد . به راحتي مي توانيد يک انيميشن را روي GLCD نمايش بدهيد . در ادامه نيز يک پروژه که تمامي قابليت هاي اين کتابخانه را نمايش مي دهد براي تست قرار خواهم داد که به درک کار با اين کتابخانه به شما کمک شاياني خواهد کرد .
اين کتابخانه قابليت نمايش بر روي تمامي ماژول هاي ks0108 را دارد . قابليت هاي کليدي اين کتابخانه در يک نگاه :
در ابتدا توابع استفاده شده در اين کتابخانه با جزييات کامل در اين جدول براي شما قابل مشاهده است و در هنگام برنامه نويسي به کمک شما مي آيد .
جدول شماره 1 :
توابع |
توضيحات |
پارامتر ها |
glcd_on() |
روشن کردن GLCD |
نيازي ندارد |
glcd_off() |
خاموش کردن GLCD |
نيازي ندارد |
set_start_line(unsigned char line) |
: line شماره سطر مورد نظر از بالا Range: 0-63
|
|
goto_col(unsigned int x) |
رفتن به ستون دلخواه |
: x شماره ستون مورد نظر Range: 0-127
|
goto_row(unsigned int y) |
رفتن به سطر دلخواه[1] |
: y شماره سطر دلخواه (Range: 0-7)
|
goto_xy(unsigned int x, unsigned ,int y) |
رفتن به سطر و ستون دلخواه |
x : مختصات ستون : y مختصات سطر |
glcd_write(unsigned char b) |
نوشتن يک بايت دلخواه در مختصات فعلي |
: b يک بايت ديتايي که قصد داريد بر روي مختصات فعلي بنويسيد |
glcd_clrln(unsigned char ln) |
پاک کردن سطر دلخواه |
شماره سطر دلخواهي که مي خواهيد پاک شود (Range: 0-7) |
پاک کردن صفحه نمايش |
نيازي ندارد |
|
glcd_read(unsigned char column) |
خواندن بايت مختصات فعلي |
: column شماره ستون فعلي [2] |
unsigned int x, unsigned int y, byte color) |
اضافه کردن نقطه در مختصات دلخواه |
: x شماره ستون : y شماره سطر : color 0=نقطه سفيد 1=نقطه سياه
|
unsigned int x,unsigned int y, byte l,byte s,byte c) |
کشيدن يک خط افقي |
: x شماره ستوني که خط از آنجا شروع مي شود : y شماره سطري که خط از آنجا شروع ميشود : l طول خط : s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه |
unsigned int x,unsigned int y, signed int l,byte s,byte c) |
کشيدن يک خط عمودي |
: x شماره ستوني که خط از آنجا شروع مي شود : y شماره سطري که خط از آنجا شروع مي شود : l طول خط : s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
|
line(unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2, byte s,byte c) |
کشيدن يک خط دلخواه (با هر شيبي) |
: x1 شماره ستوني که خط از آنجا شروع مي شود : y1 شماره سطري که خط از آنجا شروع مي شود : x2 شماره ستوني که خط در آنجا تمام مي شود : y2 شماره سطري که خط در آنجا تمام مي شود
: s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
|
unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2, byte s,byte c) |
کشيدن يک مستطيل(يا مربع) |
: x1 مختصاتx نقطه سمت چپ بالاي مستطيل : y1 مختصاتy نقطه سمت چپ بالاي مستطيل : x2 مختصاتx نقطه سمت راست پايين مستطيل : y2 مختصات y نقطه سمت راست پايين مستطيل : s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه |
unsigned int x11,unsigned int y11, unsigned int x12,unsigned int y12, unsigned int x21,unsigned int y21, unsigned int x22,unsigned int y22, byte s,byte c) |
کشيدن يک مکعب با مشخص کردن 2 سطح (مستطيل يا مربع) |
: x11 مختصاتx نقطه چپ بالايي سطح اول : y11 مختصاتy نقطه چپ بالايي سطح اول : x12 مختصاتx نقطه راست پاييني سطح اول : y12 مختصاتy نقطه راست پاييني سطح اول |
: X21 مختصاتx نقطه چپ بالايي سطح دوم : Y21 مختصاتy نقطه چپ بالايي سطح دوم : x22 مختصات x نقطه راست پاييني سطح دوم : y22 مختصات y نقطه راست پاييني سطح دوم |
||
: s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
|
||
unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2, byte l,byte s,byte c) |
کشيدن يک متوازي الاضلاع با مشخص کردن سطح بالايي و پاييني افقي |
: x1 مختصات xنقطه چپ بالايي : y1 مختصات Yنقطه چپ بالايي : x2 مختصات xنقطه راست پاييني : y2 مختصات yنقطه راست پاييني : l طول خطوط افقي (بالايي يا پاييني( : s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
|
unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2, byte l,byte s,byte c) |
کشيدن متوازي الاضلاع با مشخص کردن سطوح عمودي سمت چپ و راست |
: x1 مختصات xنقطه چپ بالايي : y1 مختصات Yنقطه چپ بالايي : x2 مختصات xنقطه راست پاييني : y2 مختصات yنقطه راست پاييني
: l طول خطوط عمودي (راست يا چپ)
: s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه |
unsigned int x11,unsigned int y11, unsigned int x12,unsigned int y12, byte l1, unsigned int x21,unsigned int y21, unsigned int x22,unsigned int y22, byte l2, byte s,byte c) |
کشيدن يک متوازي السطوح بر اساس دو سطح افقي (Seeh_parallelogram) |
: x11 مختصاتx نقطه چپ بالايي سطح اول : y11 مختصاتy نقطه چپ بالايي سطح اول : x12 مختصاتx نقطه راست پاييني سطح اول : y12 مختصاتy نقطه راست پاييني سطح اول |
: X21 مختصاتx نقطه چپ بالايي سطح دوم : Y21 مختصاتy نقطه چپ بالايي سطح دوم : x22 مختصاتx نقطه راست پاييني سطح دوم : y22 مختصاتy نقطه راست پاييني سطح دوم |
||
: s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
: l1 عرض خط افقي سطح اول : l2 عرض خط افقي سطح دوم |
||
unsigned int x11,unsigned int y11, unsigned int x12,unsigned int y12, byte l1, unsigned int x21,unsigned int y21, unsigned int x22,unsigned int y22, byte l2, byte s,byte c) |
کشيدن متوازي السطوح بر اساس دو سطح عمودي (Seev_parallelogram) |
: x11 مختصاتx نقطه چپ بالايي سطح اول : y11 مختصاتy نقطه چپ بالايي سطح اول : x12 مختصاتx نقطه راست پاييني سطح اول : y12 مختصاتy نقطه راست پاييني سطح اول |
: X21 مختصاتx نقطه چپ بالايي سطح دوم : Y21 مختصاتy نقطه چپ بالايي سطح دوم : x22 مختصاتx نقطه راست پاييني سطح دوم : y22 مختصاتy نقطه راست پاييني سطح دوم |
||
: s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه l1 : طول خط عمودي سطح اول : l2 طول خط عمودي سطح دوم |
||
unsigned int x0,unsigned int y0, unsigned int r,byte s,byte c) |
کشيدن يک دايره |
: x0 مختصات x نقطه وسط دايره : y0 مختصات y نقطه وسط دايره
: r شعاع دايره : s فاصله بين نقطه هاي خط: 0=خط متصل 1=خط نقطه چين خط تيره : c 0=نقاط سفيد 1=نقاط سياه
|
glcd_putchar(byte c,int x,int y,byte l, byte sz) |
نوشتن يک کارکتر بر روي مختصات دلخواه بر اساس سايز sz |
: c کارکتري که قرار است تايپ شود : x ستوني که مي خواهيد نوشته شروع به تايپ کند (يک کاراکتر هشت ستون را اشغال مي کند ) : y شماره سطر مورد نظر براي نوشتن : l زبان کاکتر =0انگليسي =1فارسي يا عربي : sz سايز فونت عددي بين 1 تا 7 |
byte *c,int x,int y,unsigned char l,byte sz,signed char space) |
نوشتن يک رشته (که ذخيره شده در حافظه ي فلش) بر روي نمايشگر |
: c يک اشاره گر به فرم رشته که قرار است روي نمايشگر نوشته شود : x شماره ستوني که قرار است نوشته از آنجا شروع شود . (يک کاراکتر8 ستون اشغال ميکند) : y شماره سطر مورد نظر : l زبان نوشته =0انگليسي =1فارسي يا عربي : sz سايز نوشته از يک تا هفت : space انگليسي: قابليت فاصله گذاري بين حروف فارسي و عربي :قابليت فاصله گذاري بين کلمات |
bmp_disp(flash byte *bmp, unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2) |
نمايش يک تصوير BMP با استفاده از آرايه ساخته شده درحافظه فلش |
: bmp
يک اشاره گر به آرايه اي که تصوير در آن ذخيره شده است : x1 مختصات x نقطه سمت چپ بالاي مکاني که مي خواهيد تصوير در آن نمايش يابد : y1 مختصات y نقطه سمت چپ بالاي مکاني که مي خواهيد تصوير در آن نمايش يابد
: x2 مختصات x نقطه سمت راست پايين مکاني که مي خواهيد تصوير در آن نمايش يابد : y2 مختصات y نقطه سمت راست پايين مکاني که مي خواهيد تصوير در آن نمايش يابد |
اين کتابخانه براي دو کامپايلر کدويژن و GCC ساخته شده ولي در اين پست ما فقط به کدويژن مي پردازيم .
قبل از هرکاري فايل کتابخانه را از کنيد سپس در پوشه پروژه خود قرار دهيد در واقع فايل هاي کتابخانه بايد در پوشه Includes واقع در پوشه پروژه شما قرار داشته باشند .
سپس در ابتداي پروژه خود کتابخانه را به شکل زير معرفي نماييد .
#include <stdio.h>
#include "Includes/graph.h"
#include "Includes/GLCD.h"
#include "Includes/seq2.h"
مرحله بعدي مشخص کردن اتصالات ميکرو به GLCD :
براي اينکار فايل glcd.h در پوشه Includes را ويرايش کرده و دستورات زير را به دلخواه تغيير دهيد . کوچکترين ويرايش اشتباهي مي تواند باعث نمايش اشتباه يا عدم نمايش شود .
جدول شماره 2:
تاخير پالس فعال ساز | #define E_DELAY d | d: زمان تاخير به ميکرو ثانيه پيشفرض 5 ميکرو |
پورت ديتا |
#define DATAPORT PORTX #define DATADDR DDRX #define DATAPIN PINX |
X: نام پورت |
پايه هاي کنترلي |
#define CS1 PORTX.n #define CS2 PORTX.n #define RSPORTX.n #define RWPORTX.n #define ENPORTX.n |
X: نام پورت مثل A , B n: شماره پايه پورت |
فعال ساز مثبت و منفي | #defineCS_ACTIVE_LOW 0 |
- اگر فعال ساز با صفر است اين خط را فعال کنيد در غير اينصورت اين خط را يا پاک کنيد يا به حالت توضيحات درآوريد . |
تعريف پورت ديتا به عنوان خروجي |
DATADDR = 0xff; |
|
تعريف پين هاي کنترلي بر اساس اتصال آنها |
DDRX = pattern; |
X: نام پورت ديتا (A, B, ….) پترن بستگي به تنظيمات پايه هاي کنترلي دارد . |
unsigned char str[] = "تکنو الکترو";
glcd_puts(str,127,0,1,1,0);
h_line(3,5,12,0,1); //X0,Y0,Length,Space,Color
سوال : چگونه ماژول ال سي دي گرافيکي را ريست کنم ؟
به راحتي با اتصال يک سيم از پايه ريست ال سي دي گرافيکي به ميکروکنترلر و اتصال يک مقاومت پول آپ به پايه ريست . احتمالا مدار ريست را قبلا ديده ايد ولي براي اينکه ابهامي نباشد مدار ريست را نيز قرار مي دهم :
سوال : بعد از نوشتن پروژه و تست آن متوجه شدم تصاوير و نوشته ها به درستي نمايش پيدا نمي کنند !!!
پاسخ :
مطمئن شويد پايه هاي کنترلي و ديتا در فايل glcd.h به درستي تعريف شده اند و بايد طبق جدول شماره 2 ويرايش شده باشند.
مطمئن شويد پورت ديتا و کنترل به صورت صحيح در برنامه شما وارد شده اند و توجه کنيد تعريف اين پورت ها طبق جدول شماره سه هستند و در پروژه به صورت دستي بايد وارد شوند .
فرکانسي که در کدويژن تعريف کرديد با فرکانسي که در پروتيوس براي ميکرو مشخص مي کنيد با فرکانسي که هنگام پروگرام کردم مشخص مي کنيد بايد يکي باشند
اگر موارد بالا را چک کرديد و باز هم مشکل داشت زمان تاخير را که در فايل کتابخانه روي 5 بصورت پيشفرض گذاشته بوديم افزايش دهيد و مجدد تست کنيد
#define E_DELAY 6
اتصالات ضعيف و يا اشتباه در بستن مدار نيز باعث ايجاد خطا در نمايش مي شود اتصالات را چک کنيد
منبع تغذيه ي ضعيف نيز باعث ايجاد مشکل در نمايش مي شود پس به منبع تغذيه خود نيز شک کنيد .
سوال : نور پس زمينه روشن است ولي چيزي نمايش داده نمي شود !!!
پاسخ : پاسخ سوال قبلي را مطالعه کنيد
سوال : فقط نيمي از صفحه نمايش تصوير دارد !!!
، پاسخ : اتصالات را چک کنيد ، مطمئن شويد که جهت (ورودي و خروجي) پورت هاي ديتا و کنترل را درست انتخاب کرده ايد ،پايه هاي CS1 و CS2 را چک کنيد
سوال چگونه مي توانم کنتراست را تنظيم کتم :
پاسخ : با مدار زير و تنظيم پتانسيومتر مربوطه
چگونه مي توانم فونت نوشته را تغيير دهم ؟
ابتدا نرم افزار طراحي فونت را از و نصب کنيد
سپس فونت فارسي را از کنيد و با برنامه بالا باز کنيد و فونت را به شکل مورد نظر ويرايش کنيد .
اگر حوصله داشته باشيد مي توانيد بي نهايت فونت زيبا طراحي کنيد و حتي با کاربران ديگر به اشتراک بگذاريد
سپس دکمه F5 را در نرم افزار بزنيد و فايل را با نامه font.h در پوشه Includes ذخيره کنيد بايد اين فايل با فايل قديمي جايگزين شود.
به هيچ وجه به آرايه ساخته شده در اين فايل دست نزنيد و فقط از آنها استفاده کنيد که باعث به هم ريختگي متن شما خواهد شد.