آموزش راه اندازی و فارسی نویسی روی lcd گرافیکی

به نام خدا

در این بخش آموزش فارسی نویسی روی lcd گرافیکی رو قصد دارم توضیح بدم و اینکه چطور فونت طراحی کنید و متن فارسیتونو از طریق یوزات بفرستید و روی lcd گرافیکی نمایش بدید

در این پروژه از lcd گرافیکی با درایور ks0108 استفاده میکنیم

دوستان من با جفت این lcd  ها کارکردم و  به نظر من lcd با بک گراند سبز خیلی بهتره و همچنین ترتیب پایه های این دو نوع lcd یه خرده باهم فرق میکنن( جای آند و کاتد  نور پس زمینه lcd ها متفاوته)

ترتیب پایه های glcd با بک گراند سبز (لینک خرید)

ترتیب پایه ها glcd  با بک گراند آبی (لینک خرید)

بازهم دقت کنید به نوع lcdتون،چون ممکنه پایه فرق کنن طبق تجربه من ال سی دی سبز باکیفیت تره و ال سی دی آبی طبق شکل بالا جای پایه های A و K برعکسه…

  • پایه اول (vcc) یا همان ۵ ولت است
  • پایه دوم (gnd) یا ۰ ولت است
  • پایه سوم تنظیم کنتراست را بر عهده دارد که با عمال ولتاژ به این پایه میتوانید شدت رنگ را تنظیم کنید که برای استفاده از مدار زیر استفاده کنید که v0 را به پایه ۳ ال سی دی باید وصل کنید.

 

 

 

دقت کنید که پایه VEE همان پایه ۱۸ ال سی دی است.

و برای این کار میتوانید از یک پتانسیومتر ۱ کیلو استفاده کنید.

 

 

 

 

  • پایه ۴ و ۵ و۶ پایه های کنترلی هستند که به میکرو متصل می شوند
  • پایه ۷ تا پایه ۱۴ پایه های دیتا هستند که به یک پورت میکرو باید متصل شوند
  • پایه ۱۵ و ۱۶ که هر کدام ۱/۲ از lcd را کنترلر میکنند باید به میکرو متصل شوند
  • پایه۱۷ ریست را هم باید ریست میکرو متصل کنید(باید).
  • پایه ۱۸ که بالا گفته شد.
  • پایه ۱۹ و ۲۰ پایه های نور پس زمینه lcd هستند.

نکته:برای راه اندازی این lcd توسط میکروکنترلرهای arm تغذیه ال سی دی را که با ۵ ولت تامین کنید و پایه های ال سی دی را به میکروی arm خود متصل کنید.

توضیح توابع کتابخانه lcd :

Method

Description

Parameters

glcd_on()

Turn on the GLCD

No

glcd_off()

Turn off the GLCD

No

set_start_line(unsigned char line)

Changes the top line on the display [۱]

line: line number to be set at the top (Range: 0 à ۶۳)

goto_col(unsigned int x)

Go to the specified column

x: Column number

(Range: 0 à ۱۲۷)

goto_row(unsigned int y)

Go to the specified

row [۱]

y: Row address

(Range: 0 à ۷)

goto_xy(unsigned int x, unsigned ,int y)

Go to the specified column and row

x: Column number

y: Row address

glcd_write(unsigned char b)

Writes 1 byte data at the

current location

b: 1 – byte data to be written at the current

location

glcd_clrln(unsigned char ln)

Clears the specified row ۱

ln: the number of the row to be cleared (Range: 0 à ۷)

glcd_clear()

Clears the display

No

glcd_read(unsigned char column)

Reads the byte at the current position

column: Current column number [۲]
point_at(

unsigned int x,

unsigned int y,

byte color)

Adds a point at the specified location

x: column number

y: row number

color: 0 à Light spot

            ۱à Dark spot

