0

آموزش کار با بهترین کتابخانه GLCD برای کدویژن

 
mojehb
mojehb
کاربر برنزی
تاریخ عضویت : آبان 1391 
تعداد پست ها : 25
محل سکونت : اصفهان

آموزش کار با بهترین کتابخانه GLCD برای کدویژن

 

 

هميشه کار با کتابخانه GLCD يا ال سي دي گرافيکي اصلي کدويژن براي خودم دشوار بوده و خيلي مبهم و هيچوقت توابع آنرا بصورت کامل نتوانستم پيدا کنم . براي همين از کتابخانه هاي ديگر براي راه اندازي ال سي دي گرافيکي استفاده مي کردم . اين بار تصميم گرفتم يکي از کتابخانه هايي که خيلي برايم کاربرد داشته و تمامي پروژه هاي خودم را با اين کتابخانه انجام داده ام با شما به اشتراک بگذارم . اين کتابخانه از زبان فارسي و عربي به خوبي پشتيباني مي کند . همچنين قابليت کشيدن هر شکلي را دارد . به راحتي مي توانيد يک انيميشن را روي GLCD نمايش بدهيد . در ادامه نيز يک پروژه که تمامي قابليت هاي اين کتابخانه را نمايش مي دهد براي تست قرار خواهم داد که به درک کار با اين کتابخانه به شما کمک شاياني خواهد کرد .

اين کتابخانه قابليت نمايش بر روي تمامي ماژول هاي ks0108 را دارد . قابليت هاي کليدي اين کتابخانه در يک نگاه :

  • قابليت استفاده براي کامپايلرهاي کدويژن و avrGCC
  • پشتيباني از زبان هاي فارسي ، عربي و انگليسي در 7 سايز مختلف
  • قابليت فاصله گذاري بين کاراکتر ها
  • قابليت نمايش تصاوير BMP
  • قابليت خاموش و روشن کردن GLCD بصورت نرم افزاري
  • قابليت تغيير مکان شروع نمايش
  • قابليت نوشتن و پاک کردن هر خط دلخواه
  • قابليت کشيدن يک نقطه دخواه در هر مختصاتي بدون ايجاد تغييري در پيکسل هاي اطراف (مشکلي که در خيلي از کتابخانه ها هست)
  • قابليت کشيدن اشکال هندسي با هر سايز دلخواه از جمله (نقطه ، خط افقي ، خط عمودي ، خط مايل ، دايره ، مستطيل ، مکعب ، متوازي الاضلاع ،متوازي السطوح و ...)
  • قابليت تعيين فونت دلخواه
  • و ...

در ابتدا توابع استفاده شده در اين کتابخانه با جزييات کامل در اين جدول براي شما قابل مشاهده است و در هنگام برنامه نويسي به کمک شما مي آيد .

 جدول شماره 1 :

 

توابع

توضيحات

پارامتر ها

glcd_on()

روشن کردن GLCD

نيازي ندارد

glcd_off()

خاموش کردن GLCD

نيازي ندارد

set_start_line(unsigned char line)

مشخص کردن خط بالايي بر روي صفحه نمايش[1]

 

 : 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_clear()

پاک کردن صفحه نمايش

نيازي ندارد

glcd_read(unsigned char column)

خواندن بايت مختصات فعلي

 

: column

شماره ستون فعلي

[2]

point_at(

unsigned int x,

unsigned int y,

byte color)

اضافه کردن نقطه در مختصات دلخواه

 

: x

شماره ستون

: y

شماره سطر

: color

0=نقطه سفيد

1=نقطه سياه

 

h_line(

unsigned int x,unsigned int y, byte l,byte s,byte c)

کشيدن يک خط افقي

 

: x

شماره ستوني که خط از آنجا شروع مي شود

: y

شماره سطري که خط از آنجا شروع ميشود

: l

طول خط

: s

فاصله بين نقطه هاي خط:

0=خط متصل

1=خط نقطه چين

خط تيره

: c

0=نقاط سفيد

1=نقاط سياه

v_line(

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=نقاط سياه

 

rectangle(

unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2,

byte s,byte c)

کشيدن يک مستطيل(يا مربع)

 

: x1

مختصاتنقطه سمت چپ بالاي مستطيل

: y1

مختصاتنقطه سمت چپ بالاي مستطيل

: x2

مختصاتنقطه سمت راست پايين مستطيل

: y2

مختصات y نقطه سمت راست پايين مستطيل

: s

فاصله بين نقطه هاي خط:

0=خط متصل

1=خط نقطه چين

خط تيره

: c

0=نقاط سفيد

1=نقاط سياه

cuboid(

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

مختصاتنقطه چپ بالايي سطح اول

: y11

مختصاتنقطه چپ بالايي سطح اول

: x12

مختصاتنقطه راست پاييني سطح اول

: y12

مختصاتنقطه راست پاييني سطح اول

 

: X21

مختصاتنقطه چپ بالايي سطح دوم

: Y21

مختصاتنقطه چپ بالايي سطح دوم

: x22

مختصات x  نقطه راست پاييني سطح دوم

: y22

مختصات y نقطه راست پاييني سطح دوم

 

: s

فاصله بين نقطه هاي خط:

0=خط متصل

1=خط نقطه چين

خط تيره

: c

0=نقاط سفيد

1=نقاط سياه

 

 

h_parallelogram(

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=نقاط سياه

 

v_parallelogram(

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=نقاط سياه

h_parallelepiped(

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

عرض خط افقي سطح دوم

v_parallelepiped(

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 

طول خط عمودي سطح دوم

circle(

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

glcd_puts(

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 نقطه سمت راست پايين مکاني که مي خواهيد تصوير در آن نمايش يابد

 

 
نکته 1  : هر رديف شامل 8 خط است از اين رو هر GLCD شامل 8 رديف و  64 خط است .
نکته 2 : شماره ستون فقط براي فعال کردن نيمه مناسب GLCD استفاده مي شود
قبل از شروع به نکات زير توجه کنيد :
   براي تعريف پايه هاي متصل به ميکرو ، بايد در کتابخانه ، بصورت کد تعريف کنيم

بعضي از کامپايلر ها زبان فارسي و عربي را به درستي نمايش نمي دهند ولي در عمل به درستي نوشته فارسي نمايش داده مي شود پس براي درست نمايش دادن نوشته تلاش نکنيد. البته در کدويژن هيچ مشکلي وجود نداد و فقط در کامپايلر eclipse اين مشکل مشاهده شده است .
 

 

اين کتابخانه براي دو کامپايلر کدويژن و 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 

- اگر فعال ساز با صفر است اين خط را فعال کنيد

در غير اينصورت اين خط را يا پاک کنيد يا به حالت توضيحات درآوريد .

بعد از ايجاد تغييرات فايل را ذخيره کنيد . به پروژه خود بازگرديد و خطوط زير را بعد از دستور  
void main(void)
{
 . اضافه کنيد
جدول شماره 3:

تعريف پورت ديتا به عنوان خروجي

DATADDR = 0xff;

 

تعريف پين هاي کنترلي بر اساس اتصال آنها

DDRX = pattern;

X: نام پورت ديتا (A, B, ….)

پترن بستگي به تنظيمات پايه هاي کنترلي دارد .

 اگر تنظيمات گيج کننده به نظر مي آيد يا جايي از آنرا متوجه نشديد نگران نباشيد در پروژه اي که به عنوان نمونه براي شما آماده کرده ايم کاربرد اين دستورات کاملا واضح است .
کار تنظيمات اوليه به پايان رسيد  .حالا مي توانيم برنامه نويسي آنرا آغاز کنيد با توجه به توابعي که در ابتدا به شما معرفي کرديم مي توانيد هر شکل و نوشته اي را نمايش دهيد . براي
چند مثال ساده :
 براي تسلط بهتر شما من چند برنامه را براي شما مثال مي زنم تا با کاربرد آنها آشنا شويد .
مثال 1: 
به عنوان اولين مثال سعي مي کنيم يک متن فارسي را بر روي GLCD نمايش دهيد
براي اين کار ابتدا يک متغير کاراکتر را بعد از تابع main تعريف مي کنيم و متن مورد نظر را در آن قرار مي دهيم:
unsigned char str[] = "تکنو الکترو";
سپس در مختصات مورد نظر نمايش مي دهيم توضيحات اعداد اين تابع را در جدول شماره يک کاملا توضيح داده ايم پس سوال نکنيد .
 
glcd_puts(str,127,0,1,1,0);
مثال 2 :
يا براي کشيدن خطي با نقطه شروع با مختصات 3 و 5 به طول 12 به صورت ممتد و رنگ تيره از کد زير استفاده مي کنيم :
h_line(3,5,12,0,1); //X0,Y0,Length,Space,Color
کافيه جدول اول رو هميشه در اختيار داشته باشيد تا سريع بتوانيد تابع مورد نظر را بسازيد . بعد از چند بار استفاده از توابع به خوبي به آنها مسلط شده و نياز به چک کردن جدول نخواهيد داشت . مي بينيد که کار با GLCD خيلي ساده و جذاب است و اونطوري که قبلا فکر مي کرديد سخت نيست .
 
سوالات احتمالي شما از ما :
 
سوال : چگونه نور زمينه GLCD را خاموش و روشن کنم ؟
پاسخ  : نور پس زمينه ال سي دي گرافيکي بخشي از سخت افزار ال سي دي است و ربطي به ماژول کنترلي ندارد و با دستورات گفته شده نمي توان آنرا خاموش و روشن کرد ولي مي توان يک پايه از ميکرو کنترلر را مثل شکل زير به آن اختصاص داد تا با فرمان ميکرو توسط شما خاموش و روشن شود .

آموزش کار با بهترین کتابخانه GLCD برای کدویژن

سوال : چگونه ماژول ال سي دي گرافيکي را ريست کنم ؟

 به راحتي با اتصال يک سيم از پايه ريست ال سي دي گرافيکي به ميکروکنترلر و اتصال يک مقاومت پول آپ به پايه ريست . احتمالا مدار ريست را قبلا ديده ايد ولي براي اينکه ابهامي نباشد مدار ريست را نيز قرار مي دهم :

 

 

سوال : بعد از نوشتن پروژه و تست آن متوجه شدم تصاوير و نوشته ها به درستي نمايش پيدا نمي کنند !!!

 

پاسخ :

مطمئن شويد پايه هاي کنترلي و ديتا در فايل glcd.h به درستي تعريف شده اند و بايد طبق جدول شماره 2 ويرايش شده باشند.

مطمئن شويد پورت ديتا و کنترل به صورت صحيح در برنامه شما وارد شده اند و توجه کنيد تعريف اين پورت ها طبق جدول شماره سه هستند و در پروژه به صورت دستي بايد وارد شوند .

فرکانسي که در کدويژن تعريف کرديد با فرکانسي که در پروتيوس براي ميکرو مشخص مي کنيد  با فرکانسي که هنگام پروگرام کردم مشخص مي کنيد بايد يکي باشند

اگر موارد بالا را چک کرديد و باز هم مشکل داشت زمان تاخير را که در فايل کتابخانه روي 5 بصورت پيشفرض گذاشته بوديم افزايش دهيد و مجدد تست کنيد

#define E_DELAY
 

اتصالات ضعيف و يا اشتباه در بستن مدار نيز باعث ايجاد خطا در نمايش مي شود اتصالات را چک کنيد

منبع تغذيه ي ضعيف نيز باعث ايجاد مشکل در نمايش مي شود پس به منبع تغذيه خود نيز شک کنيد .

سوال : نور پس زمينه روشن است ولي چيزي نمايش داده نمي شود !!!

پاسخ :  پاسخ سوال قبلي را مطالعه کنيد

سوال : فقط نيمي از صفحه نمايش تصوير دارد !!!

، پاسخ : اتصالات را چک کنيد ، مطمئن شويد که جهت (ورودي و خروجي) پورت هاي ديتا و کنترل را درست انتخاب کرده ايد ،پايه هاي CS1 و  CS2 را چک کنيد

سوال چگونه مي توانم کنتراست را تنظيم کتم :

پاسخ : با مدار زير و تنظيم پتانسيومتر مربوطه

 

 

 

 

چگونه مي توانم فونت نوشته را تغيير دهم ؟

ابتدا نرم افزار طراحي فونت را از و نصب کنيد

سپس فونت فارسي را از کنيد و با برنامه بالا باز کنيد و فونت را به شکل مورد نظر ويرايش کنيد .

اگر حوصله داشته باشيد مي توانيد بي نهايت فونت زيبا طراحي کنيد و حتي با کاربران ديگر به اشتراک بگذاريد

 

سپس دکمه F5 را در نرم افزار بزنيد و فايل را با نامه font.h  در پوشه  Includes  ذخيره کنيد بايد اين فايل با فايل قديمي جايگزين شود.

به هيچ وجه به آرايه ساخته شده در اين فايل دست نزنيد و فقط از آنها استفاده کنيد که باعث به هم ريختگي متن شما خواهد شد.
 
 
منبع : تکنو الکترو
سايت سازنده کتابخانه 
جمعه 3 آذر 1391  6:32 PM
تشکرات از این پست
maryam98
maryam98
maryam98
کاربر تازه وارد
تاریخ عضویت : اسفند 1391 
تعداد پست ها : 1
محل سکونت : فارس

پاسخ به:آموزش کار با بهترین کتابخانه GLCD برای کدویژن

با سلام من ميخوام ازlcd ts12864a   استفاده كنم توي پروتئوس بايد شبيه سازيش كنم(مدارشو بكشم) من نميدونم چكارش كنم آخه پروتئوس ظاهرا شبيه ساز اينlcd رو  نداره در ضمن فكر ميكنيد من ميتونم با استفاده از نرم افزار كدويژن نسخه2.5.3 كه از lcd گرافيكي حمايت ميكنه استفاده كنم؟ ميشه منو راهنمايي كنيد؟

چهارشنبه 2 اسفند 1391  2:34 PM
تشکرات از این پست
دسترسی سریع به انجمن ها