سلام امیدوارم حالتون خوب باشه !!
در این قسمت قصد داریم تا با هم آموزش راه اندازی LCD کاراکتری 2 * 16 که شامل کانفیگ میکرو کنترلر در نرم افزار STM32CUBEMX و اضافه کردن کتابخانه به KEIL و نحوه استفاده از اون هست رو یاد بگیریم. شما میتونید به راحتی از این کتابخونه برای همه میکروکنترلرهای سری STM32 استفاده کنید.
خب در قدم اول نیازه تا اتصالات LCD رو مطابق تصویر زیر انجام بدیم
همونطور که در تصویر مشخصه قصد داریم تا LCD رو در مد 4 بیتی راه اندازی کنیم به همین منظور حداقل اتصالات به این شکله :
- پایه های D4,D5,D6,D7 , ورودی دیتا
- پایه های کنترلی RS و EN
- GND زمین(منفی)
- VCC یا VDD که تغذیه اصلی برای روشن LCD هستش که به مثبت 5 ولت وصل میشه (البته LCD هایی هم هستند که با ولتاژ 3.3 ولت راه اندازی میشن)
- VEE که برای تنظیم کنتراست (رزولوشن) استفاده میشه که با استفاده از این پایه میشه وضوح متن روی نمایشگر رو تغییر داد. (بجای استفاده از پتانسیومتر میشه این پایه رو با یک مقاومت حدودا زیر 1 کیلو اهم به زمین وصل کرد)
- و در نهایت پایه های A و K که مربوط به بک لایت (نور پس زمینه ) LCD هست رو نیازه تا پایه A رو با یه مقاومت حدود 330 اهم به 5 ولت متصل کنیم.
بعد از انجام اتصالات نوبت به کانفیگ میکرو کنترلر میرسه ، مهم نیست چه نوع میکروکنترلری استفاده میکنید یا اینکه حتما پایه هایی که استفاده میکنید از یک پورت و پشت سر هم باشه
در مرحله اول بعد از اجرای STM32CUBEMX و انتخاب نوع میکروکنترلر مد نظر نیازه تا یه حداقل تنظیماتی انجام بشه :
1-تنظیم کلاک میکرو روی کریستال خارجی یا کلاک داخلی که ما اینجا روی کریستال خارجی که 8MHz هست قرار دادیم
2- تنظیم کلاک میکرو روی حداکثر فرکانس کاری 72 مگاهرتز ( که بسته به نوع میکروکنترلر انتخابی میتونه متفاوت باشه)
3-تعریف 6 پین بصورت خروجی جهت ارتباط با LCD
ما در اینجا PB4 تا PB9 رو به همین منظور خروجی تعریف کردیم و همونطور که قبلا هم اشاره کردیم این 6 پین میتونه پایه های مختلفی باشه و نیاز نیست از یک پورت یا به ترتیب باشن . اینکه چطور در کتابخونه پین های مدنظرمون رو تغییر بدیم جلوتر بررسی میکنیم.
همونطور که در تصویر بالا مشخصه 6 پین برای LCD و 2 پین برای ارتباط با پروگرامر و 2 پین هم برای کریستال خارجی استفاده شده و ما نیاز به تنظیم دیگه ای نداریم
4-در تب PROJECT MANAGER مطابق شکل زیر کامپایلر رو KEIL انتخاب می کنیم و گزینه GENERATE CODE رو می زنیم
پس از GENERATE کد اون رو با نرم افزار KEIL که قبلا انتخاب کرده بودیم باز می کنیم. و یکبار کامپایل میکنیم که مطمئن بشیم خطایی نداریم.
5-6-7- اضافه کردن کتابخانه LCD کاراکتری به پروژه : برای این کار مراحل زیر رو به ترتیب باید انجام بدیم
8-در مرحله اول نیازه تا دوتا پوشه به نام های LCD16X2 و util که در فایل های ضمیمه موجوده رو در پوشه محل ساخت پروژه کپی کنیم .بعد از اون در محیط کیل در پنجره project سمت چپ با کلیک راست بر روی پوشه اصلی پروژه گزینه add group رو میزنیم
9-10-11-با انجام اینکار یک پوشه جدید ایجاد میشه به نام new group که نیازه با دوبار کلیک چپ با وقفه بر روی اون نامش رو تغییر بدیم .این کار رو دوبار انجام میدیم و نام دو پوشه جدید رو به LCD16X2 و util تغییر میدیم
11-1 _ 11-2 بعد از انجام این مراحل نیازه تا فایل های مورد نیاز رو به این دو تا group جدید که نام هاشونو تغییر دادیم اضافه کنیم. برای اینکار با دوبار کلیک چپ بر روی هر پوشه پنجره ای مطابق تصویر زیر باز میشه
در این قسمت هر 4 فایل موجود در پوشه LCD16X2 رو که قبلا در محل پروژه کپی کردیم رو به پوشه LCD16X2 اضافه میکنیم و دو فایل موجود در پوشه util همین به همین طریق به پوشه util اضافه می کنیم
12-13-در مرحله بعد نیازه تا مسیر این دو پوشه رو به پروژه معرفی کنیم .برای اینکار روی گزینه option for target که در تصویر مشخص شده کلیک میکنیم و وارد تب c/c++ میشیم
14-15- حالا در قسمت include paths روی ... سمت راست کلیک میکنیم و در پنجره باز شده در قسمت بالا روی قسمت new کلیک کرده و در قسمت پایین روی ... کلیک کرده و آدرس پوشه LCD16X2 که قبلا در مسیر اصلی پروژه کپی کردیم رو انتخاب میکنیم . همین مراحل را برای اضافه کردن ادرس پوشه util نیز تکرار میکنیم
16- در تصویر همونطور که مشخصه مسیر این دو پوشه در این قسمت اضافه شدن
17- خب الان همه چیز آمادس تا بریم سراغ کد نویسی ، در فایل main لازمه تا این کتابخونه رو include کنیم
و بعد از اون تعریف یک ثابت مانند قسمت پایین شکل بالا ،این بدین منظوره که اگر نیاز بود در پروژه چند lcd راه اندازی بشه ما به راحتی در هدر LCD16X2.h بتونیم یک LCD دیگر هم تعریف کنیم . اگر شما فقط از یک LCD استفاده می کنید نیاز به تغییر نیست و همانند شکل بالا عمل کنید.
در مرحله بعد که خیلی مهمه باید متناسب با اون 6 پین که برای LCD انتخاب کردیم بیاییم و تغییر رو در کتابخونه LCD16X2_cfg.c اعمال کنیم .چون ما B4 تا B9 رو انتخاب کردیم در نتیجه :
حالا اگر شما پورت یا پین دیگه ای رو تنظیم کردید در این هدر به راحتی با توجه به کامنت هایی که جلوی هر قسمت هست میتونید پین مورد نظرتون رو اینجا تغییر بدید
18 - توابعی که ما میتونیم جهت کنرلرو راه اندازی LCD ازشون استفاده کنیم در شکل زیر اومده
خب یه توضیح مختصر راجع هر تابع اگر بخواهیم بدیم:
- LCD16X2_Init(uint8_t) : این تابع LCD رو پیکربندی اولیه میکنه
- LCD16X2_Clear(uint8_t) : پاک کردن کامل نمایشگر
- LCD16X2_Set_Cursor(uint8_t, unsigned char, unsigned char) : مکان نما ( cursor) رو به مختصاتی که به ورودی تابع می دهیم میبره
- void LCD16X2_Write_Char(uint8_t, char) : نوشتن یک کاراکتر روی lcd
- LCD16X2_Write_String(uint8_t, char*) : نوشتن یک رشته روی lcd
- LCD16X2_SL(uint8_t): شیفت به چپ کل کاراکترهای رو lcd
- LCD16X2_SR(uint8_t) : شیفت به راست کل کاراکترهای روی lcd
نکته قابل توجه این هست که حتما باید در قسمت تابع main و قبل از while یکبار lcd رو پیکربندی کنیم .
19-در تصویر زیر نحوه استفاده از این توابع رو میبینید
نحوه عملکرد هم میتونید در ویدئو زیر ببینید
فایل های پروژه : LCD2X16 WITH STM32.rar
امیدواریم از این آموزش استفاده برده باشید!
با سایر آموزش های اصفهان درایو همراه باشید!