خانه > آموزش > آموزش ARM > آشنایی با LCD کاراکتری

آشنایی با LCD کاراکتری


در مدارات میکروکنترلری و همچنین سیستم های تعبیه شده معمولا نیاز به ابزاری دارید که یک سری اطلاعات را به نمایش در بیاورند و از این طریق اطلاعاتی را به کاربران خود بدهند. شاید ساده ترین نوع این ادوات LEDها باشند. LED معمولا اطلاعاتی را به کاربر یک سیستم تعبیه شده از قبیل نشان دادن روشن بودن سیستم، حالت عملکرد درست، حالت خطا و یا هشدارها می دهند. اگر اطلاعاتی را که می خواهیم به کاربر نمایش دهیم یک عدد باشد مثل شماره طبقه در آسانسور، وزن جسم در ترازوی دیجیتال و ساعت می توانیم از سون سگمنت استفاده نماییم. LED و سون سگمنت در دو مطلب جداگانه تحت عنوان اتصال LED به LPC1768 و راه اندازی سون سگمنت با LPC1768 به طور مفصل توضیح داده شده اند.

اما اگر اطلاعاتی که قرار است به کاربر نمایش دهیم یک متن باشد. مثلا فرض کنید در یک دربازکن دیجیتال قرار است به کاربر بفهمانیم که: “رمز ورود را وارد نمایید” یا “رمز وارد شده درست نیست مجددا تلاش نمایید”. در این طور مواقع می توانیم از  نمایشگرهای کاراکتری یا character  LCD استفاده نماییم. در این مطلب ان شاالله با نحوه عملکرد این نوع نمایشگرها آشنا می شویم. 

این نوع LCDها در ابعاد مختلفی ساخته می­ شوند. تعداد سطرهای این نوع LCDها می­ تواند 1، 2 یا 4 باشد و تعداد ستون­ ها می­ تواند 16، 20 یا 40 باشد. در اینجا بیشتر مد نظر نمایشگرهایی با 2 سطر و 16 ستون که پرکاربردترین نوع این نوع نمایشگرها نیز هستند می­ باشد. در شکل زیر نمونه­ ای از این نمایشگرها نشان داده شده است.

introduction-to-character-lcd-1

همانطور که از شکل مشخص است این نمایشگر همزمان می­ تواند 32 کاراکتر مختلف(2 سطر 16 تایی) را نمایش دهد. هر خانه از این نمایشگر که قابلیت نمایش یک کاراکتر را دارد خود از تعدادی پیکسل کوچکتر تشکیل شده است. تصویر بزرگنمایی شده از کاراکتر L را در شکل می­ بینید. تعداد پیکسل­ های این نوع نمایشگر می­تواند 8سطر و 5ستون یا 10 سطر و5ستون باشد که نوع 5 در 8 متداول­ تر می­ باشد. همانطور که در شکل مشخص می ­باشد در سطر پایین چیزی نوشته نمی­ شود و برای نمایش مکان­ نما کنار گذاشته شده است.

توضیح در مورد پایه­ های نمایشگر

این نوع نمایشگر برای ایجاد ارتباط با میکروکنترلر دارای 16 پایه می ­باشد. تصویر پایه­ های این نمایشگر در شکل زیر آورد شده است.

introduction-to-character-lcd-2

 

 پایه شماره 1 و 2 به ترتیب پایه ­های منفی و مثبت تغذیه داخلی نمایشگر است که باید به زمین و 5 ولت تغذیه وصل گردند. پایه شماره 3 پایه کنترل درخشندگی نمایشگر می ­باشد که بین 0 ولت(حداکثر درخشندگی) و 5ولت(حداقل درخشندگی) متغیر می­ باشد. این پایه باید با استفاده از یک پتانسیومتر به ولتاژ مورد نظر وصل گردد. پایه های 15 و 16 به ترتیب پایه­ های مثبت و منفی تغذیه LED پس ­زمینه نمایشگر می ­باشند که اگر بخواهیم نمایشگر به صورت دید­در­شب کار کند باید آن را روشن نماییم.

 پایه­ های 7 تا 14 (DB0 تا DB7) پایه ­های داده نمایشگر می­ باشد. کنترلر داخلی نمایشگر از طریق این 7 پایه با میکروکنترلر تبادل داده می­ کند. به عبارتی تمامی تبادل داده ای که بین نمایشگر و میکروکنترلر انجام می شود با استفاده از این پایه ها می باشد. داده ­های دودویی که روی این پایه­ ها قرار می­ گیرند ممکن ­است به دوگونه تعبیر شوند: 1- به صورت دستورالعمل؛ مانند پاک کردن صفحه نمایشگر، روشن کردن نمایشگر، انتقال مکان­ نما به مکان خاص و غیره، 2- داده؛ یعنی همان کاراکترهایی که قرار است نمایش داده شوند. تمایز بین این دو حالت هم توسط پایه شماره 4  تشخیص داده می­ شود. پایه شماره 4 پایه انتخاب رجیستر(RS) می­ باشد. توضیح اینکه کنترلر داخلی این نوع نمایشگرها دارای دو رجیستر داخلی می­ باشد: رجیستر دستورالعمل(IR) یا Instruction Register  برای ذخیره سازی موقت دستورالعمل­ هایی که به نمایشگر وارد می­ شوند و رجیستر داده(DR) یا Data Register برای ذخیره کردن موقت داده­ هایی که برای نمایش به نمایشگر وارد می ­شوند. حال اگر پایه RS به زمین وصل شده باشد پایه­ های 7 تا 14 به عنوان دستورالعمل تلقی شده و دستورالعمل ورودی به صورت موقت برای اجراشدن داخل رجیستر IR ذخیره می­ شود اما اگر RS به یک منطقی وصل شده باشد این پایه­ ها به عنوان داده تلقی شده و داده ورودی به صورت موقت در داخل رجیستر DR ذخیره می­ شود.

