LCD های کاراکتری عموما 14 یا 16 پایه دارند .

LCD ئی که ما از آن استفاده می کنیم 2x16  است که با آن 32 کاراکتر را می توان نمایش داد.

پایه های LCD را به دو بخش می توان تقسیم کرد:

1-      آنالوگ (جهت راه اندازی)

2-      دیجیتال (ارتباط با میکرو)

که ترتیب و نام پایه ها به صورت روبرو است:

VSS

1

Vdd

2

Vee

3

RS

4

R/W

5

En

6

DB0

7

DB1

8

DB2

9

DB3

10

DB4

11

DB5

12

DB6

13

DB7

14

A

15

K

16

VSS در واقع همان پایه سورس در FET ها و VEE در واقع پایه امیتر در BJT در حالت سورس مشترک و امیتر مشترک است پس پایه 1 به زمین پایه 2 به ولتاژ 5v وصل می شود پایه 3 میزان شدت نمایش کاراکترها بر روی LCD را مشخص می کند (contrast)  که برای تنظیم آن می توان این پایه را به سر وسط یک پتانسومتر متصل کرد که می توان با اینکار شدت درخشندگی را به دلخواه تغییر داد که هرچه ولتاژ به صفر نزدیکتر شود درخشندگی بیشتر و هرچه  بیشتر شود درخشندگی کمتر می شود.

پایه های 4 و 5 و6 نیز به کنترل مربوط می شوند که عملکرد آنه به صورت زیر است:

R/w

R/s

0           write

0  instruction

1            read

1             data

منظور از instruction  کدها و دستورها  و منظور از data اطلاعاتی است که می خواهیم روی LCD ببینیم.

Enable  کردن آخرین کاری است که برای برقراری ارتباط انجام می دهیم.

پایه های 14_7 هم نیز به عنوان یک باس 8 بیتی برای انتقال اطلاعات بین LCD و میکروکنترلر استفاده می شود برای تبادل اطلاعات دو روش وجود دارد:

1-      ارتباط باس 4 سیمه

2-      ارتباط باس 8 سیمه

ما از کتابخانه alcd.h  استفاده می کنیم که از روش اول استفاده می کند که تنها پایه های 14_11 را میکرو وصل میکنیم و پایه های دیگر را برای اینکه نویز نگیرد بهتر است با مقاومت های 10k به زمین متصل کنیم.

در ورژن های قدیمی کدویژن لازم بود تا تمام پایه های LCD را تنها به یک پورت وصل کنیم اما حال می توان به هر I/O ئی وصل کرد.

برای نور زمینه پایه های 15 و 16 تعبیه شده اند که به صورت زیر متصل می شوند:

15.Aآند led که برای روشنایی صفحه lcd میباشد که باید به مثبت وصل شود.

16.Kکاتد led که باید به منفی (زمین ) وصل شود.

شماره پین

نشانه

نام

توصیف

1

VSS

Power supply

استLcd پایه زمین تغذیه ی

2

VDD

Power supply

پایه مثبت تغذیه ی lcd است که به +5 تا4.5 ولت وصل میشود                                                                   

3

VEE

LCD Supply Voltage

پایه درخشندگی lcd که توسط یک پتانسومتر 5k یا یک مقاومت 2.2k تنظیم میگردد

4

RS

Register select

اگر این پایه صفر باشددیتای وردی به پایه های d0تا d7فرمان کنترلی محسوب شده

اگر این پایه یک باشد دیتای ورودی به پایه های d0تا d7 کارکتر برای چاپ میباشد

5

RW

Read/Write

اگر این پایه را صفر کنیم میتوانیم بر روی lcd بنوسیم و اگر این پایه را یک کنیم میتوانیم بافر lcd را بخوانیم

نکته:در avr بیشتر موقعه ها این پایه را مستقیما به زمین وصل کرده و آن را در حالت نوشتن قرار میدهند

6

E

Read Write enable

پایه فعال ساز lcd است و نوع فعال سازی یک لبه پایین رونده میباشد

7

8

9

10

DB0

DB1

DB2

DB3

Data bus 0-7

بیت های اول تا چهارم دیتا باس lcd  است

نکته:در هنگامی که از مد 4 بیت استفاده کنیم این پایه ها باز می ماند

11

12

13

14

DB4

DB5

DB6

DB7

بیت های چهارم تا هشتم دیتا باس lcd  است

نکته:در هنگامی که از مد 4 بیت استفاده کنیم از این پایه ها استفاده میشود

15

A

پایه آند led backlight که با یک مقاومتدر حدود 47 اهم به +5v وصل میشود

16

K

پایه کاتد led backlight که به زمین وصل میشود

 

کتابخانه  alcd.h    

    برای نمایش حروف و کلمات بر روی LCD راه های مختلفی وجود دارد که استفاده از نرم افزار CodeVision  به دلیل در اختیار داشتن توابع کتابخانه ای لازم از بقیه بسیار آسان تر می باشد. این توابع از بیشتر LCDهای موجود در بازار، با تعداد ردیف و ستون های مختلف پشتیبانی می کند.

void _lcd_ready();

void _lcd_write_data(unsigned char data);

Unsigned char lcd_read_byte(unsigned char addr);

unsigned char lcd_init(unsigned char lcd_columns)

void lcd_clear(void)

void lcd_gotoxy(unsigned char x, unsigned char y)

void lcd_putchar(char c)

void lcd_puts(char *str)

void lcd_putsf(char flash *str)

 

توابع سطح پایین:

1.

void _lcd_ready();

زمانی که این تابع فراخوانی شود، میکروکنترلر منتظر آماده شدن LCD برای دریافت اطلاعات می شود.

2.

void _lcd_write_data(unsigned char data);

از این تابع برای مقداردهی کردن ثبات درون LCD استفاده می شود. این ثبات برای کنترل تنظیمات LCD می باشد و به کمک این تابع تنظیمات LCD را تغییر می دهیم.برای مشاهده این تنظیمات به جدول صفحه بعد مراجعه کنید

_lcd_ready(); //waits until the LCD module is ready for receiving data

_lcd_write_data(0x0E); //نمایش روشن و مکان نما روشن

6.

void lcd_putsf(char flash *str);

رشته str را که آرایه ای از کارکترها می باشد، را در موقعیت فعلی نمایش می دهد. توجه کنید که وقتی از این تابع استفاده می کنیم که رشته str درون Flash قرار داشته باشد.

برای مثال:

lcd_clear(); //صفحه نمای را پاک میکند که زمان زیاد برای این کار می برد.

lcd_init(16); //موقعیت مکان نما را در خانه 0و0 قرار داده و اعلام میکند 16 کارکتر داریم

char c = ‘|’; //Declares char c, and sets its value to ‘|’

lcd_putchar(c); //Prints variable c on the LCD

lcd_gotoxy(8,1); //8 ستون و 1 سطر مورد نظر را نشان می دهد

char str1[16] = “Hi…”; //Define a array of chars(string). Just like variable c This variable is stored in the microcontrollers RAM.

lcd_puts(str1); //because str1 is stored in RAM we have to use lcd_puts() جنس متغیر باید حتما رشته باشد پس با ترفندهایی که در زیر آمده آن را به رشته تبدیل کرد.

lcd_clear(); //Clears the LCD again

lcd_putsf(“Hello Majid!”); //Prints “Hello Majid” on the LCD! we use lcd_putsf() because the string “AVR Rocks” is part of the code and wasn’t declared in the middle of the program.

دستور lcd_putsf  عبارت را داخل حافظه فلش قرار می دهد.

تمامی رجیستر ها و متغیرهایی که تعریف می کنیم داخل حافظه SRAM قرار می گیرد برای اینکه متغیری در حافظه فلش قرار گیرد باید از دستور زیر استفاده کنیم:

Flash   int a=0;

وقتی متغیری در حافظه فلش تعریف می شود مقدارش همواره ثابت است و نمی توان آن را در هیچ تابعی چه اصلی و چه فرعی تعریف کرد وباید خارج از توابع تعریف کرد .

برای تعریف کردن متغبر درون eeprom :

Eeprom int a=0;

که گنجایش این حافظه  1kb  استکه برای پروگرام کردن آی سی علاوه بر زدن FLASH باید گزینه EEPROM را هم فشار دهیم.

 

توابع کتابخانه ای stdlib.h:

درون این کتابخانه ها چندین تابع پرکاربرد برای ساختن رشته ها و کار با آنها موجود می باشد.

1.

itoa(int n,char *str);

این تابع عدد 16 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا 65535 است)

2.

Ltoa(long int n , char *str);

این تابع عدد 32 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا 4294967295 است)

3.

void ftoa(float n, unsigned char decimals, char *str);

این تابع عدد اعشاری n را به صورت کارکتر های اسکی در آورده و در  متغییر رشته  ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود!

4.

void ftoe(float n, unsigned char decimals, char *str);

این تابع عدد اعشاری و توان دار n را (مثل (4.8e-6 را به صورت کارکتر های اسکی در آورده و در  متغییر رشته  ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود!

5.

rand();

این تابع یک عدد تصادفی بین صفر تا 32767 تولید میکند

نکته:هرگاه در نرم افزار codevision avr  از توابع printf یا sprintf استفاده کنیم باید ویژگی آن را تعیین نماییم .در ضمن این توابع حجم کد تولیدی برنامه را زیاد می کنند. که در حالت پیش زمینه محدودیت دارد و تنها int را نمایش می دهد برای نمایش float و char و... در configure می رویم c compiler را می زنیم سپس code generation را می زنیم سپس sprint features را تغییر می دهیم.

کتابخانه stdio.h

بیشتر از این دستور برای تبدیل متغیر به رشته استفاده می کنیم:

Sprintf(  نام رشته مورد نظر, "%f  or… "  , a   )

Float         %f

Char         %c

Decimal           %d

Int           %i

Unsigned             %u

Hex       %h

Pointer               %p

%                  %%