راه اندازی ال سی دی کاراکتری با میکروکنترلر AVR
![ال سی دی کاراکتری](https://nirasystem.com/blog/wp-content/uploads/2021/06/LCD_16X2_AVR.png)
* چرا از LCD کاراکتری استفاده کنیم ؟
در آموزش قبلی گفتیم که بعضی وقتا احتیاج به دیدن اطلاعلات حین اجرای برنامه داریم ، مثلا بعضی اعداد رو باید نمایش بدیم ( مثلا روی سون سگمنت) !
حالا فرض کنید قراره یک menu برای برناممون بسازیم و با استفاده ازش برنامرو پیش ببریم . دیگه سون سگمنت کمک چندانی نمیتونه بهمون بکنه !
میتونیم از یک نمایشگر دیگه ای به اسم ” ال سی دی کاراکتری” استفاده کنیم .
نمایشگر های متعدد دیگه ای هم وجود داره برای نمایش اطلاعات .
در این آموزش ما میخوایم از ال سی دی کاراکتری ( ال سی دی گرافیکی هم داریم ) استفاده بکنیم !
شمای کلی یک ال سی دی به شکل زیر هستش :
بیشتر بخوانید : میکروکننرلر
همونطور که میبینید ال سی دی کاراکتری ۱۶ تا پایه داره که به ترتیب بریم ببینیم هر کدومش برای چیه :
- VSS : این پایه باید به زمین یا همون GND وصل شه (پایانه منفی منبع تغذیه)
- VCC : این پایه باید به ۵ ولت یا همون پایانه مثبت منبع تغذیه وصل بشه
- VEE: این پایه باید به یک پتانسیومتر وصل بشه و به تغییر مقاومت اون میتونید Contrast صفحرو تنظیم کنید
- * سه تا پین بعدی پین های کنترلی هستن :
- RS: از این پایه برای انتخاب رجیستر استفاده میکنیم که به میکرو وصل میشه
- R/W : از این پایه برای خواندن و نوشتن استفاده میشه که این هم به میکرو وصل میشه
- En: این پایه به میکرو متصل میشود و پایه ی فعال سازی ال سی دی هست.
پایه های D0 تا D7 پایه های دیتا هستن که با استفاده از این ها اطلاعاتی که نیاز داریم رو روی ال سی دی میفرستیم ، برای استفاده از پایه های کمتر ما به صورت ۴ بیتی روی ال سی دی اطلاعات رو میفرستیم ( همینجوریشم کلی پایه داره ازمون میگیره)
و پایه های آند و کاتد هم برای Backlight هستن ، آند رو به ۵ ولت و کاتد رو به زمین متصل کنید !
شاید بپرسید که این ال سی دی ها ابعاد و اندازه ندارن ؟
بله دارن !
معمول ترین چیزی که استفاده میشه ۲*۱۶ هست ، حالا این عددا ینی چی؟ مثل یک ماتریس باید در نظر بگیریدش ، یک ماتریسی که ۲ تا سطر داره و ۱۶ تا ستون !
همونطور که میبینید مثل یک ماتریسه که درایه هاش نوشته شده ، ما با استفاده از توابعی که وجود داره در کد میتونیم مشخص کنیم که کجای این ال سی دی میخوایم بنویسیم.
ابعاد دیگه ای هم وجود داره برای ال سی دی ها !
طرز سیم کشی اون به میکرو ( اینجا من از mega16 استفاده میکنم ) :
مشخصه که من از ال سی دی به شکل ۴ بیتی دارم استفاده میکنم .
تنظیم از طریق Code Wizard :
و بعد :
تنظیم به شکل دستی :
حین اجرای برنامه اگر گزینه Project رو در پنل بالای برنامه انتخاب کرده سپس گزینه آخر یعنی Configure را انتخاب کنید
سپس وارد C compiler شوید و از بخش libraries وارد ال سی دی شده و تنظیمات لازم رو انجام بدید .
توابعی که برای ال سی دی در کد نیاز داریم :
- ;(x, y)lcd_gotoxy
از این دستور برای اینکه میخواهیم در کدام موقعیت در ال سی دی قرار بگیریم استفاده میکنیم.
- ;(‘character’)lcd_putchar
از این دستور برای نوشتن یک حرف در ال سی دی استفاده میکنیم
- ;(“jomle”)lcd_puts
برای نوشتن یک جمله از این دستور استفاده میکنیم.
- ;()lcd_clear
با این دستور ال سی دی را کلا پاک میکنیم .(هر جایی نمیشه از این دستور استفاده کرد چون هی جملات رو پاک میکنه و صفحه یک حالت پرش پیدا میکنه مگه اینکه یک delay هم براش بزارید)
همه این دستورات در کتابخانه alcd.h وجود دارند که اول برنامه باید تعریف شود .
وارد محیط کد ویژن بشیم تا یک جمله رو روی ال سی دی نمایش بدیم :
اول برنامه کتابخونه های مورد نیاز تعریف شده که قبلا توضیح دادم ! از lcd_init استفاده شده برای اینکه ببینیم lcd چند در چنده (اگه از کد ویزارد اقدام به راه اندازی ال سی دی بکنید این کد ها خود به خود ظاهر میشن !)
با دستور lcd_gotoxy نقطه شروع جملمون سطر اول ستون اول خواهد بود ، حالا شاید بپرسین چرا از ۰ شروع کردیم مگه ۱ نباید باشه ؟
جواب اینه که اعداد در این برنامه zero base هستن و از صفر شروع میشوند .
حال بعد از lcd_gotoxy با استفاده از دستور lcd_puts جمله معروف hello world رو نمایش میدیم .
این شد راه اندازیه اولیه ی یک ال سی دی کاراکتری! برای یادگیری بیشتر زبان برنامه نویسی Embedded C اینجا کلیک کنید.
حال فرض کنید یک شمارنده ای داریم که در حال شمارش است و میخواهیم آن را روی ال سی دی نمایش دهیم ، اینبار از دستور sprintf در کتابخانه stdio.h استفاده میکنیم :
کتابخانه ها در بالا معرفی شدن ، یک متغیر ۸ بیتی به اسم counter معرفی شد و همچنین index
کاراکتری به اسم st نیز تعریف کردیم ، میخواهیم هر ۱ ثانیه یک بار شمارنده افزایش یابد و روی ال سی دی این تغییرات رو ببینیم .
از اونجایی که نمیتونیم یک عدد از جنس int رو در دستور lcd_puts استفاده کنیم از یک تابع کمکی به اسم sprintf استفاده میکنیم و جملاتی که میخواهیم رو در st میریزیم و st رو روی ال سی دی از طریق lcd_puts نمایش میدهیم .
چون متغیر ما از جنس int میباشد با دستور %d اون رو باید نمایش بدهیم.
و همچنین چون ما حداکثر ۳ رقم میخواهیم نمایش دهیم از %۳d استفاده کردیم !
Sprintf(character, “jomle + (%d,%f,….)”,moteghayer,….)
در باکس زیر میتوانید کد زده شده را دانلود نمایید.
موفق باشید:)