h_line(

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

Draws a horizontal line

x: The column number at which the line starts

y: The row number at which the line starts

l: Line length

s: The space between line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

v_line(

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

Draws a vertical line

x: The column number at which the line starts

y: The row number at which the line starts

l: Line length

s: The space between line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

line(unsigned int x1,unsigned int y1, unsigned int x2,unsigned int y2, byte s,byte c)

Draws a general (inclined) line

x1: The column number at which the line starts

y1: The row number at which the line starts

x2: The column number at which the line ends

y2: The row number at which the line ends

s: The space between line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

rectangle(

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

               byte s,byte c)

Draws a rectangle

x1: The x of the upper left point

y1: The y of the upper left point

x2: The x of the lower right point

y2: The y of the lower right point

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

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)

Draws a cuboid by defining two surfaces

x11: The x of the upper left point of the first surface

y11: The y of the upper left point of the first surface

x12: The x of the lower right point of the first surface

y12: The y of the lower right point of the first surface

X21: The x of the upper left point of the second surface

Y21: The y of the upper left point of the second surface

x22: The x of the lower right point of the second surface

y22: The y of the lower right point of the second surface

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

h_parallelogram(

unsigned int x1,unsigned int y1,

unsigned int x2,unsigned int y2,

byte l,byte s,byte c)

Draws a parallelogram its upper and lower sides are horizontal

x1: The x of the upper left point

y1: The y of the upper left point

x2: The x of the lower right point

y2: The y of the lower right point

l: The length of the horizontal side (upper or lower)

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

v_parallelogram(

unsigned int x1,unsigned int y1,

unsigned int x2,unsigned int y2,

 byte l,byte s,byte c)

Draws a parallelogram its right and left sides are vertical

x1: The x of the upper left point

y1: The y of the upper left point

x2: The x of the lower right point

y2: The y of the lower right point

l: The length of the vertical side (right or left)

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

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)

Draws a parallelepiped its bases are two horizontal parallelograms

(Seeh_parallelogram)

x11: The x of the upper left point of the first surface

y11: The y of the upper left point of the first surface

x12: The x of the lower right point of the first surface

y12: The y of the lower right point of the first surface

X21: The x of the upper left point of the second surface

Y21: The y of the upper left point of the second surface

x22: The x of the lower right point of the second surface

y22: The y of the lower right point of the second surface

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

l1: The length of the horizontal side of the first surface

l2: The length of the horizontal side of the second surface

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)

Draws a parallelepiped its bases are two vertical parallelograms

(Seev_parallelogram)

x11: The x of the upper left point of the first surface

y11: The y of the upper left point of the first surface

x12: The x of the lower right point of the first surface

y12: The y of the lower right point of the first surface

X21: The x of the upper left point of the second surface

Y21: The y of the upper left point of the second surface

x22: The x of the lower right point of the second surface

y22: The y of the lower right point of the second surface

s: The space between each line points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

l1: The length of the vertical side of the first surface

l2: The length of the vertical side of the second surface

circle(

unsigned int x0,unsigned int y0,

unsigned int r,byte s,byte c)

Draws a circle

x0: The x point of the center of the circle

y0: The y point of the center of the circle

r: Circle’s radius

s: The space between perimeter points:

    ۰ à solid line

    ۱ à dotted line

  >1 à dashed line

c: 0 à Light spots

     ۱à Dark spots

glcd_putchar(byte c,int x,int y,byte l, byte sz)

Writes a character at the specified position, with size sz

c: The character to be typed

x: The column number to start typing the character at (One character occupies 8 columns)

y: The row number to type the character at

l: The language of the character

   ۰ à English

   ۱ à Arabic

sz: Font size (from 1 to 7)

glcd_puts(

byte *c,int x,int y,unsigned char l, byte sz,signed char space)

Writes a string ,stored in the flash memory ,on the display

c: A pointer to the string to be written on the display

x: The column number to start typing the character at (One character occupies 8 columns)

y: The row number to type the character at

l: The language of the character

   ۰ à English

   ۱ à Arabic

sz: Font size (from 1 to 7)

space:

English: Character spacing

Arabic and Farsi:Word spacing

bmp_disp(flash byte *bmp,

unsigned int x1,unsigned int y1,

unsigned int x2,unsigned int y2)

Displays a bmp image array stored in the flash memory

bmp: A pointer to the array where the bmp image is stored

x1: The x of the upper left point of the image on the glcd

y1: The y of the upper left point of the image on the glcd

x2: The x of the lower right point of the image on the glcd

y2: The y of the lower right point of the image on the glcd

شماتیک اتصال lcd به میکرو به صورت شکل زیر است که در پروتئوس رسم شده است:

توجه:به نام پایه ها دقت کنید نه شماره پایه ها!!!

در ادامه قصد دارم تا متن فارسی را از ترمینال سریال بفرستم و روی lcd گرافیکی نمایش بدم .

  • نمایش عکس روی lcd گرافیکی

برای نمایش عکی روی lcd گرافیکی در ابتدا باید عکی مورد نظرتون رو با نرم افزار paint  به فرمت bmp تبدیل کنید و سپس با استفاده از نرم افزار زیر عکس رو به آرایه تبدیل کنید

در نرم افزار paint  ویندوز new  ایجاد کنید و سایز عکس رو به صورت زیر انجام بدید و ok کنید

حالا هر شکل دلخواهی که میخواین رسم کنید و نهایت عکستون رو با پسوند bmp. ذخیره کنید.

و سپس نرم افزار glcd_editor رو باز کنید و از قسمت load عکس را انتخاب کنید:

به نکاتی که انتخاب شده و با فلش مشخص شده دقت کنید.

و حالا و روی  copy code to clipbord کلیک کنید تا آرایه ها کپی بشن و بعد و به پروژتون وارد کنید فقط بعده اینکه در پروژتون آرایه رو پیست کردین عبارت flash  رو قلل تعریف ارایه اضافه کنید

به این صورت

flash unsigned char Untitled_bmp[1024]={…}

و با دستور

bmp_disp(Untitled_bmp,0,0,127,7);

عکس رو روی lcd نمایش بدید

  • طراحی فونت برای lcd گرافیکی

برای طراحی فونت باید از نرم افزار زیر (LFG ) استفاده کنید :

ابتدا یک فونت جدید ایجاد کنید و نامی برای آن انتخاب کنید و طول و عرض فونت را به پیکسل هم میتوانید تغییر دهید و در نهایت روی OK  کلیک کنید.

حال  فونت ها برای ویرایش به نمایش در می آیند که طبق تصویر زیر پس از ویرایش فونت های خود می توانید با کلیک روی آیکن کدویژن فونت های خود را با پسوند h. ذخیره کنید.

حال کافی است به پوشه پروژه خود رفته این و محتویات این فایل فونت جدید را با با محتویات فایل فونت پروژه عوض کنید.

نکته : در فایل فونت پروژه کاراکتر های فارسی لازم تعریف شده اند.

نکته :در فایل فونت پروژه آرایه ای به نام map وجود دارد که آن را تغییر ندهید.

  • نحوه عملکرد پروژه به صورت زیر است:
  • متن فارسی

  • متن انگلیسی :

لینک منبع

دانلود سورس کد پروژه .

نکته : دوستان سورس بالارو که دانلود کنید فایل کتابخونه ال سی دی گرافیکی هم درون فایل زیپ هست که میتونید به راحتی استفاده کنید.اما بعضی از دوستان قصد دارند از خوده کدویژن و با استفاده از کدویزارد میکروشون رو به ال سی دی گرافیکی متصل کنن که به راحتی این کار امکان پذیر هستش اما برای نمایش عکس توسط نرم افزار بالا باید بعد از اینکه کدهاتون تولید شد عدد ۱۰۲۴ داخل کروشه ارایه عکس رو پاک کنید خط (,۰x80,0,0×40,0) رو برای عکس های ۱۲۸*۶۴ پیکسل به اول ارایه عکستون اضافه کنید،که به صورت  کلی برای یه عکس به صورت زیر میشه :

عکس بالا بسم الله الرحمن الرحیم هستش که در پروژه هاتون به راحتی می تونید استفاده کنید.

برای نمایش عکس هم (طبق کتابخونه خوده کدویژن) از دستور زیر استفاده کنید:

glcd_putimagef(0,0, besm_pic,GLCD_PUTCOPY);

besm_pic : اسم آرایه عکس

GLCD_PUTCOPY :

آموزش فارسی نویسی LCD های گرافیگی کتابخانه کدویژن و نحوه افزودن کتابخانه های فارسی نویس به برنامه کدویژن :

در این قسمت از آموزش به نحوه فارسی نویسی مستقیم در ال سی دی گرافیکی خواهیم پرداخت در قسمت های قبل به نوحه راه اندازی و نمایش متن و متغیر و همچنین نمایش عکس پرداخته شد برای مشاهده آموزش های قبلی روی لینک مقابل کلیک کنید

در این پروژه از دو کتابخانه نوشته شده توسط آقای نوربخش راد بنام ghaphic,h و font.h استفاده خواهیم کرد این کتابخانه با توابع جدید و استاندارد کد ویژن هماهنگی داشته و براحتی و بصورت مستقیم میتوانید بر روی LCD فارسی بنویسید

برای شروع مانند آموزش های قبلی یک پروژه ایجاد کرده و فایل های مربوط به نمایشگر گرافیکی را وارد کنید سپس دو فایل ghaphic و font را دانلود کرده و به پوشه برنامه کپی کرده و به برنامه اضافه کنید این فایل ها در انتهای آموزش جهت دانلود موجود هستند.

بعد از اضافه کردن فایل های فوق که .h بودن باید فایل c را نیز به برنامه اضافه کنید از منوی Project گزینه Configure را انتخاب کنید سپس با استفاده از گزینه ADD دو فایل Graphic.c و Font.c را پیدا کرده و به پروژه اضافه کنید:

 

همچنین برای فارسی نویسی باید فونت های فارسی را هم به برنامه اضافه کنیم که در فایل پروژه چند فونت فارسی موجود هست آن را نیز به برنامه وارد نمایید:

در فایل های کتابخنه ای که به برنامه افزودیم چند نوع تابع برای فارسی نویسی به برنامه افزوده شده که به مهم ترین انها خواهیم پرداخت و بقیه نیز به اختیار خودتان قابل تست و استفاده هستند.

تابع زیر تابع انتخاب فونت می باشد که با نوشتن نام فونت میتوانید نوع فونت جهت نوشتن را انتخاب کنید مثال:

توابع زیر جهت انتخاب رنگ پشت نوشته و خود نوشته می باشد مثال زیر جهت تنظیم رنگ پشت نوشته بصورت سفید و خود نوشته به رنگ سیاه است:

تابع SetLetter جهت انتخاب نوشتن بین حالت لاتین و فارسی می باشد که در حالت فارسی صفحه راست چین خواهد شد برای انتخاب فارسی نویسی از کد زیر:

و برای نوشتن بصورت لاتین :

تابع SetLine جهت تعیین موقعیت خط به کار میرود مثلا برای انتخاب خط دوم و ستون ۴ بصورت زیر عمل می کنیم:

حال پس از تنظیمات بالا یعنی نوع فونت و راست چین و رنگ متن و موقعیت آن با استفاده از تابع زیر متن مورد نظر را نمایش میدهیم:

تابع DrawStringAt این تابع همزمان همه تنظیمات بالا و نمایش متن را باهم انجام میدهد :

x  و Y مکان نوشته را مشخص میکنند Text همان متن مورد نظر می باشد fk رنگ نوشته و bk رنگ پشت نوشته میباشد به مثال زیر توجه کنید:

تابع TextBox:

تابع فوق یک جعبه مستطیل شکل ایجاد کرده و متن مورد نظر را داخل آن منویسد بدین صورت که x1,y1,x2y2 مکان های شروع و پایان مستطیل مورد نظر هستند str متن موردنظر و style نحوه نمایش را انتخاب میکندبه مثال زیر توجه کنید:

در مثال بالا انواع حالات مختلف نوشته شده که با اجرای کد خروجی زیر حاصل می شود

دانلود پروژه فوق

موفق و سربلند باشید!

خدانگهدار!!!

مطالب پیشنهادی:

بخش نرم افزار پروژه ردیاب : برنامه اندرویدی tracker (ردیاب) و نمایش مختصات

سخت افزار پروژه ردیاب : ارسال موقعیت جغرافیایی روی سرور از طریق ماژول A7 و LPC1768

لینک مطلب بخش نرم افزار پروژه ماژول بلوتوث که تحت #C نوشته شده است.

لینک مطلب بخش سخت افزار پروژه ارتباط ماژول بلوتوث با میکروکنترلر lpc1768 با برنامه اندرویدی و #C )

لینک مطلب بخش نرم افزار پروژه ماژول بلوتوث که تحت اندروید نوشته شده است.

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

3 نظرات
Inline Feedbacks
View all comments
ای وان
ای وان
6 years ago

سلام
برنامه نویسی میکرو با پایتون میسره؟

فرشید
فرشید
5 years ago

سلام ممنون برای آموزش
میشه همین آموزش رو برای آردینو هم بزارین؟

3
0
Would love your thoughts, please comment.x