کتابخانه LCD کارکتری HD44780

  • نویسنده موضوع Alma
  • تاریخ شروع

Alma

مدیر
پرسنل مدیریت
یکی از بهترین و کاربردی ترین LCD هایی که توی بازار موجود هست LCD های کارکتری هستند که معمولا از چیپ HD44780 در اونها استفاده شده
اینجا میخوام یک کتابخانه خوب که ترکیبی از چند کتابخانه دیگه هست معرفی کنم
این کتابخانه از دو فایل hd44780.c و hd44780.h تشکیل دشه و به وصورت بیت به بیت اقدام به درایو LCD کرده که محدودت های ممکن در ارتباط پیهای میکرو رو به LCD از بین میبره

این کتابخانه به صورت 4 بیت نوشته شده و کلا از 31 تابع مختلف تشکیل شده که 9 تا از این توابع به صورت استاتیک نوشته شده و 22 تابع دیگه در اختیار کاربر قرار میگیره و کلیه موارد مورد نیاز و شرایط مختلف کار با این LCD رو در بر میگره

میشه گفت یکی از بهترین و کاملترین کتابخانه هایی هست که در این زمینه معرفی میشه

لیست توابع
کد:
void HD44780_Init(uint8_t rows, uint8_t cols);
void HD44780_WriteInstruction(void);
void HD44780_DisplayOn(void);
void HD44780_DisplayOff(void);
void HD44780_Clear(void);
void HD44780_Putc(char c);
void HD44780_CursorSet(uint8_t row, uint8_t col);
void HD44780_Puts(uint8_t x, uint8_t y, char* str);
void HD44780_Putsn(uint8_t x, uint8_t y, char* str, uint8_t len);
void HD44780_BlinkOn(void);
void HD44780_BlinkOff(void);
void HD44780_ReturnHome(void);
void HD44780_CursorOn(void);
void HD44780_CursorOff(void);
void HD44780_ScrollLeft(void);
void HD44780_ScrollRight(void);
void HD44780_Scroll(uint8_t dir, uint8_t step, uint32_t delay);
void HD44780_CreateChar(uint8_t location, uint8_t n, uint8_t* data);
void HD44780_PutCustom(uint8_t x, uint8_t y, uint8_t location);
void HD44780_Put_Bar (uint16_t val, uint8_t width, uint8_t chr);
void HD44780_Put_Point (uint16_t val, uint8_t width, uint8_t chr);
void HD44780_Put_Fuel (int8_t val, uint8_t chr);


برای استفاده بعد از اضافه کردن فایل به پروژه باید در فایل hd44780.h هفت پین RS - RW - EN و چهار بیت دیتا رو تعریف کنید و تنظیمات لازم رو انجام بدید

سه تابع اخر این کتابخانه برای ایجاد Progress Point و Progress Bar و تابع اخر برای کاراکتر میزان شارژ باتری توسط اقای چان نوشته شده که که بنده با توابع کتابخانه هماهنگ کردم


نمونه کد با میکروی ATmega32 در ادیتور EmBitz و کتابخانه ضمیمه پست شده است

آخرین تغییرات:
2019/2/18 امکان بودن یا نبودن پین RW به کد اضافه شد .
2020/1/16 نمونه کد برای میکرو کنترلر های ارم stm32
 

پیوست‌ها

  • LCD_hd44780_test.rar
    6.6 کیلوبایت · بازدیدها: 74
  • LCD_hd44780.rar
    4.3 کیلوبایت · بازدیدها: 82
  • STM32_LCD_HD44780.rar
    401 کیلوبایت · بازدیدها: 10
آخرین ویرایش:

hesamavr

همکار
اقا هادی سیم RW عمدتا کاربردی نداره و بیشتر به گراند وصله. در کد میشه اونو از جریان داده کنار گذاشت؟
 

soranarasteh

همکار جدید
اقا هادی سیم RW عمدتا کاربردی نداره و بیشتر به گراند وصله. در کد میشه اونو از جریان داده کنار گذاشت؟
درووود
چطور کاربرد نداره ؟
زمانی که بخواین در کارهای صنعتی ارتباط صحیحی داشته باشید ناگزیر به استفاده از این پین خواهید شد.
 

hesamavr

همکار
درووود
چطور کاربرد نداره ؟
زمانی که بخواین در کارهای صنعتی ارتباط صحیحی داشته باشید ناگزیر به استفاده از این پین خواهید شد.

من نگفتم کاربرد نداره گفتم عمدتا کاربرد نداره. وقتی نیازی به خواندن اطلاعات از روی LCD نباشه چه فرقی داره بین صنعتی و غیر صنعتی
حالا مونده شما صنعتی به چی بگین. از کسی که پست رو گذاشته گفتم میشه از کد برش داشت یا نه من کد رو هنوز ندیدم بحثی در مورد استفاده اش ندارم شما در پروژه هاتون استفاده کنین
 
آخرین ویرایش:

Alma

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

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

طی اخرین تغییراتی که امروز داده شد میتونید پین RW رو تعریف نکنید و مستقیما به زمین وصل بشه و همیشه در حال نوشتن باشه
یا تعریفش کنید که در این صورت توابع HD44780_ReadData و HD44780_Read4bit و HD44780_CheckBusy به کد اضافه میشه و همچنین این پین در تابع HD44780_InitPins به صورت خروجی تعریف خواهد شد

upload_2019-2-18_13-9-28.png upload_2019-2-18_13-10-8.png
 

hesamavr

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

در مورد نویز موافق نیستم (هر کس در این موارد نظری داره، من ادعایی ندارم که حرف من درسته) چون فرضا در محیط نویزی شما با یک سیم دیگه یا فلت (که خودش مثل آنتن جذب نویز رو بیشتر میکنه) این پایه LCD رو به میکرو اضافه کنی و پیوسته دیتا LCD رو بخونی و مقایسه کنی تا نکنه خراب شده باشه راهکار حل اش نیست چون همون سیم اضافه یعنی دردسر و بعدیش اینکه چون وضعیت LCD معلوم نیست و اگر این مشکل باشه به شکل پیوسته و مداوم پیش بیاد دیگه خوندن اش تفاوتی نمی کنه.
باید منشا نویز رو درست کرد که تاثیرش به حداقل برسه و از قطعات بهتر استفاده کرد یا از LCD دیگه استفاده کرد. اگر نویزی اونقدر شدیده که انتقال دیتا سرعت پایین بین میکرو و ای سی دی رو به هم میریزه یک فکر دیگه باید براش کرد
 

Alma

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

در مورد نویز موافق نیستم (هر کس در این موارد نظری داره، من ادعایی ندارم که حرف من درسته) چون فرضا در محیط نویزی شما با یک سیم دیگه یا فلت (که خودش مثل آنتن جذب نویز رو بیشتر میکنه) این پایه LCD رو به میکرو اضافه کنی و پیوسته دیتا LCD رو بخونی و مقایسه کنی تا نکنه خراب شده باشه راهکار حل اش نیست چون همون سیم اضافه یعنی دردسر و بعدیش اینکه چون وضعیت LCD معلوم نیست و اگر این مشکل باشه به شکل پیوسته و مداوم پیش بیاد دیگه خوندن اش تفاوتی نمی کنه.
باید منشا نویز رو درست کرد که تاثیرش به حداقل برسه و از قطعات بهتر استفاده کرد یا از LCD دیگه استفاده کرد. اگر نویزی اونقدر شدیده که انتقال دیتا سرعت پایین بین میکرو و ای سی دی رو به هم میریزه یک فکر دیگه باید براش کرد

دوست عزیز حتی در بهترین حالت و با رعات همه نکاتی که فرمودید راه کار تشخیص و رفع مشکل همون پین RW و خوندن LCD هست
همه مواردی که شما گفتین درسته ولی باز برای رفع مشکل چاره ای جز این راه نیست در ضمن بهترین راه هم همینه

در کل طبق پیشنهاد شما این قابلیت به کد اضافه شد
 

M.R.Abedini

همکار جدید
سلام متاسفانه من نمیتونم کتابخونه رو دانلود کنم لطفا بررسی کنید..امکان استفاده از کتابخونه تو stmهسش یا نیازمند تغییرات زیاده برا این کار؟
 

Alma

مدیر
پرسنل مدیریت
سلام متاسفانه من نمیتونم کتابخونه رو دانلود کنم لطفا بررسی کنید..امکان استفاده از کتابخونه تو stmهسش یا نیازمند تغییرات زیاده برا این کار؟
فایل ها مشکلی ندارن
مجددا تلاش کنید

نه تغییرات زیادی نمیخواد
 

Alma

مدیر
پرسنل مدیریت
معرفی کتابخانه معرفی شده در پست اول اینبار برای STM32

یه پروژه اماده کردم توی ادیتور embitz که توضیح ببیشتری فکر نمیکنم بخواد
پست اول هم ویرایش شده و به اونجا هم اضافه شد
 

پیوست‌ها

  • STM32_LCD_HD44780.rar
    401 کیلوبایت · بازدیدها: 17

saeeddelshad0020

همکار
معرفی کتابخانه معرفی شده در پست اول اینبار برای STM32

یه پروژه اماده کردم توی ادیتور embitz که توضیح ببیشتری فکر نمیکنم بخواد
پست اول هم ویرایش شده و به اونجا هم اضافه شد

با سلام
با تشکر از مهندس اسدی بابت این کتابخونه پر محتوا
یه مشکل کوچیکی داشت که توی سطر دوم ال سی دی نمیشد دیتایی نمایش داد. توی فایل hd44780.c توی تابع اینیشیال این سه خط رو از حالت کامنت در بیارین درست میشه
کد:
HD44780_Clear();
  HD44780_CursorSet(0, 0);
  HD44780_WriteInstruction();
 
بالا پایین