آنچه در این مقاله میخوانید :
Toggleدر این مطلب، چگونگی راه اندازی ال سی دی کاراکتری ۱۶×۲ (HD44780U) را با استفاده از ARM و یک میکروکنترلر LPC1768 وصل کنیم.
ARM یا Advanced RISC Machine یک پردازنده است که توسط شرکت ARM توسعه پیدا میکند. شرکتهای تولید چیستها میتوانند از نسخه شرکتی آن استفاده کنند. ARM فقط طراحی معماری را انجام میدهد.
ال سی دی ۱۶×۲ یکی از از ابتداییترین و اصلیترین ماژولها برای نمایش عدد و متن است که مبتدیان هنگام یادگیری استفاده از ماژولها در سیستمهای مختلف، از این نوع صفحه نمایش استفاده میکنند و یادگیری چگونگی راه اندازی ال سی دی کاراکتری میتواند کمک زیادی به مبتدیان بکند.
در هر دو خط، به طور همزمان ۱۶ کاراکتر قابلیت نمایش دارند. هر کدام از این کاراکترها با استفاده از پیکسل های کوچک ۵×۷ به نمایش درمیآیند.
ویژگیها
- این ماژول ال سی دی دارای ۱۶ پین است
- میتوان برای استفاده از آن از کاراکترهای ۸ بیتی یا ۴ بیتی استفاده کرد. استفاده از کاراکترهای ۴ بیتی، ۴ پین را در هر دوره ذخیره میکند.
- بعد از هر بار روشن شدن، کنترلر و درایور به صورت اتوماتیک ریست می شوند.
- توابع دستوری قابل پشتیبانی: پاکسازی صفحه نمایش، مکاننما، روشن و خاموش کردن صفحه نمایش، فعال و غیر فعال کردن مکاننما، چشمک زدن کاراکتری که بر صفحه نمایش داده میشود، تغییر مکاننما و تغییر صفحهنمایش.
📣حتما ببینید : خرید انواع ال سی دی کاراکتری با مناسب ترین قیمت
عملکردهای پین
در ادامه لیستی از عملکردهای پین و اطلاعات لازم وجود دارد که میتوانید برای استفاده از عملگرهای مختلف از آنها استفاده کنید.
رجیسترها
برای ال سی دیها HD44780U فقط دو رجیستر ۸ بیتی زیر لازم هستند:
- رجیستر دستوری (IR)
رجیسترهای دستوری از میکروکنترلر درون رجیستر برای رم اطلاعات نمایشی (DDRAM) و رم سازنده کاراکتر (CGRAM) نوشته میشوند. - رجیستر اطلاعات (DR)
این رجیستر به طور موقت تا زمانی که اطلاعات در DDRAM و CGRAM میکروکنترلر نوشته میشوند، این اطلاعات را در خود نگه میدارد. این رجیستر همچنین اطلاعاتی که توسط رجیسترهای دیگر به صورت همزمان خوانده میشوند را در خود نگه میدارد.
برنامهنویسی
وصل کردن یک ماژول ال سی دی به یک میکروکنترلر بسیار آسان است. فقط به چند عملگر ساده نیاز است که به ال سی دی می گویند کدام وظایف ساده را انجام دهد و کدام اطلاعات را در صفحه نمایش دهد.
در ادامه، ما رابط ۸ بیتی را به میکروکنترلر LPC1768 وصل خواهیم کرد. ال سی دی ما فقط یک متن را به نمایش در خواهد آورد.
تعریفها
//*****************************************************************************************************
// Default DATA PORT in OpenLab is PORTB. P0[16:23]
// Default CONTROL PORT in OpenLab is PORTC P1[16:23]
//*****************************************************************************************************
#define DATA_BUS LPC_GPIO0->FIODIR
#define CONTROL_BUS LPC_GPIO1->FIODIR
//*****************************************************************************************************
//*****************************************************************************************************
// Control Port definitions
//*****************************************************************************************************
#define CONTROL_SET LPC_GPIO1->FIOSET
#define CONTROL_CLEAR LPC_GPIO1->FIOCLR
#define RS ۱۸
#define RW ۱۷
#define EN ۱۶
//*****************************************************************************************************
//*****************************************************************************************************
// Data Port definitions
//*****************************************************************************************************
#define DATA_SET LPC_GPIO0->FIOSET
#define DATA_CLEAR LPC_GPIO0->FIOCLR
#define DATA0 ۱۶
#define DATA1 ۱۷
#define DATA2 ۱۸
#define DATA3 ۱۹
#define DATA4 ۲۰
#define DATA5 ۲۱
#define DATA6 ۲۲
#define DATA7 ۲۳
//*****************************************************************************************************
//*****************************************************************************************************
//Control and Data Mask
//*****************************************************************************************************
#define CONTROL_MASK ((۱<<RS)|(1<<RW)|(1<<EN))
#define DATA_MASK ((۱<<DATA7)|(1<<DATA6)|(1<<DATA5)|(1<<DATA4)|(1<<DATA3)|(1<<DATA2)|(1<<DATA1)|(1<<DATA0))
//*****************************************************************************************************
راهاندازی پورتها
مسیر سه رجیستر راهنمای پینها و ۸ رجیستر اطلاعات موجود، باید به عنوان خروجی (output) تنظیم شوند.
برای انجام این کار بیت های ماسک جدیدی با استفاده از کد زیر تعریف کردهایم.
void INIT_PORTS()
{
DATA_BUS = DATA_MASK;
CONTROL_BUS = CONTROL_MASK;
INIT_LCD();
}
عملگرهای دستوری
ال سی دی مورد استفاده باید با استفاده از عملگرهای خاصی در رجیستر دستوری، کانفیگور شود. این دستورها و تمامی اطلاعات مورد نیاز باید در هر دو رجیسترها با استفاده از سیگنال بالا به پایین در پینها، ثبت شوند. تاخیر میان هر انتقال براساس نوع هر دستور و یا اطلاعات ثبت شده، متفاوت است. برای یک عملگر عمومی، تاخیر یک میلی ثانیهای به اندازه کافی خوب است. قبل از ارسال هر دستور، پینهای RS و RW باید پاکسازی شوند.
void SEND_CMD(unsigned char cmd)
{
SEND_BITWISE(cmd);
CONTROL_CLEAR = (1<<RS)|(1<<RW);
CONTROL_SET = (1<<EN);
delay_ms(1);
CONTROL_CLEAR = (1<<EN);
}
دستورها
دستورهای ساده ای که باید برای راه اندازی ال سی دی کاراکتری نوشته شوند را در ادامه آوردهایم. این دستورها ال سی دی را در حالت ۸ بیتی قرار میدهند. این کد قابلیت دسترسی به هر هر دو خط و ماتریکس ۵×۷ را دارد.
void INIT_LCD()
{
SEND_CMD(0x38); //Initialize LCD in 8-bit mode. 2 Lines. 5*7 mode
SEND_CMD(0x0C); //Display ON cursor OFF
SEND_CMD(0x01); // Clear display
SEND_CMD(0x06); //Shift cursor to the right
SEND_CMD(0x80); //Force the cursor to the beginning of the line
}
📣حتما ببینید : آموزش راه اندازی LCD کاراکتری با AVR در نرم افزار Codevision
نوشتن عملگرها
مانند نوشتن دستورها در رجیستر دستوری، نوشتن دستورات اطلاعاتی هم به همان شکل هستند. تنها تفاوتی که وجود دارد این است که پین های RS باید قبل از انجام انتقال از سیگنال بالا به پایین، بالا باشند. برنامهنویس میتواند برنامهای بنویسد که در آن صفحه نمایش علاوه بر نمایش دادن استرینگهای مختلف، کاراکترها را نمایش دهد. کد یکی از عملگرها برای نوشتن کاراکترها در زیر آمده است:
void SEND_CHAR_DATA(unsigned char data)
{
SEND_BITWISE(data);
CONTROL_CLEAR = (۱<<RS)|(1<<RW);
CONTROL_SET = (1<<RS)|(1<<EN);
delay_ms(1);
CONTROL_CLEAR = (1<<EN);
CONTROL_CLEAR = (1<<RS);
}
نمایشگر ال سی دی میتواند برای نمایش اطلاعات سنسورها، شمارش مقادیر و نمایش هر گونه کلمه و حرف را به نمایش درآورد.
کد بعدی برای فرستادن استرینگ متشکل از اطلاعات مختلف به نمایشگر ال سی دی کنترلر ساخته شده است.
void SEND_STRING_DATA(char *str)
{
while(*str!='\0')
{
SEND_CHAR_DATA(*str);
str++;
}
}
جمعبندی
مطلب آموزشی بالا به شما کمک میکند تا با استفاده از میکروکنترلر ۳۲ بیتی LPC1768 ARM Cortex M3، راه اندازی ال سی دی کاراکتری ۱۶ * ۲ را انجام دهید. کد نمونهای که در این آموزش از ان استفاده شده است در کتابخانه کدها در بخش ARM موجود است و میتاونید از آن استفاده کنید.
اگر به تازگی برنامهنویسی ماژول های مختلف را شروع کرده اید و میخواهید از مهارت های خود را افزایش دهید، پیشنهاد میکنیم از کیتهای آماده که تمام قطعات و ماژولهای لازم را در خود دارند استفاده کنید. پس از این که به تسلط کافی در برنامه نویسی رسیدید، میتوانید به دلخواه ماژولهای مختلف را تهیه کنید و و با استفاده از برنامهنویسی به زبانهای مختلف، آن قطعات و ماژولها را به هم وصل کنید.
منبع : openlabpro.com
📣حتما ببینید : خرید قطعات الکترونیک اورجینال
دیدگاهتان را بنویسید