...

نمایش نمادها و ساخت کاراکترهای سفارشی در LCD با آردوینو

نمایش نمادها و ساخت کاراکترهای سفارشی در LCD با آردوینو
1 بازدید
۱۴۰۵-۰۸-۰۳
8 دقیقه
  • نویسنده: حسین زنجانی زاده
  • درباره نویسنده: ---

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

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

نمایش نمادهای خاص روی LCD با آردوینو

نمایشگرهای متنی مبتنی بر HD44780 فقط به حروف و اعداد معمولی محدود نیستند. در حافظه کاراکتری این نمایشگرها مجموعه‌ای از نمادها قرار دارد که می‌توان با استفاده از کد مربوط به هر کاراکتر آن‌ها را روی صفحه نمایش داد. برای مثال می‌توان نمادهایی مانند درجه °، پی π، سنت، ریشه دوم و امگا را نمایش داد. برای این کار ابتدا باید کد کاراکتر موردنظر را از جدول Character Pattern در دیتاشیت کنترلر LCD پیدا کنیم.

نمایش نمادها و ساخت کاراکترهای سفارشی در LCD با آردوینو
 استخراج کد نمادهای خاص از جدول کاراکترهای LCD و نمایش آن‌ها

کد نمایش نمادهای خاص روی LCD

کد نمادها چگونه پیدا می‌شود؟

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

کتاب برای توضیح این موضوع نماد درجه را مثال می‌زند. کد باینری این نماد برابر است با:

همین مقدار را می‌توان به‌صورت هگزادسیمال یا ده‌دهی نیز بیان کرد:

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

تفاوت lcd.write و lcd.print

برای نمایش مستقیم یک کد کاراکتر از lcd.write() استفاده می‌کنیم. برای مثال:

تابع showSymbol() ابتدا نماد را نمایش می‌دهد و سپس توضیح مربوط به آن را کنار نماد چاپ می‌کند.

ساخت کاراکتر سفارشی روی LCD

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

هر کاراکتر متنی LCD روی یک شبکه 5×8 پیکسل ساخته می‌شود. برای تعریف یک کاراکتر سفارشی باید یک آرایه شامل هشت بایت بسازیم؛ هر بایت یکی از سطرهای کاراکتر را مشخص می‌کند.

در مقادیر باینری، عدد 1 به معنی پیکسل روشن و عدد 0 به معنی پیکسل خاموش است. در مثال کتاب دو چهره، یکی خندان و دیگری ناراحت، ساخته شده‌اند.

نمایش نمادها و ساخت کاراکترهای سفارشی در LCD با آردوینو
 طراحی کاراکترهای سفارشی Happy و Saddy روی شبکه 5×8 پیکسل

کد ساخت کاراکتر سفارشی

تعریف الگوی پیکسلی کاراکتر

آرایه happy از هشت سطر تشکیل شده است:

پنج بیت سمت راست هر مقدار مشخص می‌کنند کدام پیکسل‌های آن سطر روشن باشند. با کنار هم قرار دادن هشت سطر، شکل کامل کاراکتر ساخته می‌شود.

ثبت کاراکتر در حافظه LCD

برای ایجاد کاراکتر از تابع lcd.createChar() استفاده می‌شود:

در این مثال چهره خندان در موقعیت صفر و چهره ناراحت در موقعیت یک ذخیره می‌شوند. سپس می‌توان کاراکتر را با lcd.write() نمایش داد:

نکته: بین lcd.write(0) و lcd.write('0') تفاوت وجود دارد. در مثال کتاب، عبارت اول کاراکتر سفارشی شماره صفر را نمایش می‌دهد؛ اما عبارت دوم کاراکتر معمولی عدد صفر را چاپ می‌کند.

ساخت یک انیمیشن ساده روی LCD

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

در نتیجه چهره روی صفحه هر نیم ثانیه بین حالت خندان و ناراحت تغییر می‌کند و یک انیمیشن بسیار ساده ایجاد می‌شود.

ساخت اعداد بزرگ روی LCD با چند کاراکتر

اندازه کاراکترهای LCD ثابت است، اما می‌توان با ترکیب چند کاراکتر سفارشی یک نماد یا عدد بزرگ‌تر ساخت.

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

نمایش نمادها و ساخت کاراکترهای سفارشی در LCD با آردوینو
پنج Glyph سفارشی و نحوه ترکیب آن‌ها برای ساخت اعداد بزرگ 0 تا 9

کد نمایش اعداد بزرگ روی LCD

آرایه glyphs چه کاری انجام می‌دهد؟

آرایه glyphs یک آرایه دوبعدی است:

عدد 5 نشان‌دهنده تعداد Glyphهای مورد استفاده و عدد 8 نشان‌دهنده هشت سطر پیکسلی هر Glyph است.

این پنج قطعه پایه، قسمت‌های مختلف اعداد بزرگ را تشکیل می‌دهند؛ برای مثال یک بلوک کاملاً پر، بخش بالایی، بخش پایینی و ترکیب‌هایی از آن‌ها.

ساخت قسمت بالایی و پایینی اعداد

دو آرایه bigDigitsTop و bigDigitsBot مشخص می‌کنند برای ساخت هر عدد، در ردیف بالا و ردیف پایین LCD کدام Glyphها نمایش داده شوند.

هر عدد بزرگ از شش کاراکتر تشکیل می‌شود؛ سه کاراکتر بخش بالایی عدد و سه کاراکتر بخش پایینی را می‌سازند.

تابع showDigit

تابع showDigit() یک رقم را در موقعیت مشخص روی LCD نمایش می‌دهد. ابتدا سه Glyph مربوط به قسمت بالایی و سپس سه Glyph مربوط به قسمت پایینی نوشته می‌شوند.

نمایش یک عدد چندرقمی

تابع showNumber() عدد را ابتدا به رشته تبدیل می‌کند و سپس هر رقم را جداگانه به showDigit() می‌فرستد.

در کد کتاب تا پنج رقم بررسی می‌شود و هر کاراکتر ASCII با کم‌کردن 48 به مقدار عددی تبدیل می‌شود:

نمایش اطلاعات با رزولوشن کوچک‌تر از یک کاراکتر

تا اینجا چند کاراکتر را با یکدیگر ترکیب کردیم تا شکل‌های بزرگ‌تر بسازیم. در بخش 11.8 دقیقاً مسیر برعکس می‌شود: از پیکسل‌های داخل یک کاراکتر استفاده می‌کنیم تا جزئیات کوچک‌تری نسبت به اندازه یک کاراکتر ایجاد کنیم.

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

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

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

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

ساخت ارتفاع‌های مختلف

اولین Glyph فقط پایین‌ترین سطر را روشن می‌کند:

در Glyph بعدی دو سطر پایینی روشن هستند و این روند ادامه پیدا می‌کند تا در آخرین Glyph هر هشت سطر روشن شوند.

در نتیجه می‌توان مقادیر مختلف را با ارتفاع‌های متفاوت روی LCD نمایش داد.

تبدیل مقدار Analog به ارتفاع نمودار

کتاب نمونه‌ای ارائه می‌کند که مقدار ورودی آنالوگ A0 را خوانده و آن را به یکی از هشت سطح موجود تبدیل می‌کند:

تابع map() محدوده ورودی آنالوگ را به محدوده مورد استفاده برای Glyphهای نمودار تبدیل می‌کند.

ساخت نمودار با ارتفاع دو سطر LCD

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

اگر مقدار کمتر از 8 باشد فقط نیمه پایین نمودار استفاده می‌شود. برای مقادیر بالاتر، کاراکتر پایین کاملاً پر شده و ادامه ارتفاع در سطر بالایی LCD نمایش داده می‌شود.

نمایش ورودی آنالوگ با 16 سطح

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

با این روش دو سطر LCD در مجموع رزولوشن عمودی بیشتری برای نمودار فراهم می‌کنند.

ساخت نمودار افقی

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

جمع بندی

در قسمت 61 آموزش آردوینو با قابلیت‌های پیشرفته‌تر LCDهای متنی آشنا شدیم. ابتدا نمادهای از پیش تعریف‌شده را با lcd.write() نمایش دادیم و سپس با lcd.createChar() کاراکترهای کاملاً سفارشی ساختیم. بعد دیدیم که چگونه چند Glyph کوچک می‌توانند کنار هم قرار بگیرند و اعداد بزرگ با ارتفاع دو سطر ایجاد کنند. در نهایت نیز از همان قابلیت کاراکتر سفارشی برای ساخت نمودارهای میله‌ای با چند سطح ارتفاع استفاده کردیم.

در قسمت بعدی آموزش وارد مبحث نمایشگرهای گرافیکی می‌شویم و بررسی می‌کنیم برای پروژه‌های Arduino چگونه یک نمایشگر گرافیکی مناسب انتخاب کنیم.

اطلاعات
1
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
نویسنده شو !

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

ارسال مقاله