پایه 5 پایه انتخاب خواندن/نوشتن (R/W) می­ باشد. کنترل داخلی نمایشگر دارای انواع مختلف از حافظه ­های داخلی می­ باشد که در بخش ­های بعد با آن­ها آشنا می ­شویم. کارکرد پایه 5 این می ­باشد که ما با استفاده از آن انتخاب می­کنیم که می­ خواهیم روی حافظه داخلی نمایشگر بنو


وقتی داده روی پایه­ های 7 تا 14 قرار گرفت و با پایه RS رجیستر مورد نظر را انتخاب کردیم نمایشگر از این وضعیت با خبر شده و بداند که چه زمانی اطلاعات قابل برداشتن از این پایه­ های می­ باشد. این کار توسط شماره 6 (E) انجام می ­شود. نمایشگر در لحظه­ ای که یک لبه پایین ­رونده روی این پایه ایجاد می­ شود داده روی پایه­ های 7 تا 14 را می­ خواند و روی رجیستر IR یا DR ذخیره می­ کند.یسم(R/W=0) و یا از روی آن بخوانیم(R/W=1). در اکثر کارکردهای معمولی هدف نوشتن اطلاعات روی حافظه نمایشگر  جهت نمایش روی آن می ­باشد کارکردهای خاصی وجود دارند که لازم باشد از روی حافظه نمایشگر داده ­ای بخوانیم. بنابراین در کارکردهای معمولی می ­توان این پایه را مستقیم به زمین وصل کرده و به میکرو متصل نکرد.

خیلی ساده!

 چون هنوز با حافظه ها و رجیسترهای داخلی LCD آشنا نشدیم ممکن است درگیرشدن با آن ها کمی مسئله را پیچیده کند. بنابراین اگر درک توضیحات بالا کمی برایتان مشکل است خلاصه زیر را بخوانید:

نمایشگرهای 16*2 همان طور که از نام آن ها مشخص است قابلیت نمایش کاراکترها در دو سطر و 16 ستون را دارند. این نمایشگرها برای ارتباط با میکروکنترلرها 16 پایه دارند (تعداد پایه ها ارتباطی به تعداد ستون ها ندارد چون نمایشگرهای 40*4 هم 16 پایه دارند!).

از این 16 پایه، پایه های 1، 2، 3، 15 و 16 مربوط به تغذیه است که باید به زمین و VCC  وصل شوند.

پایه های 7 تا 14 پایه های داده نمایشگر است. این پایه ها دو کاربرد دارند. 1-  اگر بخواهیم کاراکتری را برای نمایش به نمایشگر بفرستیم  باید کد اسکی آن کاراکتر را از طریق این پایه ها بفرستیم. 2-دستورالعمل هایی مانند پاک کردن صفحه نمایش و جابجایی مکان نما را هم باید با فرستادن کد مربوط به همان دستورالعمل به نمایشگر بفرستیم. کد های دستورالعمل ها در ادامه این مطلب توضیح داده شده اند.

می ماند 3 پایه دیگر! پایه 4 همان پایه RS است که بین دو حالت فوق انتخاب می کند. اگر این پایه را صفر کنیم پایه های 7 تا 14 به عنوان دستورالعمل تلقی می شوند و اگر 1 کنیم به عنوان داده.

پایه 5 پایه RW است که اگر آن را 0 کنیم پایه های 7 تا 14 به عنوان ورودی می شوند و از میکروکنترلر داده ای به نمایشگر فرستاده می شود و اگر 1 کنیم پایه های 7 تا 14 به عنوان خروجی شده و داده از نمایشگر خوانده می شود. معمولا خواندن داده از نمایشگر در کاربردهای معمولی مد نظر نیست. بنابراین می توان در خیلی از کارکرد ها آن را به زمین وصل کرد.

