قالب بندی، کنترل و اسکرول متن در LCD

قالب بندی، کنترل و اسکرول متن در LCD
13 بازدید
۱۴۰۵-۰۷-۲۱
7 دقیقه
  • نویسنده: حسین زنجانی زاده
  • درباره نویسنده: ---

در قسمت قبل از آموزش آردوینو با نحوه اتصال و راه‌اندازی نمایشگر متنی HD44780 و کتابخانه LiquidCrystal آشنا شدیم. در قسمت 61 آموزش آردوینو کار با LCD را ادامه می‌دهیم و یاد می‌گیریم چگونه محل نمایش متن را مشخص کنیم، مکان‌نما را کنترل کنیم، صفحه را روشن و خاموش کنیم و متن‌های طولانی را روی نمایشگر حرکت دهیم.

در این آموزش با توابع مهمی مانند lcd.setCursor()، lcd.clear()، lcd.blink()، lcd.noBlink()، lcd.display()، lcd.noDisplay()، lcd.scrollDisplayLeft() و lcd.scrollDisplayRight() کار خواهیم کرد.

قالب‌بندی متن روی LCD با آردوینو

زمانی که از یک LCD در پروژه استفاده می‌کنیم، معمولاً نمی‌خواهیم تمام اطلاعات پشت سر هم روی صفحه نوشته شوند. در بسیاری از پروژه‌ها لازم است مقادیر مختلف در محل‌های مشخصی از نمایشگر قرار بگیرند. برای مثال ممکن است بخواهیم مقدار یک سنسور را در یک ستون، وضعیت سیستم را در ستون دیگر و یک شمارنده را در نقطه مشخصی از صفحه نمایش دهیم.

کتابخانه LiquidCrystal امکان تعیین محل دقیق چاپ متن را با استفاده از تابع lcd.setCursor() فراهم می‌کند.

مثال قالب‌بندی متن روی LCD

کد زیر ابتدا یک شمارش معکوس از 9 انجام می‌دهد و سپس اعداد را با فاصله‌های مشخص در چند ستون LCD نمایش می‌دهد. اگر نمایشگر شما تعداد سطر یا ستون متفاوتی دارد، مقادیر numRows و numCols را متناسب با LCD خود تغییر دهید.

قالب بندی، کنترل و اسکرول متن در LCD
 نمایش اعداد در موقعیت‌های مختلف LCD

تابع lcd.setCursor چگونه کار می‌کند؟

دستور lcd.print() هر کاراکتر جدید را بعد از کاراکتر قبلی نمایش می‌دهد. اما با استفاده از lcd.setCursor() می‌توان تعیین کرد چاپ بعدی دقیقاً از کدام ستون و سطر آغاز شود.

ساختار این دستور به شکل زیر است:

برای مثال:

این دستور مکان‌نما را روی ستون 12 و سطر صفر قرار می‌دهد و سپس مقدار i در همان موقعیت چاپ می‌شود.

نکته: شماره‌گذاری سطرها و ستون‌های LCD از صفر شروع می‌شود. بنابراین lcd.setCursor(4,0) به معنی ستون پنجم در سطر اول است.

ایجاد چند ستون روی LCD

در مثال بالا، متغیر columnWidth فاصله بین ستون‌ها را مشخص می‌کند:

سپس موقعیت هر ستون از طریق ضرب شماره ستون در عرض آن محاسبه می‌شود:

به این ترتیب هر مقدار با فاصله‌ای ثابت از مقدار قبلی روی LCD چاپ می‌شود.

پاک‌کردن LCD با lcd.clear

دستور زیر تمام محتوای نمایشگر را پاک می‌کند:

پس از اجرای این دستور، مکان‌نما نیز دوباره به گوشه بالا و سمت چپ نمایشگر منتقل می‌شود.

استفاده از تمام سطرهای LCD

نسخه بعدی برنامه از تمام سطرهای موجود در LCD استفاده می‌کند. برای این کار دو حلقه for تو در تو داریم؛ حلقه اول بین سطرها و حلقه دوم بین ستون‌ها حرکت می‌کند.

حلقه بیرونی سطرهای LCD را پیمایش می‌کند و حلقه داخلی مقادیر را در ستون‌های مختلف همان سطر قرار می‌دهد.

محاسبه خودکار تعداد ستون‌ها

به‌جای اینکه تعداد ستون‌های قابل نمایش را به‌صورت ثابت مشخص کنیم:

می‌توان تعداد ستون‌ها را بر اساس عرض LCD و فاصله هر ستون محاسبه کرد:

در این حالت تعداد ستون‌ها متناسب با تعداد کاراکترهای LCD به‌صورت خودکار محاسبه می‌شود.

چشمک‌زدن Cursor و روشن و خاموش کردن LCD

بخش بعدی آموزش مربوط به کنترل مکان‌نما و خود نمایشگر است. گاهی اوقات می‌خواهیم توجه کاربر را به یک قسمت خاص جلب کنیم یا نمایشگر را برای مدتی خاموش کنیم. کتابخانه LiquidCrystal برای این کار چند تابع آماده در اختیار ما قرار می‌دهد.

مثال کنترل Cursor و Display

قالب بندی، کنترل و اسکرول متن در LCD
 چشمک‌زدن مکان‌نما روی نمایشگر LCD

فعال‌کردن چشمک‌زدن Cursor

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

در این حالت یک بلوک چشمک‌زن در محل چاپ کاراکتر بعدی دیده می‌شود.

برای غیرفعال‌کردن این حالت کافی است بنویسیم:

خاموش‌کردن متن LCD بدون پاک‌کردن آن

دستور lcd.noDisplay() نمایش متن روی LCD را غیرفعال می‌کند:

نکته مهم این است که این دستور اطلاعات را از حافظه داخلی LCD پاک نمی‌کند. بنابراین با دستور زیر می‌توان همان اطلاعات را دوباره نمایش داد:

این ویژگی به ما اجازه می‌دهد کل صفحه را بدون پاک‌کردن محتوای آن چشمک‌زن کنیم.

ساخت تابع چشمک‌زدن کل Display

در مثال کتاب تابعی با نام displayBlink() ساخته شده است:

پارامتر blinks تعداد دفعات چشمک‌زدن و پارامتر duration مدت روشن یا خاموش‌بودن صفحه را تعیین می‌کند.

برای مثال:

نمایشگر را دو مرتبه با فاصله زمانی 250 میلی‌ثانیه خاموش و روشن می‌کند.

اسکرول متن روی LCD با آردوینو

یکی از محدودیت‌های LCDهای متنی، تعداد کم کاراکترهای قابل نمایش در هر سطر است. برای مثال، روی یک LCD 16×2 فقط 16 کاراکتر در هر سطر قابل مشاهده است. اگر متن طولانی‌تر باشد، می‌توان آن را روی نمایشگر حرکت داد یا Scroll کرد.

در مثال کتاب، جهت حرکت متن با استفاده از یک Tilt Sensor کنترل می‌شود. یک سمت سنسور Tilt به پایه 7 Arduino و سمت دیگر آن به GND متصل می‌شود.

قالب بندی، کنترل و اسکرول متن در LCD
 اتصال Tilt Sensor برای کنترل جهت حرکت متن LCD

کد اسکرول متن با Tilt Sensor

حرکت متن به سمت چپ

دستور زیر تمام محتوای نمایشگر را یک موقعیت به سمت چپ حرکت می‌دهد:

در این مثال، زمانی که سنسور Tilt در وضعیت فعال قرار دارد و ورودی LOW خوانده می‌شود، متن به سمت چپ حرکت می‌کند.

حرکت متن به سمت راست

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

زمانی که وضعیت سنسور دوباره به HIGH برگردد، برنامه متن را در جهت راست حرکت می‌دهد.

تعیین سرعت اسکرول

سرعت حرکت متن در این مثال با مقدار delay() کنترل می‌شود:

اگر متن بیش از حد سریع حرکت می‌کند می‌توانید مقدار Delay را افزایش دهید و اگر حرکت بیش از حد کند است مقدار آن را کاهش دهید.

ساخت متن روان یا Marquee روی LCD

قابلیت اسکرول زمانی بسیار مفید است که متن بیشتر از عرض یک سطر LCD باشد. مثال بعدی یک تابع marquee() ایجاد می‌کند تا متن‌های طولانی روی صفحه حرکت کنند.

نحوه کار تابع marquee

ابتدا متن کامل با دستور lcd.print() در حافظه نمایشگر نوشته می‌شود. سپس برنامه بررسی می‌کند که طول رشته چقدر بیشتر از عرض LCD است و به همان تعداد صفحه را به سمت چپ حرکت می‌دهد:

محدودیت حافظه داخلی LCD

تراشه LCD دارای حافظه داخلی برای نگهداری متن است. کتاب اشاره می‌کند که این حافظه محدود است و در بسیاری از نمایشگرهای چهارخطی حدود 32 بایت ظرفیت دارد. اگر رشته‌های بسیار طولانی را مستقیماً در این حافظه قرار دهیم، ممکن است متن روی خودش Wrap شود و نتیجه مورد انتظار را نداشته باشیم. برای اسکرول متن‌های طولانی‌تر باید متن را در حافظه Arduino نگه داریم و هر بار فقط بخشی از آن را روی LCD نمایش دهیم.

اسکرول دستی متن‌های طولانی

تابع زیر روشی برای اسکرول دستی رشته‌های طولانی ارائه می‌دهد. در این روش به‌جای حرکت‌دادن حافظه داخلی LCD، در هر مرحله فقط بخش قابل مشاهده رشته روی نمایشگر چاپ می‌شود.

روش اسکرول دستی چه تفاوتی دارد؟

در ابتدا فقط به‌اندازه عرض LCD از رشته روی صفحه چاپ می‌شود. برای یک LCD با 16 ستون، 16 کاراکتر اول نمایش داده می‌شوند. پس از یک ثانیه، برنامه موقعیت شروع را یک کاراکتر جلو می‌برد و دوباره 16 کاراکتر بعدی را نمایش می‌دهد. این روند تا زمانی ادامه پیدا می‌کند که تمام متن از مقابل صفحه عبور کند.

مزیت این روش این است که طول پیام دیگر به حافظه داخلی محدود LCD وابسته نیست و می‌توان رشته‌ای را اسکرول کرد که در حافظه Arduino جا می‌شود.

جمع‌بندی

در قسمت 61 آموزش آردوینو، کار با LCD متنی را یک مرحله جلوتر بردیم. ابتدا با lcd.setCursor() محل دقیق نمایش متن و اعداد را کنترل کردیم و با lcd.clear() محتوای صفحه را پاک کردیم. سپس با توابع lcd.blink() و lcd.noBlink() مکان‌نما را کنترل کردیم و دیدیم چگونه با lcd.display() و lcd.noDisplay() نمایش متن را بدون پاک‌شدن اطلاعات حافظه LCD روشن و خاموش کنیم.

در ادامه نیز با lcd.scrollDisplayLeft() و lcd.scrollDisplayRight() متن را روی صفحه حرکت دادیم و دو روش برای ساخت متن روان یا Marquee بررسی کردیم. همچنین در قسمت بعدی آموزش آردوینو به سراغ نمایش کاراکترها و نمادهای ویژه روی LCD خواهیم رفت.

اطلاعات
13
0
0
اشتراک و حمایت
profile نویسنده: حسین زنجانی زاده متخصص الکترونیک

مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله