کتابخانه Lcd کاراکتری برای میکرو کنترلهای stm32
کتابخانه Lcd کاراکتری برای میکرو کنترلهایstm32
جهت جایگزینی lcd کاراکتری با نوع گرافیکی کم حجم و سبک وزن 1.8" با کارایی مناسب لطفا (اینجا) را ببینید.
به روز رسانی: این کتابخانه در تارخ 1397/10/12به روز رسانی شده
به روز رسانی جدید : کتابخانه در تاریخ 1398/09/8 به روز رسانی شده است .
است. مشخصات مهم به شرح زیر است :
1-ایجاد چند بخش در کتابخانه مربوط به تنظیمات، فایلهای اصلی، دستورات lcd و فایل سورس بدنه توابع .
2-افزایش سرعت توابع .
3-تنظیم پایه های پورت lcd به صورت خروجی در تابع alcd_init()
4-استفاده ازbusy flag جهت افزایش سرعت.
5-تغیر مبنای تعریف فرکانس هسته بر حسب مگاهرتز
6 - استفاده از CORE_F به عنوان معرفی فرکانس هسته
7 - امگان تعریف پایه های lcd روی پین ها و پورتهای دلخواه .
8-تغیراتی در وارد کردن مختصات در تابع alcd_goto_xy
*هشدار:به دلیل استفاده از busy flag جهت حفاظت از میکرو در مقابل ولتاژ 5 ولت حتما از شماتیکی که در متن پیشنهاد شده است استفاده کنید.
******هشدار:دقت کنید که پینهایی را که برای lcdدر نظر میگرید شامل پینهای لازم برای پروگرام نباشد. زیرا در غیر اینصورت بعد از اینیشیال ال سی دی میکرو دیگر پروگرام نخواهد شد .
توجه : به جهت افزایش سرعت . این کتابخانه در رجیستر قفل gpio تغیری ایجاد نمی نماید . بنابراین در صورت قفل بودن پورت لازم است که قبل از اینیشیال ال سی دی آنرا از حالت قفل خارج کنید.
با سلام.
از انجا که اینجانب به میکروکنترل علاقه خاصی دارم.( از حدود 3 یا 4 سال پیش) ولی الان چون میکروهایی که باهاشون کار میکردم ( میکروهای avr) قیمتشون بالا رفته و آرمهای stm32 با امکانات بیشتر ، قیمت کمتری از stm32 ها دارن خلاصه تصمیم گرفتم به جای avr با stm32 سروکله بزنم .
اولین چیزی که لازم هست راه اندازی یک عدد السی دی هست که اینجانب یک عدد کاراکتری داشتم . و با همین شروع کردم . البته توی نت کتابخانه وجود داشت ولی ازشون خوشم نیامد . اون هم به این دلیل که باید تمام پایه های ال سی دی را باید روی یک پورت اون هم به ترتیب خاصی قرار بگیرند .
توجه :کتابخانه برای میکروهای stm32F0xx coretx M0 و stm32F1xx cortex M3 و Cortex M4 شامل میکروهای STM32F429/439 STM32F405/415, STM32F407/417, STM32F427/437
نوشته شده است و محدوده ی فرکانس مجاز تا 72 مگاهرتز است . برای کلاک های بالا تر هم قابل ویرایش است .
در تصویر زیر عملکرد کتابخانه را برای stm32 cortexM3 (بورد blue pill ) مشاهده میکنید .

خصوصیات بارز ای کتابخانه به شرح زیر است :
1-پایه های lcd را روی هر پورت و هر پین دلخواهی میشه قرار داد .( این قابلیت برای بردهای stm32 کوچک خوبه که از هر پورت فقط چندتا پین بیرون هست و نمیشه همه پایه های lcd رو روی 1 پورت قرار داد.)
2-قابلیت انتخاب حالت ارتباط 4 بیتی یا 8 بیتی را دارد .
3 - برای تمام ال سی دی های کاراکتری با هر تعداد سطر و ستون قابل استفاده است .
بقیه خصوصیات کتابخانه در زیر آورده شده است:
4-این کتابخانه از busy flag استفاده میکند که باعث سرعت در عملکرد خواهد شد .( جهت حفاظت از میکرو از شماتیک پیشنهادی استفاده کنید .)
5- این کتابخانه برای نرم افزار trustudio و به صورت ترکیب رجیستری و cmsisنوشته شده است .و کمپایلر آن gcc میباشد( چون کدها بر اساس c استاندارد است برای سایر کمپایلر ها هم قابل استفاده می باشد).
6 _ این کتابخانه شامل توابعی برای خواندن و نوشتن بر روی LCD است . وامکان نوشتن توابع جهت استفاده از کاراکترهای دلخواه کاربر را دارا است ( بر اساس توابع لایه 3) ولی لازم است کاربر به دیتا شیت مراجعه کند . دیتا شیت LCD که این کتابخانه بر اساس آن نوشته شده است را میتوانید از (اینجا )دانلود کنید.
7-این کتابخانه بدون استفاده از وقفه ها نوشته شده .
به جهت اینکه این کتابخانه قابلیت خواندن از lcd را دارد وlcd های کارکتری با 5 ولت و میکروهای arm با 3.3 کار میکنند جهت جلوگیری از آسیب دیدن میکرو از شماتیک زیر جهت اتصال lcd به میکرو استفاده کنید.این شماتیک برای مد 4 بیتی است .
اگرمیخواهید از مد 8 بیتی استفاده کنید . از شبکه زنز ومقاومت برای 4 پین دیتای دیگر ال سی دی استفاده کنید . البته بعضی پایه های stm32 هستند که ولتاژ 5 ولت رو هم تحمل میکنند و در صورتی که از اونها استفاده کنید نیازی به شبکه زنر و مقاومت نیست اما در این صورت هم برای احتیاط بهتر است بین پایه های دیتای lcd و پینهای میکرو از مقاومت استفاده نمایید .

دیودهای زنر 3.3 ولت و مقاومتها رو 330 تا 1000 اهم در نظر بگیرید.
نحوه ی استفاده و توضیحات پیرامون کتابخانه:
فایل به صورت فشرده است که ابتدا باید آنرا از حالت فشرده خارج کنید.5 عدد فایل به نامهای alcd.h bit.h alcd.c alcd_conf.h alcd_command.h درون فایل rar قرار دارد که آنها را در پوشه مناسب بر مبنای IDE مورد استفاده قرار میدید . و فایل alcd.h رو پیوست کنید.
قبل از اینکه فایل کتابخانه را پیوست کنید باید پورتهاو پینهایی را که پایه های lcd به ان متصل میشود را مشخص کنید . برای اینکار باید تعاریف زیر را انجام دهید . الگوی این تعاریف در فایل alcd_conf.h آورده شده است. . این لیست را در زیر میبینید.
#define CORE_F
#define ALCD_MOD_BIT
#define ALCD_ROW
#define ALCD_RS_PORT GPIOB
#define ALCD_RS_PIN
#define ALCD_RW_PORT GPIOB
#define ALCD_RW_PIN
#define ALCD_EN_PORT GPIOB
#define ALCD_EN_PIN
#define ALCD_DB7_PORT GPIOB
#define ALCD_DB7_PIN
#define ALCD_DB6_PORT GPIOB
#define ALCD_DB6_PIN
#define ALCD_DB5_PORT GPIOB
#define ALCD_DB5_PIN
#define ALCD_DB4_PORT GPIOB
#define ALCD_DB4_PIN
#define ALCD_DB3_PORT GPIOB
#define ALCD_DB3_PIN
#define ALCD_DB2_PORT GPIOB
#define ALCD_DB2_PIN
#define ALCD_DB1_PORT GPIOB
#define ALCD_DB1_PIN
#define ALCD_DB0_PORT GPIOB
#define ALCD_DB0_PIN
توضیحات محتوای فایل alcd_conf.h به شرح زیر است :
#define CORE_F:
این عبارت مقدار فرکانس قسمت cortex را برای توابع delay مشخص میکند .و به طور پیشفرض 48 مگا هرتز تعریف شده است .
#define ALCD_MOD_BIT :
این تعریف مد کاری lcd را مشخص میکند . که تعریف این عبارت با مقدار 4 برای مد 4 بیتی و مقدار8 برای مد 8 بیتی است . مد 4 بیتی به طور پیشفرض تعریف شده است .
#define ALCD_PORT_SPEED :
در نسخه stm32 f1xx ، حداکثرسرعت پورت را در حالت خروجی مشخص میکند .
#define ALCD_ROW:
این عبارت برای تعریف تعداد سطرهای lcd کاربرد دارد. برای lcd های تک سطر عدد 1 و برای lcd های 2سطر و بیشتر، باید عدد2 تعریف شود . حالت پیشفرض 2 است .
بقیه تعاریف مربوط به پایه های میباشد به طور مثال #define ALCD_RW_PORT :
این عبارت پورتی را که پایه R/W ال سی دی به آن متصل است را مشخص میکند و به طور پیشفرض GPIOB میباشد.
عبارت #define ALCD_RW_PIN شماره پینی را که پایه R/W به ان متصل است را مشخص میکند که برای پین 5 به صورت روبه رو است #define ALCD_RW_PIN 5.
اگر lcd را در مد 4 بیتی استتفاده میکنید نیازی به تعریف پورت و پین پایه های DB0 تا DB3 نیست .
بعد از اینکه این مقادیر تعریف شد. با دستور include فایل alcd.h را در قسمت اصلی پیوست کنید .
استفاده از توابع کتابخانه :
این کتابخانه دارای 4 لایه تابع است که برای استفاده عادی از توابع لایه 4 استفاده میشود و برای بعضی موارد شامل ارسال کدهای فرمان به ال سی دی از برخی توابع لایه3 استفاده میشود .
شرح توابع لایه 4 :
:alcd_init(char column)
این تابع باید قبل از فراخوانی هر تابعی اجرا شود . متغیر column تعداد ستونهای ال سی دی است . و پینهایی را که برای lcdدر نظر گرفته شده است به صورت خروجی تعریف میکند .
به طور مثال alcd_init(20); که برای پیکر بندب و آماده سازی lcd های 4*20 و 2*20 استفاده میشه و قبل هر تابعی باید این تابع یکبار اجرا شود تا lcd پیکر بندی گردد.
alcd_clear();
ال سی دی را پاک میکند و مکان نما را به سطر0 و ستون 0 منتقل میکند .
alcd_goto_xy(char x , char y)
مکان نما را به ستون x و سطر y منتقل میکند .
alcd_puts(char* str)
یک رشته در حافظه sram را در مکان فعلی مکان نما چاپ میکند . لازم به ذکر است انتهای رشته باید با کاراکتر '0\' بسته شده باشد .
alcd_putsf( str)
این یک تابع نیست و یک ماکرو است که یک رشته در حافظه فلش را در مکان فعلی مکان نما چاپ میکند .
به طور مثال : alcd_putsf(" Alcd_Library")
شرح توابع لایه 3:
لایه 3 در واقع ماکرو هستند . که بر اساس تعیین یک config برای توابع لایه 2 بسته به نوع کاربرد تفکیک شده اند و مهمترین آنها :
alcd_write_cmd( char cmd)
این تابع برای ارسال فرمان به lcd استفاده میشود که متغیر cmd کد فرمان است.
( کدهای فرمان به صورت دیفاین در کتابخانه وجود دارد)
alcd_write_data( char data)
از این تابع میتوان برای ارسال کاراکتر یا داده بهDDram یا CG RAM ال سی دی استفاده کرد .
alcd_read_data()
این تابع یک بایت را از حافظه DDram یا CG RAM میخواند .
برای تعیین اینکه خواندن یا نوشتن روی DDram یا CG RAM باید ازدو تابع زیر استفاده کرد .
alcd_Set_CGRAM_address(address)
Set_DDRAM_address(address)
که نام آنها گویای عملکرد آنها میباشد .
توابع لایه 2:
ازبین 3 تابع لایه 2 فقط تابع زیر را شرح میدهم.
void alcd_ready(void)
این تابع منتظر میماند تا عملیات فعلی lcd پایان یابد( busy flag را بررسی میکند)برای استفاده از این تابع به این جهت که پایه های lcd وضعیت خروجی پیدا میکنند و ولتاژ 5 ولت به میکرو وارد میشود حتما از شماتیک ذکر شده در بالا استفاده نمایید.
لازم به ذکر است . در این کتابخانه از تابعی با نام delay_ms() استفاده شده است . اما به دلیل استفاده از روشهای مختلف برای ایجاد تاخیر در stm32، این تابع در حالت عادی تعریف نشده است و شما باید این تابع را برای کمپایلر معرفی نمایید و توابع مورد تایید خود را در فایل main.h بوسیله دستورهای زیر به کتابخانه معرفی کنید. و دوستانی که از نرم افزار کیل استفاده میکنند لازم است . در مسیر project > obtion < ++C/C تیک قسمت GNU extension را بزنند.
الگوی معرفی تابع به صورت زیر است :
#define delay_ms(delay) نام تابع مورد تایید(delay)
یک مثال عملی از مورد بالا به صورت زیر است :
define delay_ms(delay) HAL_Delay(delay)#
که برای زمانی است که از توابع هال استفاده میکنید .
اگر نمیخواهید شمارنده زمان در طول برنامه روشن باشد .از دستور زیر استفاده کنید
#define delay_ms(d) HAL_ResumeTick();HAL_Delay(d);HAL_SuspendTick();
و در ابتدای برنامه خودتان در فایل main کد HAL_SuspendTick(); را تایپ کنید .
یک مثال راه اندازی برای lcd 2*16 به صورت زیر است :
alcd_init(16);
alcd_goto_xy(0 , 0);
alcd_putsf(" Alcd_Library");
امیدوارم این کتابخانه برای شما مفید واقع شود .
بنده را از نظرات خودتان به صورت کامنت بهرمند سازید.
به جهت اطمینان از کارایی کتابخانه نمونه فایل اجرایی هگز مربوطه lcd 4*20 ( تصویر بالا همین کد است )را برای شما قرار میدم که میتوانید تست کنید .
فایل هگز تست کتابخانه lcd کاراکتری برای stm32 CortexM3 ( میکرو stm32f103c8t6 )
فایل هگز تست کتابخانه lcd کاراکتری برای stm32 CortexM3 کمپایلر5 KEIL ( میکرو stm32f103c8t6 )
**********************************************************************
قیمت کتابخانه نسخه stm32 CortexM0 :
37,500 تومان
قیمت کتابخانه نسخه stm32 CortexM3 :
37,500 تومان
قیمت هر دو نسخه به همراه هم : 67,500 تومان ( 10% تخفیف)
**********************************************************************
نحوه ی خرید با پرداخت مستقیم : برای خرید لطفا اینجا را ببینید
در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید.
برای اطلاع از اخبار جدید در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@ عضو شوید .
مالکیت معنوی : لطفاکتابخانه را در اختیار دیگران قرار ندهید.
کلمات کلیدی:دانلود هدر فایل کتابخانه ال سی دی lcd کاراکتری برای میکروهای stm32 آرم arm