می ماند پایه 6 یا E. اگر داده روی پایه های 7 تا 14 آماده بوده و پایه های RW  و RS هم به درستی مقداردهی شده باشند باز هم داده توسط نمایشگر خوانده نمی شود! چرا؟ چون نمایشگر منتظر می ماند تا یک لبه پایین رونده روی پایه E ایجاد شود. این هم از کاربرد E.

حافظه ­های داخلی نمایشگر

کاراکترهای پیش­فرضی که این نوع نمایشگر قابلیت نمایش آن را دارد در داخل حافظه CGROM یا Character Generation ROM از این نمایشگر ذخیره شده است. این کاراکترها در شکل زیرنمایش داده شده­ اند:

introduction-to-character-lcd-4
برای بزرگنمایی رو تصویر کلیک کنید.

 اما اینکه در کدام یک از خانه­ های نمایشگر کدامیک از این الگوها به نمایش درآیند را حافظه دیگری به نام DDRAM یا Data Display RAM تعیین می­کند. حافظه DDRAM برای نمایشگر 16*2  به صورت زیر است:

introduction-to-character-lcd-3

اعدادی که در هر خانه نوشته شده است آدرس همان خانه متناظر از حافظه DDRAM است. برای مثال اگر بخواهیم در سطر دوم و ستون چهارم از نمایشگر کاراکتر a را نمایش بدهیم باید طبق جدول مربوط به حافظهCGRAM عدد 01100001 باینری را در داخل آدرس 43 هگز از DDRAM ذخیره کنیم. بنابراین حافظه DDRAM برای آدرس دهی به الگوهای ذخیره شده در CGROM مورد استفاده قرار می­ گیرد.

اگر به عدد 01100001(61 هگزادسیمال) دقت کنیم متوجه می­ شویم که همان کد اسکی کاراکتر a می­باشد. یعنی برای نمایش هر یک از کاراکترهای متعارف کافیست کداسکی آن را در خانه متناظر در DDRAM ذخیره نماییم.

برای درک بیش تر مطالب گفته شده در بالا به مثال زیر دقت کنید.

مثال1: اگر در خانه­ های حافظه DDRAM اطلاعاتی به صورت زیر ذخیره شده باشد، روی نمایشگر چه چیزی نمایش داده می­ شود؟

introduction-to-character-lcd-5

 

به دو روش می­توان این مثال را حل کرد.

روش اول: چهار بیت کم ارزش و پرارزش هر بایت را جداکرد و سپس در جدول کاراکترهای پیش فرض حافظه CGRAM در بالا به دنبال کاراکتر مناسب گشت. برای مثال برای 01110011 چهار بیت پرارزش 0111 و چهاربیت کم­ ارزش 0011 می­باشد. حال در جدول کاراکترهای پیش فرض CGRAM در ستون مربوط به 0111 و سطر مربوط به 0011 می­ بینیم که کاراکتر s وجود دارد. به همین ترتیب بایت­ های دیگر به ترتیب مربوط به کاراکترهای a، l، l، a و m می­باشند. بنابراین روی نمایشگر کلمه sallam نمایش داده می­شود.

روش دوم: می­ دانیم که جدول نمایش CGROM بر طبق کدهای اسکی طراحی شده است. بنابراین ابتدا هر بایت را به دسیمال یا هگزادسیمال تبدیل کرده و از جدول کدهای اسکی کاراکتر مورد نظر را می ­یابیم. برای مثال معادل اسکی 01110011 برابر 73 هگزادسیمال می­ باشد که همان کد اسکی کاراکتر s می­ باشد. با تبدیل بقیه بایت ­ها به هگزادسیمال به نتیجه ­ای مانند روش قبلی دست می­ یابیم.

دستورالعمل­های نمایشگر کاراکتری

در بالا گفتیم که کنترل داخلی نمایشگر با توجه به صفر یا یک بودن پایه RS دو نوع تلقی از داده های روی پایه های D0 تا D7 می کند. یک تلقی به عنوان داده و دوم به عنوان دستورالعمل. حال می خواهیم ببینیم اگر RS برابر 0 بود چه نوع دستورالعمل هایی را می توانیم به نمایشگر بفرستیم. یعنی به عبارتی چه نوع دستوراتی را نمایشگر از ما قبول می کند که به آن بفرستیم. دستورالعمل­های تعریف شده برای کنترلر داخلی این نمایشگر در جدول زیر آورده شده است.

introduction-to-character-lcd-6
برای بزرگنمایی روی تصویر کلیک نمایید

