در این پست از سایت اِمیک, یک پروژه بسیار جالب با LCD کاراکتری و میکروکنترلر AVR به نام پروژه AVR نوشتن متن فارسی روی LCD کاراکتری قرار داده شده است. همانطور که از نام این پروژه مشخص است ما روی یک LCD کاراکتری معمولی, حروف و کلمات فارسی را خواهیم نوشت. LCD کاراکتری برای نمایش حروف و کلمات انگلیسی طراحی و ساخته شده است ولی ما به روشی که در ادامه توضیح خواهم داد روی این LCD کلمات فارسی را خواهیم نوشت. در زیر شماتیک این پروژه جالب را مشاهده می کنید.

همانطور که مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 استفاده کرده ایم. از یک LCD کاراکتری نیز استفاده کرده ایم که این LCD به پورت D میکروکنترلر متصل شده است. پتانسیومتر RV1 نیز برای تنظیم کنتراست یا میزان روشنایی LCD کاراکتری استفاده شده است. این پروژه در عمل نیز تست شده است که در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.

شماتیک این پروژه بسیار ساده است و نکته خاصی ندارد. فقط توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید.
در ادامه برنامه این پروژه را مشاهده می کنیم. تنها نکته این پروژه این است که ما باید توسط یک نرم افزار بسیار ساده حروف و کلمات فارسی مورد نظرمان را در ان رسم کنیم و کد ان را توسط نرم افزار دریافت کنیم و از این کد در برنامه استفاده کنیم.
نرم افزاری که در مورد ان توضیح دادم درون فایل دانلودی انتهای مطلب موجود است. این نرم افزار نیاز به نصب ندارد و کار با ان بسیار ساده است. محیط نرم افزار به صورت زیر است.

پس از باز کردن نرم افزار, کافی است که کاراکتر یا همان حرف فارسی مورد نظرتان را در محیطی که به صورت مربع های سبز رنگ است رسم کنید. با انتخاب مربع, رنگ ان از سبز به سیاه تغییر می کند. برای LCD کاراکتری 2 در 16 معمولی باید گزینه 5X7 + cursor line را انتخاب کنید. هیچگونه تنظیمات دیگری لازم نیست و می توانید حرف فارسی مورد نظرتان را در قسمت مربوطه رسم کنید.
پس از رسم حرف فارسی مورد نظرتان, روی دکمه GENERATE کلیک کنید تا کد ان به صورت زیر تولید شود.

از صفحه باز شده گزینه mikroC را انتخاب کنید. همانطور که مشاهده می کنید یک سری کد توسط نرم افزار تولید شده است. ما فقط به مقادیر ارایه که با رنگ ابی مشخص کرده ام نیاز داریم و به بقیه کدها نیازی نیست. بنابراین برای هر حرف فقط مقدار ارایه ان را که مشخص شده کپی کنید تا در برنامه پروژه از ان استفاده کنیم.
برنامه کدویژن:
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <alcd.h> #include <delay.h> //در زير تعدادي ارايه تعريف کرده ايم که هر کدام از انها برابر يک حرف فارسي مي باشد که ما مي خواهيم روي ال سي دي نمايش دهيم// //مقادير ارايه هاي زير توسط برنامه موجود در فايل دنلودي توليد شده اند// flash unsigned char Word1[] = {0,0,0,21,31,0,0,0}; //حرف س// flash unsigned char Word2[] = {2,2,2,2,2,0,0,0}; //حرف ا// flash unsigned char Word3[] = {0,0,0,1,31,0,6,0}; //حرف ي// flash unsigned char Word4[] = {0,6,0,17,31,0,0,0}; //حرف ت// flash unsigned char Word5[] = {4,4,4,4,4,2,4,0}; //حرف اِ// flash unsigned char Word6[] = {0,0,0,0,31,5,2,0}; //حرف م// flash unsigned char Word7[] = {0,0,0,1,31,0,6,0}; //حرف ي// flash unsigned char Word8[] = {1,2,4,18,30,0,0,0}; //حرف ک// //توسط تابع زير ارايه هايي که در بالا تعريف کرديم را به کاراکتر تبديل مي کنيم تا بتوانيم روي ال سي دي کاراکتري نمايش دهيم// void define_char(unsigned char flash *Word ,unsigned char Character) { unsigned char i,a; a=(Character<<3)|0x40; for(i=0;i<8;i++) lcd_write_byte(a++ ,*Word++); } void main(void) { //ميکروکنترلر را براي اتصال به ال سي دي خروجي کرده ايم D در زير پورت// DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); lcd_init(16); //پيکره بندي ال سي دي کاراکتري// //در زير کاراکترهايي که در بالا تعريف کرده ايم را برابر اعداد 1 تا 8 قرار داده ايم// //بنابراين هنگامي که مي خواهيم کاراکترهاي تعريف شده را روي ال سي دي نمايش دهيم از اعداد 1 تا 8 که معادل کاراکترهاي ما هستند استفاده مي کنيم// define_char(Word1,1); define_char(Word2,2); define_char(Word3,3); define_char(Word4,4); define_char(Word5,5); define_char(Word6,6); define_char(Word7,7); define_char(Word8,8); while (1) { lcd_gotoxy(6,1); //رفتن به سطر 1 و ستون 6 از ال سي دي کاراکتري// lcd_putchar(8); //Word8 نمايش کاراکتر شماره 8 يا همان کاراکتر ارايه// lcd_putchar(7); //و در ادامه نيز ديگر کاراکترها نمايش داده شده اند Word7 نمايش کاراکتر شماره 7 يا همان کاراکتر ارايه// lcd_putchar(6); lcd_putchar(5); lcd_gotoxy(6,0); lcd_putchar(4); lcd_putchar(3); lcd_putchar(2); lcd_putchar(1); delay_ms(300); } } |
همانطور که مشاهده می کنید در ابتدای برنامه تعدادی ارایه (با نام های Word1 تا Word8) تعریف شده که مقدار این ارایه ها توسط نرم افزار معرفی شده و طبق توضیحات گفته شده تولید شده است. توجه کنید که به دلیل کم بودن حافظه LCD کاراکتری, فقط می توان 8 حرف فارسی (کاراکتر) در ان ذخیره کرد و بیشتر از ان را نمی تواند ذخیره و نمایش دهد. بنابراین ما فقط 8 ارایه که هر کدام از انها برابر یک کاراکتر یا حرف فارسی است تعریف کرده ایم.
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس و نرم افزار مورد نیاز را نیز می توانید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…





سلام ببخشید یه سوال داشتم.من وقتی میخوام رویه LCDکاراکتری مقادیرمو نشون بدم خیلی به هم ریخته و مبهم نشون میده.مشکل از چیه؟
دستت درد نکنه.
بین پایه 1 و 3 ال سی دی چه مقاومتی گذاشتید ؟
یک مقاومت 1 کیلو به جای پتانسیومتر گذاشتم ولی شما پتانسیومتر استفاده کنید چون ممکنه برای LCD شما جواب ندهد.