بر اساس جدول فوق باید به نکات زیر توجه کرد:

  • بیت­هایی که با x علامت­گذاری شده ­اند بیت­ه ای بدون اهمیت می ­باشد که معمولا صفر نوشته می­ شوند.

  • در دستور پاک کردن صفحه نمایش: مقدار 0x20 در تمام خانه­ های DDRAM ذخیره می­ شود. با توجه به جدول CGRAM آدرس0x20 آدرس کاراکتر فاصله(خالی) می ­باشد.

  • در دستور تنظیم مد ورودی:

اگر I/D برابر یک باشد، با هربار خواندن و نوشتن برروی حافظه، مکان­ نما یک واحد به سمت راست منتقل شده و شمارنده آدرس DDRAM یک واحد افزایش می­ یابد.

اگر I/D برابر صفر باشد، با هربار خواندن و نوشتن برروی حافظه، مکان­ نما یک واحد به چپ منتقل شده و شمارنده آدرس DDRAM یک واحد کاهش می­ یابد.

در همین دستور اگر SH=1 باشد به جای مکان­ نما کل صفحه نمایش یک واحد به چپ یا راست منتقل می ­شود.

  • در دستور کنترل روشن/خاموش کردن نمایشگر:

اگر D برابر یک باشد کل صفحه نمایش روشن می ­شود.

اگر D برابر صفر باشد کل صفحه نمایش با حفظ محتویات DDRAM خاموش می­ شود.

اگر C برابر یک باشد کاراکتر مکان­ نما به صورت”_” نمایش داده می­شود.

اگر C برابر صفر باشد کاراکتر مکان­ نما نمایش داده نمی­ شود.

اگر B برابر یک باشد مکان­ نما به صورت چشمک­ زن نمایش داده می­ شود.

  • در دستور جابجایی مکان­ نما یا کل صفحه:

introduction-to-character-lcd-7

 

  • در دستور تنظیم عملکرد:

اگر DL برابر یک باشد نمایشگر از طریق 8 خط DB0 تا DB7 با میکروکنترلر ارتباط برقرار می ­کند.

اگر DL برابر صفر باشد نمایشگر از طریق4 خط DB4 تا DB7 با میکروکنترلر ارتباط برقرار می­ کند. در این نوع ارتباط باید اطلاعات را به دو قسمت 4 بایتی تقسیم کرده و در دو مرحله فرستاد. در مورد این مسئله مطالب بعدی بیشتر توضیح خواهیم داد.

اگر N برابر صفر باشد نمایش به صورت یک خطی انجام می­شود(برای نمایشگرهای دارای یک سطر).

اگر N برابر یک باشد نمایش به صورت دو خطی انجام می­شود(برای نمایشگرهای دارای دو سطر).

اگر F برابر صفر باشد هر خانه از نمایشگر به صورت یک ماتریس  8*5 در نظر گرفته می­ شود.

اگر F برابر یک باشد هر خانه از نمایشگر به صورت یک ماتریس 11*5 در نظر گرفته می شود(البته اگر نمایشگر در هر خانه این تعداد پیکسل را پشتیبانی کند).

  • قبل از استفاده از دستورات خواندن و نوشتن روی RAM حتما باید از یکی از دستورات تنظیم آدرس استفاده کنیم(بسته به اینکه خواندن و نوشتن را می­ خواهیم روی DDRAM انجام دهیم یا CGRAM).

خوب کافیست! خسته نباشید!!

تا اینجا با عملکرد LCD و دستورالعمل های آن آشنا شدید.

در مطالب بعدی با راه اندازی و برنامه نویسی LCD کاراکتری با LPC1768 در مد 8 بیتی و مد 4 بیتی آشنا خواهیم شد ان شاالله.

درباره ی مدیر سایت

۶ دیدگاه

  1. سلام. خیلی ممنون برای توضیحات روان و خوبتون. انشاءلله که موفق باشید.

  2. خیلی ممنون عالی بود واقعا .

  3. سلام
    با تشکر از زحمات شما
    از صحت جدول کاراکترها مطمئن هستید. می شود منبع آن را هم ذکر کنید
    در کدها اکثرا بنده دیدم که برای پاک کردن صفحه نمایش ۰x01 را ارسال می کنند در حالی که به گفته شما طبق جدول باید ۰x20 ارسال شود

    • با سلام.
      دستوری که برای پاک کردن باید به نمایشگر بفرستیم طبق شکلی که تو مطلب هم آمده ۰x01 هست. اما بعد از اجرای دستور کاراکتر ۰x20 که همان space هست داخل تمام خانه های DDRAM قرار می گیره. یعنی تمام خانه های نمایشگر پاک می شوند. روی جدول دستورالعمل های نمیشگر کلیک کنید تا زوم شده آن را ببینید.

  4. سلام ، خیلی ممنونم ، مطلبتون عالی بود . دمتون گرم.

    لطفا کار با LCD رنگی TFT همراه با تاچ رو هم مثل همین تو سایتتون قرار بدید . با تشکر فراوان

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *