-
 

کتابخانه رفع خطایbusy  فلگ I2C در میکروهای stm32f1xx

توجه :این کتابخانه در تاریخ 1401/08/26 به روز شده است ( نسخه 1.0.1 )

با درود.

یک بورد Bluepill دارم که پیشنویس کتابخانه ها را روی اون امتحان میکنم .

و قبلا یک کتابخانه برای آی سی های Eeprom at24cxx نوشتم و روی همین بورد امتحانش کردم که به خوبی کارمیکرد ( یعنی واحد I2C به درستی کارش را انجام میداد) . اخیرا که بعد از مدت طولانی دوباره اومدم روی همین بورد کتابخانه at24cxx راه بندازم که متوجه شدم درست کار نمیکنه . بعد از بررسی ها متوجه شدم مشکل از واحد i2c هست .

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

خلاصه بعد از کلی امتحان روی یه بورد دیگه و کلی جستجو متوجه شدم من فقط درگیر با این موضوع نیستم و خود شرکت st یک سری راه حل نرم افزاری برای حل این مشکل ارایه داده .

این راه حل ها رو طبق مستندات st به صورت یک کتابخانه برای stm32f1xx تبدیل کردم تا استفاد ه از اون راحت باشه همانطور که در ویدیو میبینید مقدار رجیستر SR2 برابر 0 هست که نشان دهنده 0 بودن فلگ busy هست

و اما کتابخانه :

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

پوشه print_to_serial :

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

پوشه i2c_busy_stm32f1xx :

این پوشه شامل فایلهای کتابخانه است که در تصویر زیر دیده میشه .

برای اطلاع نوع محتویات فایلها ( بر اساس نام انها) لطفا ____اینجا___ را ببینید.

راهنمای استفاده :

1 – ابتدا فایل i2c_busy.h را در فایل i2c.c اینکلود کنید.

2 - در تابع HAL_I2C_MspInit(در فایل i2c.c )عبارت __HAL_RCC_I2C1_CLK_ENABLE(); را به ابتدای کد موجود منتقل کنید .

3- در همان تابع HAL_I2C_MspInit همانند کدهای زیر را به انتهای تابع اضافه نمایید .

i2c.instance= &hi2c1;

i2c.sdaPort = GPIOB;

i2c.sdaPin = GPIO_PIN_9;

i2c.sclPort = GPIOB;

i2c.sclPin = GPIO_PIN_8;

I2C_ClearBusyFlagErratum(&i2c );

توجه : در کدهای بالا باید i2c.sdaPort و i2c.sdaPin و i2c.sclPort و i2c.sclPin و i2c.instance را مطابق با پورت و پینهای واحد i2c در پروژه خودتان مقدار دهی نمایید .

پیروز باشید.

دانلود کتابخانه i2c_busy

دانلود مستند ST در مورد رفع خطای I2C Busy Flag

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم کانال تلگرام وبلاگ: dastsazemanblogfa@ را دنبال نمایید.

مالکیت معنوی : لطفا کپی نکنید لینک بدید .

library , i2c ,busy,flag,stm32،کتابخانه،فلگ،بازی،آی تو سی،

کتابخانه eeprom_emulation برای نوشتن آرایه 8بیت برایstm32f1xx

 

 بادرود.

برای یک کاری نیاز بود که از حافظه فلش میکروکنترلر stm32f103  به عنوان حافظه eeprom  استفاده بشه .

البته خود شرکت st  همچین کتابخانه ای را ساخته منتها برای انتقال آرایه مناسب نیست و دسترسی اون به حافظه هم 16 بیتی (2 بایت) هست .

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

حالا من بر اساس هموان کتابخانه st یک کتابخانه نوشتم که میشه ارایه ها رو با دسترسی 8 بیت توی آرایه نوشت.

که اگر سایز آرایه فرد باشه 1  بایت پرت حافظه داره و اگر زوج باشه پرت حافظه نذاره .

فیلم عملکرد کتابخانه رو برای میکرو stm32f103 در زیر میبینید.

 

 

دانلود فایل کتابخانه

 

پستهای مرتبط:

کتابخانه حرفه ای منو 4 کلید برای stm32

کتابخانه تاچ ( touch library )مقاومتی با کنترلر xpt2046 برای stm32

کتابخانه درایور برای ili9341

 

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

مالکیت معنوی : لطفا کپی نکنید لینک بدید .

کلمات کلیدی :

menu  4 pin  button  stm32 library  eeprom  emulation    کتابخانه  stm32  حافظه فلش  ایپرام   پرام

 

 

 

کتابخانه تاچ ( touch library  )مقاومتی با کنترلر xpt2046 برای stm32

با درورد به تمامی دوستان .

اگر مطالب وبلاگ را دنبال کرده باشید اطلاع دارید که قبلا یک یک کتابخانه درایور برای lcd 3.2 اینچ با کنترلر ili9341 نوشتم ( اینجا ) و این lcd مجهز به تاچ هم بود .

طبق معمول کتابخانه هایی که برای تاچ وجود داشت اصلا راضی کننده نبود و همچنین از بسیاری از قابلیتهای کنترلر تاچ پشتیبانی نمیکردند.

همین باغث شد که دست به کار بشم و کتابخانه ای با مشخصات قابل قبول برای تاچ و برای این کنترلر( xpt2046 ) بنویسم .

البته کتابخانه تاچ قابلیت اتصال به درایورهای دیگر را هم دارد . که در مطالب مربوط به راهنمای استفاده با جزئیات کامل توضیح داده خواهد شد.

این کتابخانه از 3 قسمت تشکیل شده است .

*******************

1- قسمت کتابخانه کنترلر ( xpt2046 ):

که از طریق توابعی کلیه قابلیتهای کنترلر xpt2046 را در اختیار کاربر قرار میدهد .

*******************

2 – قسمت تاچ :

که شامل توابعی است که قابلیتهای خواندن مخنصات تاچ ، فشار لمس ، کالیبراسیون ، چرخش مختصات تاچ و غیره ..... را در اختیار کاربر قرار میدهد.

*******************

3- قسمت user_touch :

که یک لایه روی قسمت تاچ است که برای رفاه کاربر در نظر گرفته شده است .

*************************************************************************

در ادامه قابلیتهای و مشخصات هر کدام از قسمتها توضیح داده خواهد شد.

*************************************************************************

*************************************************************************

مشخصات کتابخانه :

*****************************************

مشخصات کتابخانه کنترلر XPt2046:

1 – قابل اجرا روی میکروکنترلرهای stm32f1xx stm32f0xx stm32f4xx

2 - فرکانس کاری از کمتر از 10 مگاهرتز تا 180 مگاهرتز

2- کمپایلر GCC ( TrueStudio CubeIDE )

3 – زبان برنامه نویسی ( C99 ) زبان C

4- استفاده از spi سخت افزاری در مد 8 بیت برای ارتباط با تاچ( انعطاف لازم برای استفاده از spi نرم افزاری را نیز دارد اما توابع لازم باید توسط کاربر به درایور معرفی شود )

5- برنامه نویسی روالهای اصلی به صورت رجیستری وبدون نیاز به کتابخانه های جانبی ( پیکربندی پریفرالها به صورت رجیستری یا توابع هال یا spl یا غیره .... به انتخاب کاربر )

6 – امکان استفاده از تمام قابلیتهای موجود در آی سی xpt2046 :

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

*****************************************

مشخصات قسمت تاچ :

1

- زبان : c99 .

2- امکان اتصال درایورهای مشابه با xpt 2046 به قسمت تاچ.

3- امکان معرفی ابعاد lcd مورد استفاده به کتابخانه

4- وجود یک تابع که با اجرای آن مرحله کالیبراسیون اجرا خواهد شد.

5- امکان انتخاب تعداد نقاط برای کالیبراسیون ( تعیین نقاط به صورت تعداد در ستون و تعداد در سطر تنها محدودیت حافظه RAM میکروکنترلر و سایز LCD است)

در تصاویر زیرمثالهایی از کالیبراسیون 4 نقطه و 9 نقطه را میبینید.

کالیبراسیون 4 نقطه را در تصویر زیر میبینید.

تصویر کالیبراسیون 4 نقطه

و در تصویر زیر کالیبراسیون 9 نقطه نمایش داده شده است.

کالیبراسیون 9 نقطه

6- امکان نرمالیزه کردن تاچ نسبت به صفحه نمایش در هنگام کالیبراسیون به طور خودکار:

.( زمانی که نقطه (0.0) صفحه نمایش با نقطه (0و0) مربوط به تاچ منطبق نیست ). این قابلیت مبدا مختصات تاچ و lcd را به طور خودکار برهم منطلق میکند.منظبق بودن مختات تاچ با LCD مزایایی دارد که یکی از آنها این است که هر دگمه ای را که روی صفحه طراحی کنید . مختصات اون دگمه روی تاچ همان مختصاتی هست که روی lcd در نظر گرفتید و نیاز به استفاده از معادلات تبدیل نیست .

و یک مورد دیگه اینکه به راحتی میتونید تاچ و ال سی رو بچرخانید .!!

7- استفاده از روش MMSE برای کالیبراسون ( -Based Multipoint Calibration Algorithm for Touch Screen Applications) که دقت خیلی خوبی رو فراهم میکنه . مقاله مرتبط با این روش رو میتونید از اینجا دانلود کنید .

8- دارای تابعی برای خواندن فشار تماس ( تشخیص لمس بوسیله قلم یا انگشت )

9 – امکان راه اندازی روی lcd های مختلف به وسیله امکان معرفی توابع کتابخانه lcd به قسمت تاچ.

10 - امکان چرخش مختصات تاچ در حین اجرای برنامه .

*****************************************

نمایش قابلیتهای بالا را میتوانید در فیلم زیر ببینید.

لینک تماشای ویدئو باکیفیت خوب در آپارات

*****************************************

3 - - قسمت user_touch :

این قسمت برای رفاه کاربر طراحی شده است و درآن متغیرها و ماکروهایی تعریف شده است که استفاده از کتابخانه را برای کاربر آسانتر خواهد کرد .

*************************************************************************

*************************************************************************

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

دانلود فایلهگز تست مربوط به کتابخانه تاچ با کنترلر xpt2046 برای میکروکنترلر stm32f103c8t6 ( بورد Blue Pill )

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

اگر در راه اندازی فایل هگز تست دچار مشکل شدید لطفا از طریق کامنت یا در گروه تلگرام مطرح نمایید.

**************************************************************

**************************************************************

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

**************************************************************

قیمت کتابخانه touch برای stm32( f0xx ,f1xx ,f4xx): (180,000 تومان )

متعلقات همراه:

یک مثال شامل یک GUI ساده ( عملکردهای نمایش داده شده در ویدئو)که قابلیتهای کتابخانه تاچ را به نمایش گذاشته است .

توجه :

مثال موجود در اين کتابخانه فاقد کتابخانه اي براي LCD ميباشد .

لازم است که شما يا کتابخانه مربوط به LCD مورد استفاده در اين مثال را از اینجا تهيه کنید . يا يک کتابخانه LCD را به انتخاب خودتان به پروژه اضافه نماييد .

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

نکته مهمی که در مورد این کتابخانه وجود داره پشتیبانی از اون هست . چون کتابخانه رو خودم نوشتم هیچ نکته مبهمی برای شما به عنوان استفاده کننده وجود نخواهد داشت .

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ به آدرسس: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه LCD 3.2 با درایور ili9341

کتابخانه lcd نوکیا 1661

نرم افزار تولید فونت برای میکرو کنترلر

مالکیت معنوی: لطفا کتابخانه را در اختیار دیگران قرار ندهید.

کلمات کلیدی : تاچ ، کتابخانه ، میکروکنترلر،xpt2046 , stm32 , touch

کتابخانه درایور tft lcd  3.2 اینچ و چیپ ili9341  با اینترفیس موازی 8 و 16 بیت و 65K رنگ برای stm32

با درود .

قبلا در یک اطلاعیه ، گفته بودم که دارم روی نوشتن یک درایور ( هسته) برای ili9341 کار میکنم به طوری که به راحتی به کتابخانه های متنی و گرافیکی و نمایش تصویر مربوط به lcd nokia1661 متصل بشه و فونت فارسی و بقیه امکانات به راحتی استفاده کنه .

خوشبختانه در حال حاظر تکمیل شده و قابل ارایه هست .

این کتابخانه مربوط به " 3.2 lcd و 240*320 پیکسل با چیپ کنترلر ili9341 هست که با اینترفیس پارالل 8 , 16 بیتی راه اندازی میشه و 34 پین داره . ( نمونه های spi هم داره ولی این از نوع spi نیست) و

یک نمونه از این lcd را در تصویرهای زیر میبینید .

اطلاعات کاملتر در مورد این lcd را میتوانید در (اینجا ) پیدا کنید .

*****************************************

مشخصات کتابخانه :

1- زبان کتابخانه : زبان C استاندارد C99 است.

2- کتابخانه به صورت رجیستری و بدون استفاده از HAL یا SPL نوشته شده است.

3- میکروکنترلر های قابل استفاده : stm32f0xx , stm32f1xx , stm32f4xx

4- عمق رنگ : 16 بیت ( 65 هزار رنگ)

5- اینترفیس ارتباطی : پشتیبانی از اینترفیس ارتباطی موازی 8 و 16 بیت ( II_8080 )

6- قابلیت کنترل حجم و سرعت کتابخانه: دارد ( مدهای normal , fast , super fast ).

7 - کمپایلر :arm-gcc ( cubeIDE , True Studio)

8 - انعطاف : قابلیت قرار دادن پایه های کنترل و دیتای lcd روی پورتها و پینهای دلخواه ( فقط در مود fast و normal وجود دارد)

9-خواندن مقادیر رجیسترهای فرمان

10 - خواندن حافظه صفحه نمایش .

11 - کتابخانه در مد GPIO کارمیکند .( از fsmc استفاده نمیکند )

*****************************************

شرح انعطاف پذیری:

مشخصات حالت normal :

در این حالت میتوان پایه های ال سی دی را روی هر پورت و پین دلخواهی قرار داد.

از لحاظ حجم کمترین حجم نسبت به حالتهای دیگر را دارد و سرعت آن نیز کمترین است .

مشخصات حالت fast :

شبیه حالت نرمال میتوان پایه های ال سی دی را روی هر پورت و پین دلخواهی قرار داد.

از لحاظ سرعت نسبت به حالت نرمال سریعتر است ولی حجم بیشتری دارد ( حدود 600 بایت )

مشخصات حالت superfast :

این مد سریعترین حالت کتابخانه است . و در عین حال حجم آن کمترین است ( تقریبا برابر با مد نرمال)

اما مانند مدهای قبل انعطاف پذیر نیست و برای پایه های کنترلی امکان انخاب هر پین و پورت دلخواهی وجود دارد ولی برای پایه های دیتای lcd فقط پورت قابل انتخاب است و پینها باید به ترتیب خاصی به پورت متصل شوند.

اطلاعات مروط به ارتباط حجم و انعطاف پذیری به طور خلاصه در نمودار زیر آورده شده است .

*****************************************

*****************************************

*****************************************

تست سرعت برای رابط 8 و 16 بیت و مدهای fast , normal , superfast:

در فیلم های زیر سرعت رفرش صفحه برای حالت های مختلف کنترل حجم و سرعت نسخه ( مدهای normal , fast , super fast ) و همچنین اینترفیسهای 8 بیت و 16 بیت آورده شده است .

** کلیه سرعتها در فرکانس 72 مگاهرتز اندازه گیری شده است .

** سرعتهایی که در فیلمها نشان داده میشود بوسیله کمپایلر arm gcc از طریق اپتیمایز کد رو حجم بدست آمده ، که یک اپتیمایز رایج برای کمپایل کد است .

و میکرو کنترلر استفاده شده stm 32 f103 CB T6 میباشد .

در صورت استفاده از اپتیمایز روی سرعت ، سرعت رفرش سریعتر خواهد بود .

*****************************************

*****************************************

1- اینترفیس موازی 8 بیت :

***************

1-1- سرعت رفرش برای حالت super fast :

مشاهده میکنید 10 بار رفرش صفحه ، 384 میلی ثانیه زمان برده است

سرعت رفرش :26 فریم در ثانیه

**سرعت رفرش بدون هیچ گونه اپتیمایز : 10.75 فریم در ثانیه ( 10 بار رفرش 930 میلی ثانیه زمان برده است )

***************

1-2- سرعت رفرش برای حالت fast :

سرعت رفرش :5.45 فریم در ثانیه(10 بار رفرش در زمان 1836 میلی ثانیه )

**سرعت رفرش بدون هیچ گونه اپتیمایز : 2.47 فریم در ثانیه ( 10 بار رفرش 4055 میلی ثانیه زمان برده است )

***************

1-3- سرعت رفرش برای حالت normal :

سرعت رفرش :3.49 فریم در ثانیه(10 بار رفرش در زمان 2861 میلی ثانیه )

**سرعت رفرش بدون هیچ گونه اپتیمایز : 1.87 فریم در ثانیه ( 10 بار رفرش 5337 میلی ثانیه زمان برده است )

*****************************************

*****************************************

2- اینترفیس موازی 16 بیت :

***************

2-1- سرعت رفرش برای حالت super fast :

سرعت رفرش : 34.6 فریم در ثانیه(10 بار رفرش در زمان 289 میلی ثانیه )

**سرعت رفرش بدون هیچ اپتیمایزی : 13.55 فریم در ثانیه ( 10 بار رفرش 738 میلی ثانیه زمان برده است )

***************

2-2- سرعت رفرش برای حالت fast :

سرعت رفرش : 8 فریم در ثانیه(10 بار رفرش در زمان 1250 میلی ثانیه )

**سرعت رفرش بدون هیچ اپتیمایزی : 2.64 فریم در ثانیه ( 10 بار رفرش 3792 میلی ثانیه زمان برده است )

***************

2-3- سرعت رفرش برای حالت normal:

سرعت رفرش : 4.48 فریم در ثانیه(10 بار رفرش در زمان 2232 میلی ثانیه )

**سرعت رفرش بدون هیچ اپتیمایزی : 2.12فریم در ثانیه ( 10 بار رفرش 4722 میلی ثانیه زمان برده است )

***************

*****************************************

*****************************************

جدولهای خلاصه سرعت رفرش :

اندازه گیری با میکروکنترلر stm32f103 CB t6 ( بورد blue pill ) و کلاک 72 مگاهرتز انجام شده است .

سرعت رفرش برای حالت اینترفیس 8 بیت موازی
super fastfastnormalسوییچ کنترل نسخه
26 f/s5.45 f/s3.49 f/sبهینه سازی روی حجم
10.75 f/s2.47 f/s1.87 f/sبدون بهینه سازی

سرعت رفرش برای حالت اینترفیس 16 بیت موازی

super fastfastnormalسوییچ کنترل نسخه
34.6 f/s8 f/s4.48 f/sبهینه سازی روی حجم
13.55 f/s2.64 f/s2.12 f/sبدون بهینه سازی

*****************************************

*****************************************

اجرای قابلیتهای متنی و گرافیکی :

این کتابخانه یک درایور ( هسته )است و همانطور که قبلا گفته شده است قابلیت اتصال به قسمتهای متنی و گرافیکی کتابخانه lcd nokia1661 ( نسخه 1.0.3 به بعد ) را دارد. و برای نمایش رویlcd از آنها استفاده شده است که در تصویرهای زیر میبینید .

برای اطلاع دقیقتر از مشخصات قسمت متنی و گرافیکی لطفا ( اینجا ) و برای اطلاع از جزییات بیشتر و نحوه ی استفاده از قسمتهای متنی و گرافیکی لطفا ( اینجا ) را ببینید.

***********

قابلیت تعویض فونت هنگام اجرای برنامه

******************

خواندن رجیسترهای کنترلی و چرخش صفحه

*****************

سرعت تایپ متن :

(این سرعت در مد super fast و اینترفیس 8 بیت میکرو f103 و کلاک 72 مگاهرتز میباشد.)

*** توجه : سرعت نمایش متن برحسب نوع فونت و نوع حروف میتواند متغیر باشد.

**************

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

مربع مشکی قسمتی ازحافظه نمایش است که خوانده شده است و در سمت راست دوباره نمایش داده شده است .

****************

*****************************************

*****************************************

*****************************************

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

دانلود فایل هگز تست کتابخانه درایور ili9341 در حالت superfast

*****************************************

***************************************************************************

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

***************************************************************************

قیمت کتابخانه درایور( هسته) : 45,000 تومان

قیمت کتابخانه کامل برای stm32f1xx( به همراه قسمتهای متنی و گرافیکی و نمایش تصویر ): 135,000 تومان

***توجه:دوستانی که قبلا کتابخانه lcd nokia1661 نسخه 1.1.3 برای stm32 تهیه کرده اند ، نیاز به تهیه کتابخانه کامل نیست و میتوانند با تهیه درایور و جایگزینی پوشه ili9341 با پوشه lcd از آن استفاده نمایند.( حتی نیاز به تغییر کدهای اصلی برنامه هم نیست )

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

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه منو ( فارسی و انگلیسی ) 4 دگمه

نرم افزار تولید فونت برای میکروکنترلر

اتصال درایور ili9341 به کتابخانه lcd nokia1661( اجرای کتابخانه منو روی ili9341 )

کتابخانه حرفه ای منو 4 کلید برای stm32

با سلام .

موضوع این قسمت : معرفی کتابخانه منو 4 دگمه برای میکروهای stm32

با توجه به مطلبی که قبلا در کانال تلگرام وبلاگ اعلام کرده بودم ، کتابخانه منو اماده شده و

در این مطلب آن رو به شما معرفی میکنم .

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

و اما ماجرا چی بود!؟

ماجرا از آنجا آغاز شد که میخواستم یک دستگاه کنترل دما و رطوبت رو با صفحه نمایش lcd کاراکتری بسازم و نیاز به منو بود ... بنابراین افتادم به سرچ توی اینترنت ......هر چی کد در مورد منوهای ساده لیستی ، دیدم به صورت ثابت با if و else پیاده سازی شده بود . خب این راه حل ساده ای هست ولی اگر بخواهید کاربر رفاه خوبی داشته باشه و ایتم های منو یک مقدار مفصل و تودر تو باشه واقعا اوضاع اسف انگیز خواهد شد . ...بنابراین دست به کار شدم و یک ساختاری را با آرایه و به صورت محدود پیاد ه سازی کردم که یک منو لیستی ساده رو با 5 دگمه اجرا میکرد .

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

کتابخانه منو 5 دگمه برای LCD کاراکتری !!!!

قابلیتهای قابل قبولی داشت مثلا قابلیت تنظیم متغیرهای float و int و متغیرهای فلگ رو داشت و میتونستید روبه روی آونها به اندازه3 کاراکتر یک رشته به عنوان واحد تعریف کرد . وهمچنین میشد باهاش کالیبراسیون نرم افزاری انجام داد و داده ها رو هم توی یک حافظه دائم ذخیره کرد.

خلاصه چیز خوبی بود اما یک اشکال خیلی بزرگ داشت ، ساختارهای داده های مربوط به کتابخانه خیلی پیچیده شده بود طوری که حتی خودم هم بعضی وقتها قاطی میکردم که چی به چیه !!!

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

متاسفانه انعطاف خیلی زیادی نداشت ، یعنی به غیر از اون کارهایی که گفتم عملا هیچ قابلیت دیگه ای رو نمیتونستید به اون اضافه کنید .

ایده هایی برای بهتر شدنش به ذهنم رسیده بود ، ولی معلق ماند تا رفتم سروقت tft lcd ها ....

زمانی که تصمیم گرفتم دوباره روی کتابخانه منو کار کنم ، اول توی نت یک سرچ کردم ببینم برای منوهای ساده لیستی ، و با نما یشگر tft کتابخانه مناسبی پیدا میشه یا نه ؟

منوهایی که روی tft های سایز کوچک پیاده سازی شده بود ، ازهمون منوهای if و else بودن و اون GUI هایی که کتابخانه ای بودن برای میکروهای با حجم فلش و سرعت بالا طراحی شده بود ... کم حجم ترینشان که فقط کارکردهای اساسی رو پیاده سازی کنه به 80 کیلوبایت فلش احتیاج داشت !!!!! یعنی ازمیکروهای 128 کیلوبایتی و کمتر، صرف نظر کنید. جدای این مسئله یکسری فونت هم همراه کتابخانه هاشون بود که از نوع ثابت بودن (آخه فونت چه ربطی به کتابخانه منو داره ؟!!!!!... این مربوط به کتابخانه راه اندازی متنی lcd میشه ) و از فونت فارسی هم که خبری نبود .

خلاصه دست به کار شدم و ایده ای رو که داشتم پیاده کردم .

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

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

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

و متغیر ها رو بعد از تنظیم توی eeprom یا هر حافظه دلخواهی ذخیره کنید و با یک پیام روی صفحه lcd به کاربر اطلاع بدید... و هر کاری که فکر میکنید لازم هست رو میتونید انجام بدید ......

نمونه ای از پیام تایید قبل از کالیبراسیون رو که برای پروژه یک شرکت انجام دادم ، در فیلم زیر میبینید.

این کد تست پروژه هست که روی بورد blue pill پیاده سازی شده است .

حتی مثل همون کتابخانه متنی که برایtft lcd نوشته بودم و فونتهای مختلف به تعداد نامحدود رو میشد به اون اظافه کرد ، این کتابخانه هم تم های نا محدودی رو میشه بهش اضافه کرد . که در مطالب مربوط به راهنمای استفاده ، به این مطلب خواهم پرداخت .

بعد از این توضیحات میرم سر اصل مطلب :

************************************************************************

پیش نیازها وتوجهات در رابطه با کتابخانه منو:

************************************************************************

1 – این کتابخانه برای کمپایلرهای keil و arm gcc ( نرم افزار true studio از gcc استفاده میکند) نوشته شده است .

2- استاندارد زبان برنامه نویسیc99 - gnu99 میباشد.

3 - کتابخانه به صورت رجیستری و بدون تکیه به کتابخانه های HAL یا SPL نوشته شته شده است.

4 – این کتابخانه شامل بخشی به نام theme است که( قابل تعویض است و) نوع پیشفرض آن به همراه کتابخانه ارائه میشود و وابستگی به قسمتهای گرافیک و متنی کتابخانه tft lcd که در حال حاضر ارائه شده است ، دارد . و تنها با نسخه جدید کتابخانه lcd ( 1.1.3 ) قادر به اجرا شدن میباشد .

هشدار: لازم است که قبلا کتابخانهtft lcd را تهیه کرده باشید( زیرا به همراه کتابخانه منو ارئه نمیشود )

4– کتابخانه برای میکروهای stm32f0xx و stm32f1xx قابل اجرا است .و تحت شرایطی روی میکروهای stm32f4xx اجرا میشود .

************************************************************************

خصوصیات و قابلیتهای کتابخانه :

************************************************************************

1 – این کتابخانه منوها را به صورت لیستی اجرا میکند و کاربر از طریق 4 دگمه به امکانات کتابخانه منو دسترسی دارد .

2 – پیمایش دایره ای دو جهته در نمایش آیتمهای منو و مقادیر تنظیمی:

توضیح:

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

در مورد متغیر های تنظیمی هم به همین صورت است .کاربر هنگام تعریف متغیر ، مقادیر بیشینه و کمینه را برای متغیر تعیین خواهد کرد و در صورت کاهش مقدار متغیر و رسیدن به مقدار کمینه ، و ادامه فشردن دگمه پایین ، مقدار دوباره از بیشینه شروع به کاهش خواهد نمود . این عملکرد در جهت عکس نیزصادق است .

مزیت :

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

3 – نمایش اسکرول بار :

هنگامی که منو یک لیست طولانی از ایتمها را نمایش میدهد به طوری که تمام آیتمها در صفحه قابل نمایش دادن نیست ، ستون اسکرول به شما نشان خواهد داد که در کدام بخش از منو( ابتدا ، وسط یا انتها ) قرار دارید .

4 – قابلیت تنظیم متغیرهای صحیح :

این کتابخانه از تنظیم متغیرهای علامت دارصحیح با سایز 32 بیت ( -65534 تا 65535 ) پشتیبانی میکند .

5 - تایم اوت :

کتابخانه lcd دارای تایم اوت است .به این معنی که در صورتی که کاربر در طول بازه زمانی مشخصی ( که توسط کاربر قابل تنظیم است ) کلیدی را نفشارد . منو به طور اتوماتیک بسته خواهد شد.

میزان تایم اوت در هنگام اجرای برنامه قابل تغییر است .

میتوانید عملکرد قابلیت های 1 تا 4 و همچنین تایم اوت را در کلیپ زیر ببینید .( چنانچه در منو تنظیم شد ، بعد از 6 ثانیه بیکار بودن از منو خارج میشود )

6 – قابلیت تنظیم برای متغیرهای اعشاری:

این کتابخانه قابلیت تنظیم متغیرهای اعشاری ممیز شناور با سایز 32 بیت (float ) تا حداکثر4 رقم اعشار را دارد .

و این قابلیت برای هر متغیر به طور مستقل قابل تعیین است .

در ضمن امکان تغیر در مقدار صحیح و اعشاری عدد به صورت جداگانه وجود دارد .

لطفا فیلم زیر را برای متغیر تا دو رقم اعشار ببینید.

7- صدای کلیدها:

قابلیت ایجاد صدا برای کلیدها در نظر گرفته شده است .

8- انتخاب فونت ( اندازه متن و نوع فونت ) و رنگ متن برای متغیرها به طور مستقل:

هنگامی که نیاز است که مقدار چند متغیر از طریق منو تنظیم شوند، میتوان فونت (شامل اندازه ) و رنگ متن را برای هر متغیربه طور مستقل تعریف کرد .

9 – تعیین واحد (unit ) برای نمایش کنار متغیرها :

در صورت لزوم در کنار مقدار متغیر میتوان عبارتی را به منظور اطلاع کاربر از واحد متغیر تعریف کرد . به طور مثال A برای آمپر یا V برای ولت و غیره.... تعریف واحد نمایش داده شده به دلخواه کاربر است و حتی میتوان آنرا فارسی تعریف کرد . و برای هر متغیر به طور جداگانه قابل تعریف است .

( در فیلم بالا نمایش داده شده است )

10 – استفاده ازتعداد دلخواهی تم در برنامه و تغییر تم هنگام اجرای منو :

توضیح :

ابتدا کمی توضیح در باره تم لازم است .

این کتابخانه ، سر برگ ، پابرگ ، ستون اسکرول وپشت صحنه ، آیتم انتخاب شده و آیتم انتخاب نشده را بوسیله توابعی نمایش میدهد . مجموعه این توابع را تم نامگذاری کردم .

مزیت :

این کتابخانه قابلیت این را دارد که تعداد نامحدودی تم را به برنامه اظافه کنید .

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

************************************************************************

خصوصیات و قابلیتهای تم پیشفرض :

************************************************************************

قسمتی از انعطاف پذیری کتابخانه مربوط به تم پیشفرض کتابخانه است . من این تم رو به گونه ای برنامه نویسی کردم که به شدت !!!!! انعطاف پذیر هست . و از قسمت گرافیکی کتابخانه lcd tft برای تولید شکلهایی که در منو نمایش داده شده است استفاده کردم .تعدادی از خصوصیات قابل توجه تم پیشفرض را در زیر شرح دادم .

1 – نمایش متغیرها ی اعشاری و صحیح :

2 – نمایش متغیر از نوع level :

توضیح :

کاربر میتواند انتخاب کند مقدار متغیرهای عددی ، به جای نمایش به صورت عدد ، به صورت تصویری و به شکل یک سیلندر ( مانند چیزی که هنگام تنظیم صدا یا نور صفحه گوشی موبایل میبینید) نمایش داده شود . که برای متغیرهایی از جنس تنظیم نور یا حجم صدا و از این دست مناسب است .

پیمایش دایره ای به همراه نمایش متغیر level را لطفا در فیلم زیر ببینید

3 – قابلیت تشخیص خودکار ابعاد صفحه :

تم پیشفرض به صورت خودکار عرض و ارتفاع صفحه نمایش را شناسایی کرده وشکلهای موجود در صفحه را مطابق با ابعاد صفحه ترسیم میکند . این قابلیت علاوه بر این که به شما این امکان را میدهد که کتابخانه منو و تم را بدون نگرانی در مورد ابعاد صفحه ، در lcd هایی با اندازه های متفاوت به کار ببرید ، به شما این امکان را هم میدهد که صفحه نمایش را درهر یک از زوایای 90 ، 180 یا 270 د جه چرخانده و منو همچنان به خوبی اجرا شود .!!!

لطفا تشخیص خودکار ابعاد صفحه را در فیلم زیر تماشا کنید.

4 – قابلیت تشخیص خودکار اندازه فونت و تطابق اندازه کادر دور آیتمها با آن:

تم پیشفرض به طورخودکار ابعاد فونت را شناسایی میکند و ابعاد کادردور آیتمها را با ابعاد فونت تنظیم میکند . مزیت این کار در این است که کاربر نیازی به تنظیم اندازه کادر نخواهد داشت و در صورت استفاده از فونتهای متنوع و با اندازه های مختلف در منو، زحمت تعین اندازه مناسب کادر را نخواهید داشت .

5 - انتخاب زبان فارسی یا انگلیسی برای پابرگ ( راهنمای ورود و خروج منو):

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

این قابلیت برای هر لیست یا منو به طور مستقل قابل انتخاب است .( اگر قسمتی از صفحه فارسی و قسمتی از صفحه انگلیسی باشد اضح است که فونت مورد استفاده باید شامل هر د و حروف فارسی و انگلیسی باشد )

قابلیت 4 و 5 را لطفا در تصویر زیر ببینید.

***در تصویر بالا ضخامت کادر دور متن در مقایسه با تصاویری که در ادامه آمده ، کمتر شده است .

6- استفاده از رنگ پس زمینه جاری lcd به عنوان رنگ پس زمینه منو:

این کار باعث میشود در صورتی که رنگ بگراند را در lcd ( که توسط تابع nlcd_clear صفحه را با آن رنگ ( پاک ) میکند) را تغییر دهید ، رنگ پس زمینه منو به طور اتوماتیک آپدیت خواهد شد .

این گزینه توسط کاربر قابل تنظیم است .

7 - انتخاب حالت چپ چین ، وسط چین و راست چین برای متن آیتمها :

این قابلیت برای تم تعیین میکند که متن را در کدام قسمت صفحه تراز کند( چپ ،راست یا وسط)

لطفا تصاویر مربوط به قابلیت 6 و 7 را در زیر ببینید

رنگ پس زمینه در کتابخانه lcd nokia1661 به زرد تغییر داده شده است و پس زمینه و نوشته ها با این عمل مطابق شده اند .

دیگر تنظیمات تم که توسط کار بر قابل تغیر هستند به شرح زیر است :

*******************************************************

قسمت عمومی :

1 – رنگ پس زمینه سر برگ و پا برگ

2 – رنگ متن موجود در سر برگ و پا برگ .

*******************************************************

قسمت نمایش لیست ( آیتمهای یک منو):

3– رنگ قسمت بگراند آیتم انتخاب شده و انتخاب نشده .

4 – رنگ متن آیتم انتخاب شده و انتخاب نشده .

5– رنگ اسکرول بار و رنگ پس زمینه اسکرول بار .

*******************************************************

قسمت نمایش متغیر های عددی :

6– تعیین تعداد پیشفرض ارقام اعشار در هنگام نمایش مقادیر عددی .( در هنگام اجرای منو قابل تغییر است )

7 – تعیین رنگ پس زمینه محدوده ی اعداد نمایش داده شده ( نه کل صفحه ) که به طور پیشفرض همان رنگ بکگراند صفحه است .

*******************************************************

قسمت نمایش متغیر از نوع level :

8– رنگ پس زمینه تصویر

9– رنگ لبه های سیلندر

10- رنگ قسمت پر سیلندر

11- ضخامت سیلندر

12– فاصله سیلندر از کناره های LCD

************************************************************************

************************************************************************

من با استفاده از این کتابخانه یک منو طراحی کردم (تا قابلیتها و بخصوص انعطافش مشخص باشه) که همراه کتابخانه در اختیار دوستان قرار خواهد گرفت و یک تعداد از فوتهای کوزه گری برای برنامه نویسی و ساختن منو در اون گنجانده شده است . علاوه بر اون راهنمای کامل استفاده از کتابخانه را در وبلاگ منشر خواهم کرد .

***************************************************************************

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

***************************************************************************

فایل هگز تست :

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

فایل تست برای میکرو stm32f103CBt6 ( بورد blue pill ) و lcd نوکیا 1661

فایل تست برای میکرو stm32f072 c8t6 و lcd نوکیا 1661

لطفا طبق دستور العمل داخل فایلها نسبت به راه اندازی اقدام نمایید .و در صورت بروز مشکل ،کامنت بگزارید یا تماس بگیرید .

***************************************************************************

قیمت نسخه 1.0.1 برای stm32 و کمپایلرهای gcc و کیل : 180,000 تومان

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

***************************************************************************

نحوه ی خریداز طریق پرداخت مستقیم: برای خرید لطفا اینجا را ببینید

فایلهای لازم ظرف حداکثر 24 ساعت برای شما ارسال خواهد شد .

نکته مهمی که در مورد این کتابخانه وجود داره پشتیبانی از اون هست . چون کتابخانه رو خودم نوشتم هیچ نکته مبهمی برای شما به عنوان استفاده کننده وجود نخواهد داشت .

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه lcd نوکیا 1661

نرم افزار تولید فونت برای میکرو کنترلر

اجرای منو روی tft 3.2 اینچ ( اتصال درایور ili9341 به کتابخانه lcd nokia1661 )

مالکیت معنوی : لطفا از کپی کردن این مطالب خودداری کنید .

کلمات کلیدی :

menu 4 pin button stm32 library lcd tft کتابخانه منو 4 پین دگمه برای stm32 ال سی دی تی اف تی

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت11

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: فرمت رنگ lcd نوکیا 1661 و شرح قسمت نمایش تصویر کتابخانه .

با سلام .

قبل از اینکه وارد مطلب بشم . لازم هست که از خلاصه خصوصیات این قسمت مطلع باشید .

خلاصه خصوصیات این قسمت از کتابخانه :

1 - قابلیت انخاب فرمت bmp 16 bit یا فرمتbmp 24bit برای نمایش تصاویر .

2 - قابلیت اتخاب کتابخانه ff14 یا pff برای ارتباط با میکرو sd کارت .( کتابخانه pff یک نسخه از کتابخانه

fatfs هست که برای کار با میکرکنترلر های با حافظه رم و فلش کم توسط شخصی به نام چان نوشته شده ، و در سایت شخصیش elm_chan قرار داده .)

3 - این کتابخانه با مدل ذخیره سازی litte-endian سازگارهست .

اگر نمیدونید این چیه ، زیاد فکرتون رو درگیرش نکنید .کمپایلر کدویژن ، GCC(شامل نرم افزارهایtruestudio ,winavr ، آردوینو و اتمل استودیو) و کمپایلر کیل همه به طور پیشفرض از این مدل ذخیره سازی استفاده میکنند .

نمونه فایل هگز ،برای نمایش تصویر در زیر قرار دادم که میتونید دانلود کنید .

توجه : این فایلهای تست مربوط به نسخه 1.1.3 هستند.

فایل هگز تست برای میکرو stm32f103 c8t6

فایل هگز تست برای میکرو stm32f072 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f103 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f072 c8t6

و اما ماجرا :

راستش قرار نبود این قسمت به کتابخانه اضافه کنم. چون این کتابخانه و این lcd قرار بود که برای میکروکنترلرهای کوچک مثل avr یا stm32 با سایز فلش کم به جای lcd کاراکتری استفاده بشه .

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

یکی از دلایلی که قسمتهای مختلف کتابخانه رو مثل هسته ، قسمت متنی ، قسمت گرافیک و حالا هم قسمت نمایش تصویر را ، جدا از هم نوشتم همین مورد بود . ( قسمتهایی که با اون کاری ندارید لازم نیست به پروژه اضافه کنید)

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

این توابع تصویر با فرمت bmp رو از micro sd card میخونن و روی ال سی دی نمایش میدن .

تصویر تست نمایش تصویر را در زیر میبینید .در این تست از میکرو stm32f103c8t6 و کتابخانه ff14 و فرمت bmp 24 bit برای تصویر استفاده شده است .

زمان لازم برای نمایش 380 میلی ثانیه است .

نکاتی پیرامون بخش نمایش تصویر :

این توابع تصویر را از روی میکرو sd میخونه . بنابراین یک لایه پایین تر از توابع خواندن و نمایش تصویر ، باید توابعی برای کار با sdکارت مهیا بشه . من برای اجرای مثال از کتابخانه fatfs استفاده کردم .

fatfs کتابخانه خیلی مرتبی هست .خوبیش اینه که میشه تصاویر رو به صورت فایل و در پوشه های مختلف همانطوری که توی ویندوز ذخیره میشه ، استفاده کرد و برای ارتباط با انواع حافظه ها میکرو sd کارت ها cf card و حافظه های usb و غیره ...بنا به نیاز استفاده کرد .(این کتابخانه را شخصی به نام چان نوشته و در سایت شخصیش( اینجا) قرار داده )

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

خوب بریم سر اصل مطلب :

فرمت رنگ در lcd نوکیا 1661:

این ال سی دی از عمق رنگ رنگ 16 بیتی استفاده میکنه ( کدهای رنگ پیکسلها 16 بیتی هستن )

و فرمتش به صورت RGB 5:6:5 هست .

و این عبارت یعنی 5 بیت برای رنگ قرمز ، 6 بیت برای رنگ سبز ، و 5 بیت هم برای رنگ آبی تعیین شده و ارزش و جایگاه بیتهای رنگ ها مطابق تصویر زیر است .

حالا شما از هر فرمتی که برای تصاویر بخواهید استفاده کنید لازم هست که اون رو به فرمت RGB 5:6:5 تبدیل کنید . چون فرمت bmp خیلی ساده هست و کد رنگ پیکسلها بدون هیچ فشرده سازی و رمز گزاری در فایل تصویرقرار داده شده ، خیلی سریع تر از بقیه هست . البته bmpفرمت های مختلفی از نظر عمق رنگ داره مثلا 24 بیت ، 32 بیت و 16 بیت .

کتابخانه قابلیت خواندن فرمتهای bmp24bit و bmp16bit را داره ولی به دلیل سهولت ، در مثال از فرمت 24 بیت استفاده کردم چون به هیچ نرم افزار اضافه ای برای تبدیل عکس نیازه نداره و با paint ویندوز هم قابل انجام هست .

تهیه تصویر با فرمت مناسب :

فرمت bmp24 :

فقط کافیه تصویر را با نرم افزار paint ویندوز باز کنید و سایز اون رو به اندازه مناسب تغییر بدید . بعد اون رو سرو ته کنید و تصویر رو با فرمت bmp 24bit ذخیره کنید . ( موقع ذخیره خودش فرمت رو ازتون میپرسه ) . تصاویر رو روی sd card کپی کنید . به همین سادگی !! و احتیاج به نرم افزار خاصی هم نیست .

فرمت bmp16 :

البته از فرمت bmp16bit ویندوز هم میتوانید استفاده کنید . برای اینکار ابتدا تصویر را با paint به سایز مناسب تبدیل کنید و د رآخر اون رو سر و ته کنید . بعد با نرم افزار های دیگه ای باید اون رو به فرمت bmp 16 bit تبدیل نمایید . ( ظاهرا paint فرمت 16 بیت رو پشتیبانی نمیکنه .البته در ویندوز 7 اینطوریه )

** توجه :کاملا واضح هست که با فرمت رنگ 16 بیت برای تصویر ، زمان نمایش یک تصویر حدود 33.3% کمتر هست .

استراتژی نمایش تصویر روی lcd :

برای نمایش تصویر به طور کلی باید از توابع nlcd_set_window() و تابع nlcd_paint_pixel()

مربوط به هسته کتابخانه lcd nokia 1661 استفاده کرد . ( برای آشنایی با عملکرد توابع لطفا به قسمت پنجم مراجعه نمایید )

ابتدا با تابع nlcd_set_window() یک پنجره به ابعاد تصویر مورد نظر و در مکان مناسب تعریف میکنیم .

در مرحله بعدی رنگ پیکسلهای تصویر را از فایل که بر روی حافظه قرار دارد خوانده ، و سپس با تابع

nlcd_paint_pixel() به lcd ارسال میکنیم . این استراتژی کلی برای نمایش تصویر روی ال سی دی هست .

حالا اول بریم ببینیم توی پوشه picture هست؟

محتویا پوشه شامل فایلهای زیر هست :

در نسخه 1.1.3 محتویات به شکل زیر است .

و تنظیمات و الگوی تولبع در فایل picture_lcd.h قرار دارد . محتویات این فایل در تصویر زیر است .

در قسمت configuration :

PICT_LCD_COLOR_DEPT : مربوط به انتخاب فرمت رنگ فایل تصویر هست . اون عدد روبه رو طول عمق رنگ به بایت هست . برای bmp16 bit عدد 2 ( 2بایت = 16 بیت ) و برای bmp24 عدد 3 هست .

PICT_LCD_BUFFER_SIZE : این در واقع سایز بافر داخلی تابع نمایش تصویر هست .

لازم هست که اندازه بافر مضرب صحیحی از PICT_LCD_COLOR_DEPT باشه . و از 3 هم کوچکتر نباشه . البته لازم به نگرانی نیست ، اگر اشتباهی صورت بگیره کمپایلر خودش بهتون اخطار میده .

این بافر بهتره که به اندازه عرض بزرگترین تصویری که میخواهید نمایش بدید، ضرب در تعداد بایتهای عمق رنگ باشه .

مثلا برای یک تصویر با عرض 120 و فرمت bmp 24bit بهتره که اندازه بافر 360 باشه .

اینن اندازه باعث بالاترین سرعت نمایش تصویر میشه . البته در مواردی هست که شرایط رم میکرو و اجرای توابع اجازه این کار رو نمیده .

به طور مثال در همین تصویر میبینید که من اندازه رو 180 تعریف کردم . و برای تست روی cortex m0 ناچار شدم اون رو روی 3 !!!! تعریف کنم .

PICT_LCD_FATFS_LIB:

این مربوط به انتخاب نسخه کتابخانه fatfs مورد استفاده است .

برای ff14 عدد 0

و برای pff عدد 1

در نسخه 1.1.3 :

تنظیمات قسمت تصویر به فایل picture_lcd_conf.h منتقل شده است که در تصویر زیر میبینید .

همانطور که در تصویر میبینید قابلیت ترانس پارنت به کتابخانه اضافه شده است .( کادر قرمز)

ماکروی PICT_LCD_TRANSPARENT :

اگر 0 منظوربشه ترانسپرانت غیر فعال هست و تصاویر به صورت عادی نمایش داده خواهند شد .

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

ماکروی PICT_LCD_NONE_SHOW_COLOR :

این ماکرو برای کتابخانه کد رنگی که( یک عدد 16 بیتی است و ) باید از تصویر حذف شود را مشخص میکند .

و تمام پیکسلهایی که به این رنگ هستند چاپ نخواهند شد و در نتیجه قسمت هایی از تصویر قبلی نمایان خواهد ماند .

در این مثال من رنگ سیاه خالص ( کد 0x0000 ) را انتخاب کردم .

اما یک سوال :

اگر در تصویر اصلی رنگ مشکی وجود داشت چکار باید کرد .؟

اگر در تصویر اصلی تصویر همان رنگی که شما در ماکروی دوم به کار برده اید وجود داشت باید با نرم افزاری رنگها را کمی تغییر دهید تا کد رنگ آنها با رنگ مکروی دوم اندکی ( حداقل 1 واحد ) تفاوت کند و در عین حال با چشم هم قابل تشخیص نباشد .

به طورمثال کد رنگ 0x00 مربوط به سیاه خالص است ولی کد 0b 0000100000100001 در مبنای 2 ( کد 0x0821) خاکستری بسیار بسیار تیره است که در عمل همان سیاه دیده میشود .

با اینکار رنگهای سیاه تصویر حذف نخواهد شد .

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

این تصاویر مربوط به استفاده از کتابخانه روی میکرو stm32f072 c8 با فرکانس کلاک 48 مگاهرتز است.

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

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

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f103 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f072 c8t6

در قسمت توابع :

توابع لایه اول :

lcd_picture_init() : این تابع از کتابخانه fat به نام mount رو اجرا میکنه .که یک فضای کاری برای کتابخانه fat ایجاد میشه . و مستقیم بامیکرو sd card ارتباط برقرار میکنه .

این تابع باید قبل از هر نمایش تصویر توسط توابع بعدی استفاده بشه .

البته اگر خودتون به طور دستی تابع mount را اجرا کرده باشید نیازی به استفاده از این تابع نیست .

lcd_picture_deinit() :

این تابع عملکرد mount رو با حالت 0 اجرا میکنه که فضای کار با میکرو sd رو میبنده .

استفاده از اون ضروری نیست .ولی ممکنه لازم بشه .

توابع لایه دوم :

lcd_picture_show(uint8_t x , uint8_t y , const TCHAR * str):

این همون تابعی هست که تصویر مورد نظر شما رو نمایش میده .

x , y : مربوط به مختصات گوشه بالا چپ تصویر هست .

و str : نام فایل مورد نظر همراه با پسوند در micro sd card هست .

در نسخه 1.1.3 :

در لایه دوم:

تابع lcd_picture_show_part( picture_lcd_cor_typedef lcd_start_col , picture_lcd_cor_typedef lcd_start_row ,
picture_lcd_cor_typedef pict_start_col , picture_lcd_cor_typedef pict_start_row ,
picture_lcd_cor_typedef pict_width , picture_lcd_cor_typedef pict_height ,
const TCHAR* picture_path);

این تابع یک قسمت از تصویر درون فایل را روی lcd نمایش میدهد .

متغیرهای lcd_start_col و lcd_start_row :

مربوط به ستون و سطر از lcd هست که گوشه بالا و چپ تصویر قرار هست در آنجا قرار بگیرد.

متغیرهای pict_start_col وpict_start_row :

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

متغیرهای pict_width وpict_height :

به ترتیب از راست عرض و ارتفاع محدوده ای از تصویر درون فایل هست که میخواهید روی lcd نمایش دهید .

کاربرد :

این تابع کاربردهای زیادی میتونه داشته باشه .

مثلا نمایش قسمتی از تصاویر بزرگتر از سایز lcd .

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

یا ایجاد حالت اسکرول برای نمایش تصاویر.

در فیلم زیر این عملکرد را میبینید.

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

فایل هگز تست برای میکرو stm32f103 c8t6

فایل هگز تست برای میکرو stm32f072 c8t6

در لایه سوم:

تابع lcd_picture_show هست که قبلا توضیح داده شده است .

توجه : در نسخه 1.1.3 این تابع با استفاده از تابع lcd_picture_show_part نوشته شده است . این کار حجم کتابخانه را کاهش داده اما در عمل اندکی( حدود 2 %) از سرعت تابع نسبت به نسخه اولیه کم کرده است . به همین جهت من تابع نسخه اولیه را به صورت کامنت در کتابخانه قرارداده ام که با فعال کردن آن میتوانید ازش استفاده کنید .

نحوه ی اضافه کردن به پروژه :

ابتدا فایلها رو داخل پروژه قرار بدید . و در آخر فایل picture_lcd.h را در اینکلود کنید .

*************************************************************************************

دانلود کد نمونه برای نمایش تصویر از روی sd card

توضیح : فایلهای مثال برای بورد blue pill (stm32f103) و میکرو stm32f072 برنامه نویسی شده است.

کتابخانه fat چان ( که خودم ویرایش کردم را) برای کار با فایلها در پوشه پروژه قراردادم.

این کدها در محیط true studio تولید شده است ولی فاقد کتابخانه lcd میباشد برای استفاده لازم است پوشه کتابخانه lcd را در پوشه پروژه کپی و سپس کمپایل کنید .

فایل cube Mx پروژه را در فایلها قرار دادم تا بتوانید برای اتصال پایه های میکروکنترلر به lcd و micro sd از آن استفاده کنید همچنین میتوانید پروژه را برای میکروکنترلرهای دیگر باز تولید کرده و استفاده کنید.

امیدوارم مطالب این قسمت برای شما مفید بوده باشد .

سربلند و پیروز باشید .

لینک قسمت قبلی

مطالب مرتبط :

نمایش تصویر از روی فلش میکروکنترلر

پایان

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت10

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای stm32 Cortex M0

با سلام .

در قسمت قبل راه اندازی کتابخانه را برای میکروهای stm32  CortexM3 توضیح دادم .

در این قسمت  تنظیمات لازم برای میکروهای  Stm32 CortexM0 توضیح خواهم داد.

فایل کیوب مربوط به تنظیمات پروژه همراه مثالی که برای شما ارسال میشود وجود دارد .

ولی برای رفع هرگونه ابهام توضیحات زیر رو میدم .

اولین قسمت فایل کیوب که باید تنظیم بشه مربوط به تب pinout هست .

در این تب تنظیمات مربوط به واحد SPI  دیده میشه .

من برای spi از واحد2 استفاده کردم . تننظیماتش رو توی کادر قرمز میبینید .

دوتا پایه هم برای cs و reset  احتیاج هست که اونها را باید خروجی قرار بدید .

و در تصویر زیر مشخص هست .

جزئیات تنظیم spi در سربرگ conf  را در تصویر زیر مشخص کردم .

شما با تنظیم  prescaler  ( بالای مستطیل  قرمز ) میتونید  baud rate که در مستطیل قرمز مشخص هست را تنظیم کنید که در اینجا روی 12  مگاهرتز تنظیم شده  است . این در واقع همون فرکانس کلاک spi  میکرو هست .

برای تنظیم gpio هم طبق تصویر زیر اقدام کنید.

نکته ای که باید بهش توجه کنید اون ستونهایی هست که با مستطیل قرمز بزرگ نمایش داده شده .

اگر روی هر سطر کلیک کنید های لایت میشه و گسترده  ی اون در پایین نمایش داده میشه . که میتونیدبرای pin  مورد نظر اسم هم بگذارید که در کادر قرمز کوچک  میبینید .

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

برای این تنظیمات  لازم هست که برید توی منوی project  و setting   رو انتخاب کنید . پنجره ای به شکل زیر باز میشه .

نکته مهم این تصویر کادر قرمز هست . علت انتخاب این گزینه ها پوشه بندی مربوط به پروژه هست . که خیلی واضح و سهل و راحت و قابل فهم از کار در میاد. البته نرم افزار من true studio  هست. نمیدونم برای نرم افزارهای دیگه چطوره !! همانطور که گفتم این موضوع سلیقه ای هست .

تنظیمات در برگه code generator  را من طبق تصویر زیر انجام میدم .

که بازم سلیقه ای هست . ولی این تنظیمات که توی کادر قرمز اومده ، برای من سهولت بیشتری ایجاد میکنه .

مورد سوم برگه advanced stting هست .که در تصویر زیر میبینید.

همانطور که در کادر قرمز میبینید ، کتابخانه مورد استفاده برای SPI 2  را LL  انتخاب کردم .

علتش رو به صورت هشدار زیر توضیح میدم :

هشدار :

در نسخه cube MX  4.26.0  که مورد استفاده من هست . واحد spi2  با کتابخانه HAL درست کار نمیکنه !!! ولی با کتابخانه LL  مشکلی نداره . صحت این مطلب را در مورد نسخه 5 دقیقا نمیدنم ( روی سیستم من با مشکل مواجه هست و خوب کار نمیکنه ) ولی در هر صورت این موضوع را مد نظر داشته باشید .

 

بعد از اعمال این تنظیمات و تولید کد پروژه ، کدهای ضروری مربوط به  فایل  main  در تصاویر زیر نمایش داده  شده است .

ابتدا در فایل main.c  اینکلود ها را اضافه کنید و بهتر است در همان جایی که کیوب در نظر گرفته کدها را بنویسید . طبق تصویر زیر

 

و در خود تابع main()   دستورات درون کادر قرمز نوشته شود . دقت کنی که مکان آنها بعد از اجرای توابع مربوط به پیکر بندی gpio و spi  باشد. این مطلب را در تصویر زیر و درون کادر قرمز میبینید .

حال نوبت به معرفی یک تابع ، به عنوان تابع تاخیر میرسد .

بهتر است اینکار در فایل main.h  انجام شود .

یک مثال برای این هدف در کادر قرمز تصویر زیر نمایش داده شده است .

 راه اندازی در کمپایلر کیل uvision5

تمام موارد بالا برای کمپایلر کیل نیز صادق است با این تفاوت که 2 مورد اضاف وجود دارد یکی تعریف 2 متغیر عمومی که در تصویر زیر مشاهده میکنید . ( کادر قرمز)

توجه : این  دو متغیر برای نسخه های قدیمی احتیاج است و برای نسخه هایی که بعد از تاریخ 1399/3/6

تهیه نموده اید ، لازم نیست .

و یک تنظیمات در کمپایلر کیل احتایج هست که در 2 تصویر زیر میبینید .

تصویر زیر مربوط به تنظیم نسخه کمپایلر هست .

و تصویر زیر مربوط به استاندارد زبان C مورد استفاده است .

در اینجا توضیحات مربوط به راه اندازی کتابخانه برای stm32f0xx  به پایان رسید .

امیدوارم استفاده برده باشید و مورد توجه تان قرار گرفته باشد .

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

با سپاس از توجه تان.

 

لینک قسمت قبل

لینک قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت9

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای stm32 Cortex M3

با سلام .

در قسمت قبل راه اندازی کتابخانه برای AVR  را توضیح دادم . در این قسمت راه اندازی کتابخانه را برای  stm32 f103 c8t6 که در واقع بورد blue pill  را توضیح میدم . البته برای تمام بوردهایی که میکروی اونها cortexm3  یا به بیان بهتر   stm32f1xx  هست ، قابل استفاده میباشد.

البته به همراه مثالی که برای شما ارسال میکنم یک فایل cube MX  هست که پیکر بندی توی اون انجام شده ولی دوستانی هستن که به صورت رجیستری کد مینویسن یا از spl   استفاده میکنند که این توضیحات برای اونها ضروری هست .

اولین قسمت فایل کیوب که باید تنظیم بشه مربوط به تب pinout هست . که در تصویر زیر میبینید .

 

من برای spi از واحد2 استفاده کردم . تننظیماتش رو توی کادر قرمز میبینید .

دوتا پایه هم برای cs و reset  احتیاج هست که اونها را باید خروجی قرار بدید . ( کادر زرد رنگ )

جزئیات تنظیم spi در سربرگ conf  را در تصویر زیر مشخص کردم .

شما با تنظیم  prescaler  ( بالای خط بسته  قرمز ) میتونید  baud rate که در خط بسته قرمز مشخص هست را تنظیم کنید که در اینجا روی 18  مگاهرتز تنظیم شده  . این در واقع همون فرکانس کلاک spi  میکرو هست .

برای تنظیم gpio هم طبق تصویر زیر اقدام کنید.

نکته ای که باید بهش توجه کنید اون ستونهایی هست که با خط قرمز نمایش داده شده .

اگر روی هر سطر کلیک کنید های لایت میشه و گسترده  ی اون در پایین نمایش داده میشه . که میتونیدبرای pin  مورد نظر اسم هم بگذارید که در کادر زرد میبینید .

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

برای این تنظیمات  لازم هست که برید توی منوی project  و setting   رو انتخاب کنید . پنجره ای به شکل زیر باز میشه .

نکته مهم این تصویر کادر قرمز هست . علت انتخاب این گزینه ها پوشه بندی مربوط به پروژه هست . که خیلی واضح و سهل و راحت و قابل فهم از کار در میاد. البته نرم افزار من true studio  هست. نمیدونم برای نرم افزارهای دیگه چطوره !! همانطور که گفتم این موضوع سلیقه ای هست .

تنظیمات در برگه code generator  را من طبق تصویر زیر انجام میدم .

که بازم سلیقه ای هست . ولی این تنظیمات که توی کادر قرمز اومده ، برای من سهولت بیشتری ایجاد میکنه .

مورد سوم برگه advanced stting هست .که در تصویر زیر میبینید.

همانطور که در کادر قرمز میبینید ، کتابخانه مورد استفاده برای SPI 2  را LL  انتخاب کردم .

علتش رو به صورت هشدار زیر توضیح میدم :

هشدار :

در نسخه cube MX  4.26.0  که مورد استفاده من هست . واحد spi2  با کتابخانه HAL درست کار نمیکنه !!! ولی با کتابخانه LL  مشکلی نداره . صحت این مطلب را در مورد نسخه 5 دقیقا نمیدنم ( روی سیستم من با مشکل مواجه هست و خوب کار نمیکنه ) ولی در هر صورت این موضوع را مد نظر داشته باشید .

 

بعد از اعمال این تنظیمات و تولید کد پروژه ، کدهای ضروری مربوط به  فایل  main  در تصاویر زیر نمایش داده  شده است .

ابتدا در فایل main.c  اینکلود ها را اضافه کنید و بهتر است در همان جایی که کیوب در نظر گرفته کدها را بنویسید . طبق تصویر زیر

 

و در خود تابع main()   دستورات درون کادر قرمز نوشته شود . دقت کنی که مکان آنها بعد از اجرای توابع مربوط به پیکر بندی gpio و spi  باشد. این مطلب را در تصویر زیر و درون کادر قرمز میبینید .

حال نوبت به معرفی یک تابع ، به عنوان تابع تاخیر میرسد بهتر است اینکار در فایل main.h  انجام شود .

یک مثال برای این هدف در کادر قرمز تصویر زیر نمایش داده شده است .

 راه اندازی در کمپایلر کیل uvision5

تمام موارد بالا برای کمپایلر کیل نیز صادق است با این تفاوت که 2 مورد اضاف وجود دارد یکی تعریف 2 متغیر عمومی که در تصویر زیر مشاهده میکنید . ( کادر قرمز)

توجه : این  دو متغیر برای نسخه های قدیمی احتیاج است و برای نسخه هایی که بعد از تاریخ 1399/3/6

تهیه نموده اید ، لازم نیست .

و یک تنظیمات در کمپایلر کیل احتایج هست که در 2 تصویر زیر میبینید .

تصویر زیر مربوط به تنظیم نسخه کمپایلر هست .

و تصویر زیر مربوط به استاندارد زبان C مورد استفاده است .

در اینجا توضیحات مربوط بهراه اندازی کتابخانه برای stm32f1xx  به پایان رسید .

امیدوارم استفاده برده باشید و مورد توجه تان قرار گرفته باشد .

 در قسمت بعدی الزامات  راه اندازی  برای cortex M0 را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت8

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای AVR

با سلام .

 

در این پست میخوام به طور خلاصه در مورد نحوه ی راه اندازی کتابخانه  برای avr یک توضیحاتی بدم .

خوشبختانه در مورد AVR  خیلی کار پیجچیده ای نیاز نیست . فقط فایلها رو به پروژه اضافه کنید ( برطبق همون نرم افزاری که با اون کار میکنید )و ترتیب کدها در فایل main باید به صورتی باشه که در تصویر زیر میبینید.

 

 

در اینجا توضیحات مربوط به راه اندازی کتابخانه برای avr به پایان رسید .

امیدوارم استفاده برده باشید .

 در قسمت بعدی  راه انداز کتابخانه برای stm32  را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت7

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: معرفی کارکرد توابع قسمت گرافیکی  و نکات راه اندازی 

با سلام .

در این قسمت توابع  مربوط به بخش گرافیکی کتابخانه را توضیح میدم .

فایل های ایk بخش در پوشه glcd قرار داد . این بخش کتابخانه تنظیمات خاصی نداره و تنها با اینکلود کردن هدر فایل ، قابل استفاده است . دستور اینکلود قسمت گرافیکی باید بعد از اینکلود قسمتهای قبلی کتابخانه باشد.

جهت یادآوری محتویات پوشه glcd را در تصویر زیر میبینید .

 

الگوی توابع این قسمت در فایل  graphic_lcd.h  تعریف شده است .

لیست این توابع در تصویر زیر مشخص شده است .

عملکرد توابع گرافیکی در توضیحات زیر است :

تابع

glcd_draw_fill_rectangle (rgb_color_typedef   color ,uint8_t x1,uint8_t y1 ,uint8_t x2 , uint8_t y2);

 

این تابع یک مستطیل توپر رسم میکند . 

و متغیرهای آن به شرح زیر است

color  =  کد رنگ مستطیل میباشد.
 

x1 , y1   =   مختصات گوشه ی بالا سمت چپ مستطیل میباشد.

x2 , y2   =   مختصات گوشه ی پایین  سمت راست مستطیل میباشد.

*** توجه :

x =  شماره ستون  و   y = شماره سطر است .
 

تابع glcd_draw_line ( color ,  thicknes ,x1, y1 , x2 , y2);

این تابع یک خط از مختصات x1 ,y1  به مختصات x2 , y2 رسم میکند .

color  =  کد رنگ خط میباشد.

thicknes = ضخامت خط را مشخص میکند .

اگر شیب خط کمتر از 45 درجه باشد خط، به سمت پایین ضخیم میشود .و اگر بیشتر از 45 درجه باشد به سمت راست ضخیم میشود .

در واقع خط ضخیم  شده بیشتر شبیه متواضی الاضلاع هست .

 

تابع glcd_draw_fill_circle(color ,  x1, y1 , radius);

این تابع یک دایره توپر به رنگ color  رسم میکند .

x1,y1 مختصات مرکز دایره و radius شعاع دایره است .

 تابع :glcd_draw_fill_quadrant( color, quad_num, x0, y0 , radius)

این تابع یک ربع دایره توپر به رنگ color  و مرکز x0,y0  و شعاع radios رسم میکند .

quad_num : 

میتواند مقادیر 1 تا 4 را بپذیرد که تعیین کننده موقعیت ربع دایره است ، که به شرح زیر میباشد.

اگر صفحه ساعت را در نظر بگیرید .

1 =  ربع دایره بین ساعت 3 تا 6

2 =ربع دایره بین ساعت 6 تا 9

3 = ربع دایره بین ساعت 9 تا 12

4 = ربع دایره بین ساعت 12 تا 3

برای بقیه مقادیر چیزی رسم نمیکند .

تابع glcd_draw_rectangle( color , thicknes , x1,y1 ,x2 , y2)

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

thicknes = ضخامت اضلاع مستطیل میباشد . و نکته اینکه اضلاع به سمت داخل مستطیل ضخیم میشوند .

 

تابع glcd_draw_circle( color , thicknes  , x0, y0 , radius)

این تابع مانند تابع رسم دایره توپر (glcd_draw_fill_circle) است با این تفاوت که یک دایره توخالی با ضخامت حاشیه ای به اندازه ی  thicknes  رسم میکند . البته تنها از مقدار 1 برای thicknes استفاده نمایید .

تابع glcd_draw_quadrant( color, quad_num, thicknes , x0, y0 , radius)

شرح متغیرهای این تابع دقیقا مانند تابع  glcd_draw_fill_quadrant است . با این تفاوت که یک ربع دایره توخالی رسم میکند و تنها مورد اضافی متغیر thicknes هست که ضخامت حاشیه ربع دایره را مشخص میکند . بهتر از تنها از مقدار 1 استفاده کنید .

**************************************************************

توابع اضافه شده در نسخه 1.1.3 : ( این نسخه در تاریخ 1399/4/3 منتشر شده است)

تابع :

glcd_draw_circle_rectangle(rgb_color_typedef   color ,glcd_cor_type  cir_rad  ,  uint8_t  thicknes ,glcd_cor_type x1,glcd_cor_type y1  ,glcd_cor_type x2 , glcd_cor_type y2)

این تابع برای شما یک مستطیل یا مربع توخالی  با گوشه های گرد رسم میکند . و متغیر cir_rad   شعاع انحای گوشه های مربع میباشد .

توضیح بقیه پارامتهرهای آن شبیه تابع  glcd_draw_rectangle  است .

تابع :

glcd_draw_fill_circle_rectangle(rgb_color_typedef   color ,glcd_cor_type  cir_rad,glcd_cor_type x1,glcd_cor_type y1 ,glcd_cor_type x2 , glcd_cor_type y2);

این تابع مانند تابع بالا است با این تفاوت که مستطیل یا مربع را به طور توپر رسم میکند .

**************************************************************

اضافه کردن به پروژه :

کافیست فایل graphic_lcd.h را به پروژه پیوست کنید و فایلی سورس و هدر کتابخانه را در جای مناسب درون پروزه قرار دهید .

 

در اینجا توضیحات مربوط به قسمت گرافیکی کتابخانه به پایان رسید .

امیدوارم استفاده برده باشید .

 در قسمت بعدی الزامات  راه اندازی  برای AVR  را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت6

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: معرفی کارکرد توابع قسمت متنی و نکات راه اندازی 

با سلام .

در قسمت قبلی توابع مربوط به هسته رو توضیح دادم . ر این قسمت توابع مربوط به قسمت متنی را توضیح میدم . این قسمت یک  سری تنظیمات داشت که در قسمت4 توضیح داده شده است .

هدر و سورس فایل های قسمت متنی در پوشه  txt_lcd_adjustablefont قرار دارد .جهت یادآوری به تصویر زیر نگاه کنید .

 

الگوی توابع در فایل txt_lcd.h و بدنه توابع در فایل txt_lcd.c قرار دارد . محتویات هدر فایل را در تصویر زیر میبینید.

 

 

 

 

تابع (rgb_color_typedef   color)alcd_SetBackgroundColor :

این تابع رنگ پس زمینه را تعیین میکند . برای اینکه رنگ جدید اعمال شود لازم است که حتما یکبار صفحه پاک شود .

تابع alcd_Set_aligment( lcd_aligment_typedef   alig):

این تابع برای انتخاب حالت نوشتن چپ به راست ( انگلیسی) و یا حالت نوشتن راست به چپ ( فارسی ) استفاده میشود . مقادیر مجاز برای متغیر تابع txtlcd_right_to_left و txtlcd_left_to_right هستند .که نامشان گویای عملکردشان هست .

 

تابع alcd_Set_orient(lcd_orientation_typedef   orient) :

این تابع برای چاپ متن در زوایای 0 و  90 و 180 و 270 در صفحه به کار برده میشود .متغیر تابع زاویه را تعیین میکند و مقادیر مجاز آن به صورت زیر است .

txtlcd_orientation_normal

txtlcd_orientation_90

txtlcd_orientation_180

txtlcd_orientation_270

 

تابع  alcd_set_font(txtlcd_font_def_typedef      font) :

با این تابع میتوان فونت مورد استفاده را تغییر داد . فقط کافیست نام فونت مورد نظر را در متغیر تابع وارد کنید .( در مورد نام فونت در قسمت 4 قبلا توضیح دادم )

تابع alcd_gotocharxy(uint8_t x, uint8_t y) :

این تابع مکاننما را به صورت متنی به سطر (y)و ستون (x) ، برای نوشتن یک متن در صفحه منتقل میکند.

یک تفاوتی بین مختصات x,y  در این تابع وجود دارد .

مختصات x  بر ساس همان تعداد پیکسلهای عرض lcd  است . که به طور مثال اگر صفحه را روی 90 در جه تنظیم کرده باشید . مقداری بین 0 تا 159 ( برای ال سی دی 128*160 ) خواهد داشت .

اما مختصات y ، شماره سطر چاپ به صورت متنی است و به فونت مورد استفاده بستگی دارد . به طور مثال اگر حروف فونتی دارای ارتفاع 16 باشند :

برای y=0 مکاننما به سطر 0 از مختصات گرافیکی منتقل میشود .

برای y=1 مکاننما به سطر 16 مختصات گرافیکی منتقل میشود .

برای y=2 مکاننما به سطر 32 مختصات گرافیکی منتقل میشود .

***توجه :

برای فارسی نویسی :

دستور   alcd_gotocharxy(0,0)   مکاننما را به گوشه راست و بالا  صفحه نمایش منتقل میکند .

برای حالت انگلیسی :

دستور   alcd_gotocharxy(0,0)   مکاننما را به گوشه چپ و بالا  صفحه نمایش منتقل میکند .

تابع alcd_gotoxy(uint8_t x, uint8_t y) :

عملکرد این تابع دقیقا مانند تابع بالا است با این تفاوت که متغیر y  هم مانند متغیر x بر حسب تعداد پیکسلهای ارتفاع lcd  هست و رطی به فونت مورد استفاده ندارد . به طور مثال برای یک ال سی دی با رزولوشن 128*160 : مقدار x بین 0 تا 127 و مقدار y  بین 0تا 159 خواهد بود .

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

تابع   alcd_clear(void) :

این تابع کل صفحه را پاک میکند . و آنرا به رنگ پس زمینه رنگ آمیزی میکند .

 

تابع alcd_init(void) :

این تابع قبل از اجرای هر تابعی از کتابخانه و بعد از تابع راه اندازی هسته ( lcd_init)  در متغیر تابع باید

متغیر عمومی lcd_position ( در ابتدای فایل تعریف شده است)را قرار داد .

تابع alcd_putc(rgb_color_typedef  color, char c) :

این تابع یک کارکتر را به رنگ دلخواه را  در lcd  چاپ میکند . مکاننما قبلا باید به جای مورد نظر منتقل شده باشد .

 تابعalcd_putsf(rgb_color_typedef  color, const char*  str) :

این تابع یک رشته را که در حافظه فلش قرار دارد به رنگ دلخواه در صفحه چاپ میکند .

تابع  alcd_putsf_persian(rgb_color_typedef  color, const char*  str) :

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

تابع alcd_puts( color,str)  :

این تابع یک رشته را که در حافظه رم قرار دارد . به رنگ دلخواه در صفحه چاپ میکند .

تابع  alcd_puts_persian( color,str)

این تابع برای فارسی نویسی است قابلیت تشخیص اتوماتیک حروف را دارد و برای نوشت یک رشته از حافظه رم روی lcd  استفاده میشود .

***توجه :

در هر 4 تابع بالا ابتدا باید مکاننما به محل مورد نظر منتقل شود .

***************************************************************

توابع اضافه شده در نسخه 1.1.3 : ( این نسخه در تاریخ 1399/4/3 منتشر شده است)

تابع alcd_get_pixel_len_of_flash_string(const char *str);

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

 

تابع alcd_get_pixel_len_of_flash_string_persian(const char *str):

عملکرد این تابع همانند تابع قبلی هست با این تفاوت که هنگامی که شما قابلیت فونت فارسی را فعال کرده باشید در دسترس است  . و به طور اتوماتیک حالت حروف فارسی را ( اول  وسط آخر  و تنها ) را تشخیص میدهد و طول رشته را با توجه به این موضوع اندازه میگیرد.

 

 ماکروی های alcd_get_pixel_len_of_string(str) و alcd_get_pixel_len_of_string_persian(str) :

ماکروهای معادل برای توابع بالا به منظور تعیین طول یک رشته در حافظه sram  هستند .

نکته : این توابع و ماکروها میتوانند طول رشته هایی به اندازه حدکثر  65535 پیکسل را دارد .

 

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

آسان است . اما اگر از فونت باطول متغیر استفاده شود انجام اینکار بدون این توابع میتواند آزار دهنده و وقت گیر باشد .

***************************************************************

اضافه کردن قسمت متنی کتابخانه به پروژه :

برای اضافه کردن این قسمت کتابخانه کافیست فایلtxt_lcd.h   را در فایل main.c  اینکلود کنید .سپس در تابع main   و قبل از همه دستورات مربوط به کتابخانه و بعد از تابعnlcd_init(LCD_COLOR_SIZE )  تابع

alcd_init()  را بنویسید.

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

با سپاس از توجه تان .

لینک قسمت قبلی

لینک قسمت بعدی

 

 

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

 

 

 

 

 

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت5

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

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

با سلام .

مجموعه فایلهای قسمت هسته کتابخانه درون پوشه lcd قرار دارد . برای یاد آوری محتویات این پوشه  به تصویر زیر نگاه کنید .

 

 

 

 

 

 

 

 

 

 

در مورد اینکه این فایلها محتوی چه چیزهایی هستند در قسمتهای قبلی گفته شده است .

در این قسمت ما با 2 فایل  nokia1661_lcd.h و   nokia1661_lcd.c    سروکار داریم .این فایلها شامل تعریف الگوی توابع و همچنین کد توابع هست . در زیر تصویر تعریف الگوی توابع درون فایل  را میبینیم .

 

شرح توابع :

تابع  void lcd_spi_init(void) :

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

 

تابع  nlcd_write_cmd(cmd)

این در واقع یک ماکرو هست و برای ارسال یک کد فرمان ( 8 bit )  به lcd استفاده می شود .

***یادآوری: کدهای فرمان در فایل spdf54124b.h  قرار دارد .

تابع nlcd_write_data(data)

این ماکرو هم قالب یک تابع را دارد و برای ارسال یک داده یا پارامتر فرمان 8 بیتی به lcd  استفاده میشود .

***توجه : در مورد اینکه فرمانها چه هستند و پارامترهای آنها چیستند نیاز هست که دیتا شیت  ال سی دی را مطاله کنید . البته اینکار بیشتر برای موارد خاص نیاز است .

مختصری در باره ارتباط 2 تابع بالا:

بعضی فرامین ال سی دی پارامترهایی دارند ، ابتدا با nlcd_write_cmd(cmd) کد فرمان به ال سی دی ارسال میشود و سپس هر تعداد پارامتر مورد نیاز باشد بوسیله استفاده چند باره از تابع nlcd_write_data(data) ارسال خواهد شد .

تابع nlcd_read(uint8_t reg , uint8_t * readbuffer , uint8_t   num)

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

 reg : کد فرمان مربوط به خواندن از lcd هست .

readbuffer : نام آرایه ای هست که قراره کدهای خوانده شده از lcd  در اون ذخیره بشه .

num: تعداد بایتهایی که  خوانده  خواهد شد.

تابع nlcd_init(lcd_colorsize_typedef  size)

این تابع ال سی دی را برای شروع به کار آماده میکند و قبل از اجرای هر تابعی از کتابخانه ، باید اجرا شود . برای متغیر  size باید از  عبارت LCD_COLOR_SIZE (که در فایل nokia1661_lcd_conf.h تعریف شده است ) استفاده شود .

 تابع  nlcd_paint_pixel(rgb_color_typedef  color) :

این تابع یک پیکسل را در جایی که مکان نمای فعلی قرار دارد رنگ میکند.

تابع nlcd_paint_pixels(rgb_color_typedef  color , uint16_t   num) :

عملکرد این تابع مانند تابع بالا هست فقط به تعداد num پیکسل را رنگ میکند.

***توجه:  این توابع معمولا با تابع بعدی استفاده میشود .

تابع nlcd_set_window(uint8_t  x , uint8_t  y , uint8_t  w , uint8_t  h ) :

این تابع یک محدوده برای مکان نمای گرافیکی lcd  تعیین میکند که مکان نما فقط درون آن حرکت میکند .

و برای رنگ کردن محدوده ی مشخصی از صفحه کاربرد دارد .

متغیرهای x شماره ستون و y  شماره سطر گوشه بالا چپ محدوده است .و w ( width )   پهنا و h (height) ارتفاع محدوده میباشد .

 

کاربرد 3 تابع بالا در ارتباط با یکدیگر :

1 - رنگ کردن قسمتی از صفحه :

ابتدا با تابع nlcd_set_window یک محدوده مشخص میکنیم . سپس با تابع nlcd_paint_pixels پیکسلهای محدوده را رنگ میکییم . مثال :

      nlcd_set_window(10,20, 18,36);

      nlcd_paint_pixels( color , 18*36);

     لازم است که متغیر num تابع nlcd_paint_pixels  به تعداد پیکسلهای محدوده مشخص شده توسط nlcd_set_window باشد .

2 - نمایش یک تصویر در  قسمتی از صفحه :

ابتدا یک محدوده به اندازه سایز تصویر در نقطه ای که مایل هستیم را بوسیله تابع nlcd_set_window مانند مثال بالا ، ایجاد میکنیم سپس رنگ پیکسلهای تصویر که از حافظه یا رابط سریال خوانده شده است را توسط تابع nlcd_paint_pixel  تک به تک به lcd ارسال میکنیم .

 

************************************

اضافه کردن قسمت هسته کتابخانه به پروژه :

برای اضافه کردن این قسمت کتابخانه کافیست فایل nokia1661_lcd.h  را در فایل main.c  اینکلود کنید .

سپس در تابع main   و قبل از همه دستورات مربوط به کتابخانه ، تابع nlcd_init(LCD_COLOR_SIZE )

 با همان متغیر داخل تابع را بنویسید.

امیدوارم مطالب ای قسمت برای شما مفید بوده باشد .

در قسمت بعدی توابع مربوط به قسمت متنی را شح خواهم داد.

لینک قسمت قبلی

لینک قسمت بعدی 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

 

 

 

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت4

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: تنظیمات قسمت متنی

با سلام مجدد.

در این بخش قصد دارم تنظیمات مربوط به قست متنی را توضیح بدم .اگر میخواهید روی ال سی دی متن بنویسید باید این قسمت از کتابخانه را تنظیم کنید.این تنظیمات در فایل txt_lcd_conf.h هست ، که این فایل درپوشه txt_adjustablefont قرار دارد.بهتر است اول نگاهی به محتویات فایل، در تصویر زیر  بیندازیم.

محتویات فایل txt_lcd_conf.h

در این فایل 5 ماکرو میبینید که کارکرد آنها به شرح زیر است :

TXTLCD_DEFULTFONT :

این ماکرو ، فونت پیش فرض برای کتابخانه را تعریف میکند . (البته لزوما نام فونت با نام هدر فایلی که فونت در آن تعریف شده یکسان نیست.... ).

کتابخانه قبل از راه اندازی نیاز دارد که یک فونت به عنوان پیشفرض برای آن تعریف شود . این فونت که در تصویر تعریف شده فونت انگلیسی هست . اگر قصد دارید روی ال سی دی فارسی بنویسید ، از ابتدا فونت فارسی رو به عنوان پیشفرض تعریف کنید .

برای اینکار فایل فونت را باز کنید . در درون فایل علاوه بر رشته ها ، که شکل حروف و غیره ... را در خود نگه داشته اند ، یک ساختار( struct ) وجود دارد . نام آن ساختار همان نام فونت است .

مثالی از مطالب بالا را در شکل زیر میبیند.

 

در تصویر قسمتی که هایلایت شده است نام فونت هست . این نام باید به عنوان نام فونت پیشفرض تعریف شود و مشاهده میکنید که با نام فایل متفاوت است .

TXTLCD_TRANSPARENT:

این ماکرو حالت ترانسپرانت را برای قسمت متنی ، فعال یا غیر فعال میکند . و فقط دو مقدار Txtlcd_enable  و   Txtlcd_disable را قبول میکند . این مقادیر در فایل txt_lcd_names.h تعریف شده اند.

و برای استفاده ، آنها را از فایل ، کپی پیست کنید.

در مورد خاصیت ترانسپرنت و عملکرد آن در پست معرفی کتابخانه اینجا توضح داده شده است.

TXTLCD_PERSIAN_type :

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

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

لازم به ذکر است فعال کردن این گزینه حدود 1 کیلوبایت به حجم کتابخانه اضافه میکند .

البته بدون فعال کردن این گزینه میتوان از فونت فارسی استفاده کرد ، ولی تشخیص اینکه حروف از کدام نوع هستند به  عهده خودتان خواهد بود و باید کد مخصوص حروف را از فایل اکسلی که همراه کتابخانه است پیدا کنید و در رشته قرار دهید .

TXTLCD_VERT_FONT_SPACE  :

این ماکرو فاصله بین دوسطر را افزایش میدهد که میتواند مقداری بین 0 تا 255 داشته باشد . مقادیر منفی باعث ایجاد خطا خواهد شد .

TXTLCD_HORZ_FONT_SPACE :

این ماکرو فاصله  افقی حروف از یکدیکر را افزایش میدهد و میتواند مقداری بین 0 تا 255 داشته باشد .

البته این تنظیم بیشتر برای حروف انگلیسی و نمادها قابل استفاده است . اگر آنرا برای حروف فارسی به کار ببرید و مقداری بیش از صفر مثلا 1 به آن بدهید ، باعث بریده بریده شدن حروف کلمات میشود . که البته میتواند افکت جالبی هم باشد .

 

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

در قسمت بعدی به شناخت و عملکرد توابع قسمت هسته lcd که تنظیم آن در قسمت قبلی توضیح داده شد خواهیم پرداخت .

لینک قسمت قبلی

لینک قسمت بعدی

 

مالکیت معنوی :لطفا کپی نکنید لینک بدید .

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت2

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: شماتیک لازم برای راه اندازی lcd

باسلام.

در قسمت قبلی مشخصات فنی کتابخانه رو معرفی کردم .

توی این قسمت در مورد شماتیک لازم برای راه اندازی ، مطالبی رو میگم .

چون AVR  با 5 ولت کار میکنه ( البت سریهای Aمثل ATmega8A  یا ATmega32A با 3.3 هم میتونن کار کنن ) .و ولتاژ lcd  مقدار 3.3V هست بنابراین نمیشه مستقیم lcd  را به میکرو متصل کرد . بنا براین  لازم هست از شماتیک های زیر استفاده کنیم.

این شماتیک برای میکروهای stm32  و کلا هر میکرویی که با ولتاژ 3.3 ولت راه اندازی شده باید استفاده بشه .

و شماتیکی که در ادامه میبینید برای میکروهای AVR و ولتاژ تغذیه 5V  هست . البته در این تصویر 2 شماتیک میبینید که به دلخواه میتونید یکیش رو انتخا کنید .

شماتیک برای AVR

بحث شماتیک برای راه اندازی lcd به پایان رسید .

سپاس بابت توجه تان .

لینک قسمت قبلی

لینک قسمت بعدی

 

مالکیت معنوی : لطفا کپی نکنید لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت3

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

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: تنظیم کردن  هسته کتابخانه

با سلام .

در قسمت قبل در مورد فایلها و محتویات آنها صحبت کردم .در این قسمت میخوام در مورد نحوه ی تنظیم کردن کتابخانه صحبت کنم .  شما میتونید تنظیماتی را برای کتابخانه اعمال کنید که موجب تغییر در استفاده از سخت افزارمیکرو یا تغییر در حجم یا سرعت کتابخانه می شود .

همانطور که در قسمت قبلی توضیح دادم . کتابخانه شامل چند پوشه هست . پوشه lcd  شامل فایل های مربوط به هسته کتابخانه هست .و پوشه   txt_lcd_adjustablefont که در واقع به لایه متنی هست . هر دوی قسمت های این کتابخانه دارای تنظیماتی هست .

که ابتدا قسمت تنظیمات هسته رو توضیح میدم .

تننظیمات هسته در فایل nokia1661_lcd_conf.h  قرارداره . و محتویات این فایل رو  در تصویر زیر میبینید.

محتویات فایل nokia1661_lcd_conf.h

اولین قسمت مربوط به  پایه های lcd  هست .

LCD_RST_PORT :

  در واقع مربوط به پورتی هست که پایه ریست lcd  به اون متصل هست .

مثلا برای نسخه avr   از PORTB  یا PORTC  وغیره.... استفاده میشه و برای نسخه stm32  از عباراتی مانند GPIOA یا GPIOC یا غیره ....باید استفاده کرد .

LCD_RST_PIN :

مربوط به شماره پینی از پورت هست که پایه ریست lcd  به اون متصل شده .

عبارات  LCD_SCL_PORT    ،   LCD_SDA_PORT    ،    LCD_CS_PORT 

 به ترتیب مربوط به معرفی پایه های SCL ,  SDA , CS    از lcd هست .

و  عبارات  LCD_SCL_PORT    ،   LCD_SDA_PIN    ،    LCD_CS_PIN   مربوط به شماره پینها هستند.

اگر میخواهید از سخت افزار  spi میکرو برای ارتباط با lcd استفاده کنید . باید توی دیفاین پایه های میکرو رو جوری تعریف کنید که ارتباط زیر بین پایه ها برقرار باشه :

از طرف میکرو      از طرف lcd

پایه  SDA  ----->     MOSI

پایه        SCL -----> SCK 

پایه  CS و RST ال سی دی  رو به هر پایه دلخواه میکرو میتوانید متصل کنید .
توجه1 :

برای نسخه avr  لازم نیست که واحد spi  توسط شما تنظیم شود ، اینکار به طور اتوماتیک هنگام اجرای کد کتابخانه انجام می گردد . اما برای نسخه stm32 لازم است که واحد spi ، توسط نرم افزار کیوب یا به هر روشی که مایل بودید توسط کاربر روی مد Master  half Duplex تنظیم گردد .

 

توجه2:

در نسخه stm32 Cortex_M0  :درحالت ارتباط نرم افزاری لازم  است که پایه های مربوط به reset , CS ,SDA ,SCL را هنگام ساختن پروژه به وسیله نرم افزار کیوب روی  out put  و  pushpull تنظیم نمایید . در صورتی که از حالت ارتباط spi استفاده میکنید این کار را فقط برای reset , CS انجام دهید . برای پایه های SDA ,SCL  هنگام تنظیم spi  انجام خواهد شد.

***هشدار:

در مورد نسخه stm32 دقت کنید که پین های lcd  روی پایه های مربوط به پروگرامر stlink قرار ندهید . 

قسمت بعدی مربوط به گزینه  استفاده از سخت افزار میکرو هست .

LCD_INTERFACE_TYPE :

این گزینه مربوط به انتخاب ارتباط از طریق سخت افزار میکرو یا ارتباط به صورت نرم افزاری( شبیه سازی ارتباط spi روی پینهای میکرو ) است .

مقادیر مجاز برای این گزینه در فایل nokia_lcd_names.h  تعریف شده است .و شامل دوگزینه زیر است .

 Lcd_hardware_spi9bit       
 Lcd_software_spi9bit  

گزینهLCD_SPI_UNIT :

این قسمت مربوط نسخه Stm32 است و تنها زمانی کاربرد دارد که از حالت ارتباط سخت افزاری ( Lcd_hardware_spi9bit)  استفاده شود . و نام آن(SPI2 )  جزء نامهای کتابخانه نیست . و مربوط به هدر فایلهای کتابخانه های شرکت st ست . و معرف واحد spi میکرو هست که بنا به تعداد واحد های spi  میکرو میتوان یکی از مقادیر SPI1 ,SPI2  و غیره .... را انتخاب نمود .

قسمت مربوط به تعیین سایز  lcd  ( LCD screen size )  :

گزینه  LCD_CTRL_WIDTH:

این گزینه مربوط به تعداد پیکسلها در عرض lcd است که تعداد پیکسلها روبروی آن نوشته شده است.

گزینه  LCD_CTRL_HEIGHT:

این گزینه هم مربوط به تعداد پیکسلها درارتفاع lcd است که تعداد پیکسلها روبروی آن نوشته میشود .

بقیه قسمتها که توضیح داده نشده است ، نیازی به تغیر ندارد .

 

بحث مربوط به تنظیمات هسته کتابخانه به در اینجا به پایان رسید.

در قسمت بعدی در مورد تنظیمات مربوط به قسمت متنی توضیح میدم .

سپاس بابت توجه تان .

 

لینک قسمت قبلی

لینک قسمت بعدی

 

 

مالکیت معنوی : لطفا کپی نکنید . لینک بدید ....

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت1

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

 

قسمت 2 : شماتیک برای راه اندازی lcd nikia1661

قسمت 3 : تنظیمات هسته کتابخانه

قسمت 4 : تنظیمات قسمت متنی کتابخانه

قسمت 5: آشنای با توابع قسمت هسته و اضافه کردن آن به پروژه

قسمت 6 : آشنایی با توابع قسمت متنی و اضافه کردن آن به پروژه

قسمت 7 : آشنایی با توابع قسمت گرافیکی و اضافه کردن آنها به پروژه

قسمت 8 : راه اندازی کتابخانه برای AVR

قسمت 9 : راه اندازی کتابخانه برای میکرو stm32f1xx  cortexM3

قسمت 10 : راه اندازی کتابخانه برای میکرو stm32f0xx  cortexM0

قسمت 11 : فرمت رنگ در lcd  و توضیحات مربوط به قسمت نمایش تصویر .

 

با سلام .

توی این سری از مطالب قرار هست  در موردفایلها ، قابلیتها ، نحوه ی تنظیمات، و راه اندازی  کتابخانه مربوط به lcd nokia1661  مطالبی را بیان کنم . این مطالب سبب صرفه جویی در زمان شما برای کار با کتابخانه خواهد شد پس به دقت مطالب را دنبال نمایید.

برای تهیه کتابخانه میتوانید به اینجا مراجعه نمایید

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

زمانی که فایل در یافتی رو از حالت فشرده خارج میکنید 4 پوشه در اختیار شما قرار میگیرد .

فایلهای کتابخانه

پوشه Example  مثال راه اندازی است که شامل کدها و فایل اجرایی برای avr یا stm32  است   .

پوشه glcd مربوط به قسمت گرافیک،

پوشه txt_lcd_adjustablefont مربوط به قسمت متنی  ،

و پوشه lcd  در واقع هسته کتابخانه  است.

قبل از اینکه در مورد فایلهای هر پوشه توضیح بدم ، یک مطلب کلی را در مورد نام فایلهاو کارکردشون توضیح میدم :

1 - فایلهایی که در نام آنها typedef  وجود دارد :

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

2 - فایلهایی که در نام آنها names وجود دارد :

  این فایل شامل مقادیر مجاز برای استفاده در فایل   conf  و typedef  است . که برای سهولت استفاده نامگذاری شده اند.

3- - فایلهایی که در نام آنها conf وجود دارد :

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

بعد از این توضیح کوتاه فایلهای هر پوشه را توضیح میدم .

پوشه lcd  شامل فایلهای زیر است:

فایل های هسته

فایل های nokia1661_lcd.h و nokia1661_lcd.c   :

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

فایل spdf54124b.h :

این فایل شامل کامندهای مربوط به درایور lcd  هست . که برمبنای دیتا شیت چیپ درایور lcd نامگذاری شده اند .

فایل spdf54124b_color.h :

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

بقیه فایلها هم کارکردی مطابق طبق توضیحات کلی بالادارند .

 

فایلهای پوشه glcd شامل فایلهای زیر است :

فایلهای پوشه glcd

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

فایلهای پوشهtxt_lcd_adjustablefontشامل فایلهای زیر است :

فایلهای قسمت text

4 فایل اولی از بالا  فونت هستند .

فایلهای txt_lcd.h و txt_lcd.c  فایلهلی اصلی قسمت متنی هستندکه تعاریف الگو و سورس توابع در آنها قرار دارد.

فایل txt_lcd_persian_table.h :

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

داده های درون این فایل برای تشخیص اتوماتیک نوع حروف فارسی استفاده میشود .

فایل txt_lcd_font.h :

تمام فونتهایی را که قصد استفاده از آنها را دارید باید در این فایل تعریف شوند .

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

 

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

لینک قسمت بعدی

 

سپاس بابت توجه تان .

 مالکیت معنوی : لطفا کپی نکنید . لینک بدید....

 

 

کتابخانه حرفه ای nokia 1661 lcd برای میکروهای  stm32 و  Avr + فونت فارسی

با سلام .

آپدیت :

این کتابخانه در تاریخ 1399/4/3 به نسخه 1.1.3 ارتقا یافته است .

برای اطلاع از تغیرات نسبت به نسخه قبلی(1.0.1) ، لطفا به اینجا مراجعه نمایید.

کتابخانه درایور tft 3.2" با چیپ ili9341 قابل اتصال به این کتابخانه را لطفا در ( اینجا) ببینید.

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

چند وقت پیش از یک کتابخانه که در مراحل اول نوشتنش بودم رونمایی کردم . اون موقع نیمه کاره بود و خوشبختانه الان کامل شد . و واقعا ازش رضایت دارم .

این که چرا این کتابخانه رو نوشتم در پست رونمایی محصول اولیه ( اینجا ) کامل توضیح دادم.

در رابطه با آپدیت این کتابخانه لطفا اینجا را ببینید.

این کتابخانه برای lcd های nokia1661 و nokia1616 و کلا تمام ال سی دی هایی که کنترلر اونها

SPFD54124B هست و در مود spi 9bit کار میکنه قابل استفاده هست.

از مزایای این lcd برای استفاده در مدارات میکروکنترلری این است که فقط به 4 پین از میکرو برای ارتباط احتیاج دارد و بسیار ارزان قیمت است ( از ماژولهای led با تعداد 3 رنگ نیز ارزانتر است )و با توجه به مزایایی که دارد نسبت بسیاری از lcd ها به صرفه تر است.

اما بریم سر اصل مطلب :

توضیح مختصری در مورد lcd nokia 1661 :

این یک ال سی دی ارزان قیمت tft 1.8" با رزولوشن 128×160 پیکسل هست ( البته برای نوکیا 1616 130×161 هست)که از 65 هزار رنگ پشتیبانی میکنه و از ارتباط spi 9bit استفاده میکنه و ولتاژ تغذیه و ولتاژ io ها 3.3 ولت است.

در زیر تصویر ال سی دی و نامگذاری پایه های اون رو میبینید .

تصویر lcd nokia1661

این کتابخانه برای میکروهای AVR شامل atmega16-32-64-128 وبرای میکروهای cortex m0وstm32f030 , stm32F0x1-2-8 و Cortex M4 شامل میکروهای STM32F429/439 STM32F405/415, STM32F407/417, STM32F427/437 به صورت رجیستری و cmsis نوشته شده است( یکی از دلایل سرعت بالای کتابخانه ) و برای سری stm32F1xx Cortext M3 هم آماده شده است ( با بورد blue pill تست گردید)

مشخصات آن به شرح زیر است :

1 - کمپایلر نسخه AVR : ـ avr gcc (نرم افزارهای winavr , Arduino , atmel studio ) با استاندارد زبانی c99 - gnu89 - gnu99

2 - کمپایلر نسخه stm32 : ـArm gcc ( نرم افزار true studio ) و با استاندارد زبانی c99 - c90 - gnu90 - gnu99 مطابقت دارد .( چون بر اساس زبان C استاندارد نوشته شده است ، برای دیگر کمپایلر ها و نرم افزارها قابل استفاده میباشد.)

3 - قابلیت تعریف pin های lcd روی پورتهای مختلف.

4 - قابلیت انتخاب ارتباط از طریق سخت افزار spi یا به صورت شبیه سازی روی پایه ها

5 - سرعت رفرش بالا خصوصابرای Avr :

به دلیل استفاده از سخت افزار spi و بهینه سازی توابع سرعت رفرش خصوصا در مورد نسخه AVR قابل توجه است . کلیپهای زیر به روشنی گویای این مطلب است .

سرعت رفرش در مورد نسخه stm32 با فرکانس کلاک spi 12MHZ و کلاک سیستم MHZ 48 در فیلم زیر مشاهده میکنید .

همانطور که میبینید در نسخهcortexM0 stm32 برای 10 بار رنگ کردن صفحه (رفرش) به 323 میلی ثانیه زمان نیاز هست . یعنی هر رفرش در 32.3 میلی ثانیه یا به عبارت بهتر 30.9 رفرش در ثانیه !!!

و این رقم برای AVR مقدار 11.2 بار رفرش در ثانیه هست . !!! که برای Avr و باتوجه به اینترفیس lcd رقم قابل توجهی هست که در فیلم زیر میبینید.

و برای نسخه stm32 CortexM3 سرعت رفرش را در تصاویر زیر مشاهده میکنید .

سرعت رفش تصویر بالا معادل 10.4 فریم در ثانیه است .

و سرعت رفرش در این تصویر 5.5 فریم در ثانیه است .

توجه : زمان مربوط به تصویر اول با استفاده از بهینه سازی کمپایلر روی سرعت ، بدست آمده و زمان مربوط به تصویر دوم بدون هیچگونه بهینه سازی بوده است . در هر دو حالت بوسیله سخت افزار spi با بادریت 18 مگاهرتز آزمایش شده است .

6. فونت :

6-1 - استفاده از فونتهای زیبا وشکیل .

6-2 - فونت این کتابخانه از نوع طول متغیر است .( البته قابلیت استفاده از فونت با طول ثابت را هم دارد ) که باعث فشردگی مناسب متن نوشته شده و زیبایی و طبیعی بودن آن میگردد.

6-3 - قابلیت استفاده همزمان ازانواع مختلف و سایزهای مختلف فونت بدون محدودیت در تعداد( تنها عامل محدودیت حافظه فلش میکروکنترولر شماست) .

6-4 - قابلیت استفاده از فونت فارسی با تشخیص خودکار نوع حروف ( اول ،آخر ،وسط یا تنها )

در تصویر زیر قابلیتهای شرح داده شده در بالا را مشاهده میکنید.

**** در تصویر به حروف ل و الف دقت کنید که همانند فونت های ویندوز به هم متصل شده اند

و همچنین به قابلیت افزایش طول حروف (حرف شین) .

نمایش قابلیتهای فونت

عملکرد تایپ انگلیسی و فارسی موجود در فونت فارسی.در تصویر زیر نمایش داده شده است .


تایپ فارسی و انگلیسی

در تصویر زیر تمام حروف موجود در فونت فارسی و انگلیسی به همراه اعداد را میبینید.


 حروف موجود در فونت

و در تصویر زیر علائم فونت فارسی و انگلیسی نمایش داده شده است .


نمادهای موجود در فونت

6-5- قابلیت فعال کردن transparent در مورد حروف چاپ شده در تصویر :

منظور از transparent چیست :

هر کدام از حروف فونت دارای یک فضای پس زمینه است که در واقع به شکل یک مستطیل است که حرف مورد نظر درون آن قرار دارد . هنگامی که قابلیت transparent فعال نباشد ، در هنگام چاپ حروف

پیکسلهای پس زمینه با رنگ مربوط به پس زمینه (bakground color ) که توسط کاربر تعیین میشود رنگ آمیزی میشود .و در واقع تصویر پشت حروف را پاک میکند . مانند تصویر زیر که میبینید قسمتی از مستطیل آبی و همچنین دایره بنفش رنگ پاک شده است .

تست عدم transparent

اما در هنگامی که قابلیت transparent فعال باشد ، تصویری که قبل از چاپ حروف روی lcd هست . در پس زمینه حروف ظاهر میشود و تغییری نمیکند. این قابلیت برای نوشتن متن روی تصاویر مناسب است . مانند تصویر زیر :

تست فعال بودن قابلیت ترانسپرنت

7 - سرعت مناسب چاپ حروف روی صفحه :

عملکرد سرعت چاپ حروف انگلیسی و فارسی برای cortexM0 stm32 ودر حالت transparent در تصاویر زیر میبینید .

سرعت تایپ حروف انگلیسی  نسخه stm32

توجه : زمان در تصویر بالا برای stm32 cortexm3 و بدون بهینه سازی مقدار 332 میلی ثانیه بدست آمده است

سرعت چاپ حروف فارسی در نسخه سفئ32

توجه : زمان در تصویر بالا برای stm32 cortexm3 و بدون بهینه سازی مقدار 222 میلی ثانیه بدست آمده است

و در مورد نسخه avr ، سرعت چاپ ، برای فعال بودن حالت transparent را در تصاویر زیر مشاهده میکنید .

سرعت چاپ حروف انگلیسی در نسخه avr

سرعت چاپ حروف فارسی در نسخه AVR

***توجه :

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

8 - قابلیت چاپ متن در زوایای 0 و 90 و180 و 270 درجه و قابلیت خواندن برخی پارامترها از lcd .

نوشته های قرمز رنگ برخی از پارامترهای خوانده شده مربوط به lcd هستن.

خواندن پارامترهای lcd  و چاپ متن در زوایای مختلف

9 - قابلیتهای گرافیکی :

9-1 - قابلیت رسم خط عودی افقی و مورب با ضخامتهای مختلف ( متوازی الاضلاع قرمز رنگ در واقع یک خط مورب با ضخامت 15 است .

9-2 - قابلیت رسم دایره تو پر و ربع دایره توپردر زوایای 0،90 ،180 ،270 درجه .

9-3 قابلیت رسم دایره توخالی و ربع دایره توخالی در زوایای 0 ، 90 ، 180 ،270 درجه.

9-4 - قابلیت رسم مستطیل توپر

9-5 - قابلیت رسم مستطیل توخالی .

قابلیتهای گرافیکی

10 - قابلیت نمایش تصویر با فرمت bmp از روی micro sd card .

لطفا برای اطلاعات بیشتر در زمینه نمایش تصویر و دانلود فایل تست ، به قسمت 11 راهنمای کتابخانه مراجعه فرمایید .

11 - میزان حافظه فلش و رم مورد نیاز برای کتابخانه :

این کتابخانه دارای 4 پوشه مهم است .که شامل قسمت هسته ،قسمت متنی و گرافیکی و قسمت نمایش تصویر هست .و حجم های مربوطه در جدول زیر آورده شده است .

حافظه فلشحافظه رم
نسخه AVR
قسمت گرافیکی3.6 K byte0 Kbyte
قسمت متنی و هسته با فونت پیش فرض و فعال بودن حالت فارسی5.92 K Byte30 Byte
فونت فارسی 5.02 K Byte10 Byte
نسخه stm32
قسمت گرافیکی16 K Byte
قسمت متنی و هسته با فونت پیش فرض و فعال بودن حالت فارسی10 K Byte
فونت فارسی 6.1 KByte

***مثال های درون فایلهای ارسالی برای atmega32 و stm32 f072نوشته شده است .

*** حجمهای قید شده در جدول بر مبنای حداکثر ، آورده شده است و در عمل میتواند کمتر از این مقدار باشد.

12 - متعلقات اضافی :

شامل دیتا شیت کنترلر و فایلهای pdf برای ساخت یک pcb ساده جهت دسترسی به پینهای lcd

************************************************************************

راهنمای راه اندازی و استفاده از کتابخانه را در اینجا ببینید .

************************************************************************

فایل هگز تست :

برای اینکه شما از عملکرد کتابخانه مطمئن باشید

من فایل های هگز کمپایل شده رو اینجا گذاشتم و میتوانید دانلود کنید و خودتون نتیجه رو ببینید :

دانلود فایل هگز تست برای نسخه AVR (atmega32)

دانلود فایل هگز تست برای نسخه stm32 CortexM0 (میکرو stm32f072c8t6 )

دانلود فایل هگز تست برای نسخه stm32 Cortex M3 (میکرو stm32f103c8t6 )

دانلود فایل هگز تست برای نسخه stm32 Cortex M3 و کمپایلر KEIL5 (میکرو stm32f103c8t6 )

لطفا برای اتصال lcd به میکرو، اینجا را مطالعه نمایید .

***************************************************************************

قیمت کتابخانه نسخه1.0.1 avr : مبلغ 60،000 تومان

( دو نسخه زیر در تاریخ1399/4/3 منتشر شده است )

قیمت کتابخانه نسخه cortexM0 stm32f0xx 1.1.3(KEIL5 و GCC) : مبلغ 120،000 تومان

قیمت کتابخانه نسخه cortexM3 stm32f1xx 1.1.3 (KEIL5 و GCC) : مبلغ 120،000 تومان

خرید هر دو نسخه stm32 با هم : مبلغ 210,000 تومان (12.5% درصد تخفیف)

***************************************************************************

نحوه ی خریداز طریق پرداخت مستقیم: برای خرید لطفا اینجا را ببینید

فایلهای لازم ظرف حداکثر 24 ساعت برای شما ارسال خواهد شد .

نکته مهمی که در مورد این کتابخانه وجود داره پشتیبانی از اون هست . چون کتابخانه رو خودم نوشتم هیچ نکته مبهمی برای شما به عنوان استفاده کننده وجود نخواهد داشت .

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه منو ( فارسی و انگلیسی ) 4 دگمه

نرم افزار تولید فونت برای میکروکنترلر

اتصال درایور ili9341 به کتابخانه lcd nokia1661

کتابخانه درایور برای ili9341

کتابخانه library tft lcd nokia1661 1616 c1 نوکیا حرفه ای تی اف تی ال سی دی .

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت چهارم : توابع ارسال و دریافت)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 

با سلام .

توی این قسمت توابع مربوط به ارسال و دریافت رو توضیح میدم .

تابع spi_fast_communication_byte( uint8_t  data);

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

تابع_spi_fast_transmit_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این برای ارسال آرایه یا رشته استفاده میشود . data همان آرایه یا رشته است . و متغیر دوم یک کامند است که تعیین میکند تابع در مود ارسال رشته یا آرایه قرار بگیرد .ودر عین حال طول آرایه ارسالی را مشخص میکند . اگر بیت هشتم cmd_nbyte  عدد 0 باشد تابع در وضعیت ارسال آرایه قرار میگیرد و هفت بیت بعدی تعداد عناصر آرایه است که حداکثر میتواند 127 باشد .اما اگر اگر بیت هشتم cmd_nbyte  عدد 1 باشد ، تابع در وضعیت ارسال رشته قرار میگیرد و بقیه بیتها اندازه رشته را مشخص میکند که حداکثر میتواند 127 باشد . تفاوتی که حالت رشته با حالت آرایه دارد در این است که هرگاه تابع به کاراکتر '0\' برسد ارسال متوقف میشود حتی اگر تعداد کاراکترهای ارسال شده کمتر از مقدار مشخص شده درcmd_nbyte باشد . و اگر طول رشته بیشتر از مقداری باشد که در cmd_nbyte مشخص شده است . تمام رشته به طور کامل ارسال نخواهد شد. بنابر این برای حالت رشته بهتر است طول را حداکثر یعنی  127 در نظر بگیرید . چون تنظیمات cmd_nbyte در عمل کمی مشکل است . پیکر بندی های لازم برای ارسال رشته یا آرایه را به صورت ماکروهای زیر  در spi.h تعریف کردم .

spi_fast_transmit_array_nbyte( data,nbyte)

spi_fast_transmit_string( buff)

از اسم این ماکروها کاملا مشخص است که چه کاری را انجام میدهند و لی به خاطر داشته باشید که در ماکروی دوم طول رشته نباید از 127 بیشتر باشد .

ضمنا این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که ارسال شده اند.

تابع

_spi_fast_recive_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این تابع برای دریافت رشته یا آرایه استفاده میشود . وقوانین مربوط به تنظیم کامند ، همانند تابع قبل است . این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که دریافت شده اند. برای راحتی کار تنظیمات لازم برای دریافت رشته یا آرایه به صورت ماکرو در فایل  spi.h قرار دادم.

ماکروها به شرح زیر هستند

spi_fast_recive_array_nbyte( data,nbyte) ;   
 spi_fast_recive_string( buff);

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

و در مورد ماکرو مربوط به آرایه لطفا دقت کنید طول آرایه data  از طول رشته ای که باید دریافت کنه بیشتر باشه .

کلیه توابع بالا هم در نسخه کم حجم و هم در نسخه کامل وجود دارد البته عملکردش بسته به حجم  نسخه کمی متفاوت است ، در نسخه کم حجم سرعت بالاتری داردولی  نسبت به تنظیمات حساس است به طور مثال اگر وقفه انتقال را فعال کرده باشید و در حین اجرای برنامه وقفه را خاموش کنید این تابع دیگر کار نخواهد کرد . و در نسخه کامل سرعت کمتر است ولی نسبت به تنظیم وقفه انعطاف دارد به طوری که حتی در حین اجرا ی برنامه وضعیت وقف را تغییر دهید توابع به خوبی کار خواند کرد.

توضیحات مربوط به توابع ارسال  دریافت به پایان رسید حال شما با توجه به فایل مثالی که همراه کتابخانه قرار دادم میتونید تنظیمات اولیه و ارسال و دریافت رو انجام بدید. در قسمت های بعدی در مورد توابع مربوط به تنظیمات spi  که البته فقط در نسخه کامل وجود دارد توضیح خواهم داد .

و در آخر لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 حق مالکیت معنوی : محفوظ است . انتشار با ذکر منبع بلا مانع است .

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت سوم: شروع کار با کتابخانه)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

 

با سلام مجدد به تمام خوانندگان .

 

در قسمت قبل(اینجا ) در مورد فایلهای کتابخانه توضیح دادم  و ماکرو های مهمترین فایل که spi_conf.h هست رو معرفی کردم و نقشش رو توضیح دادم .

بعد از اینکه تنظیمات رو در فایل spi_conf.h انجام دادید . دستور spi_init()  رو اجرا کنید ( برای راحتی کار و رعایت حروف کوچک و بزرگ پیشنهاد میکنم که نام توابع رو از spi.h کپی پیست کنید ) .

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

تویحات تکمیلی در مورد spi_init() :

این تابع در واقع یک ماکرو در لایه 5هست که در فایل spi.h ( کلا ماکروها داخل فایل هدر قرار دارند )که اگر به تعریف اون  نگاه کنید میبینید که باز یک ماکرو به اسم   

_spi_init()

که یک تعداد پارامتر داره و در لایه 4 قرار دارد . این ماکرو یی هست که برای پیکر بندی یک تابع ( این یکی دیگه واقعا تابع هست ) به اسم :

__spi_init( cmd)

 تعریف شده و این تابعی هست که spi  رو اینیشیال میکنه منتها برای تنظیماتش یک کامند 8 بیتی در نظر گرفتم . و ماکروی  _spi_init()   که تعدادی پارامتر داره کار سازماندهی کامند رو بر اساس تنظیمات مورد نظر انجام میده .

در نسخه کم حجم از ماکروی

_spi_init()

میتونید برای تغیر تنظیمات spi  استفاده کنید . که البته تنظیمات رو که میخواهید اعمال  کنید باید در  پارامترهای ورودی ماکرو قرار بدید .

تابع spi_deinit() :

این تابع کلا spi رو از کار میندازه و رجیسترها رو به مقدار پیش فرض بر میگردونه . قبل از اینیشیال مجدد میتونید با این تابع spi  را به حالت پیشفرض بر گردونید .

خب تا اینجا مرحله راه اندازی spi  به پایان رسید .

در قسمت بعدی توابع  ارسال و دریافت رو معرفی میکنم .

لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

 

 

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

با سلام مجدد.

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

 

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

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

spi.h  spi.c ,  spi_conf.h  ,spi_define_name.h , spi_typedef.h , bit.h

فایل bit.h  شامل ماکروهایی برای دستکاری رجیسترها به صورت بیتی هست که در اغلب کدهایی که من مینویسم این فایل دیده میشه .

فایل  spi .h که در اون فابلهای لازم پیوست و الگوی توابع تعریف شده است.

فایل spi.c تعریف بدنه توابع هست .

فایل spi_typedef.h مربوط به تعریف انواع داده هایی هست که کتابخانه در حالت نسخه کامل (در ادامه ماجرای نسخه کامل رو توضیح میدم )از اونها استفاده میکنه .

فایل  spi_define_name.h   که از فایلهای مهم کتابخانه هست و شامل اسامی هست که شما  برای پیکر بندی واحد spi به اونها نیاز دارید.

و اما مهمترین فایل برای کاربران کتابخانه  که برای تنظیم spi  باید اون رو تغیر بدید فایل spi_conf.h 

 هست ، که پیکربندی spi  در اون فایل تعیین میشه . با نگاهی به محتویات این فایل مطالب زیر رو در اون میبینید :

#define     SPI_VERSION_VOLUME                SPI_full_volume_version

#define     SPI_MASTER_SLAVE_SELECT           SPI_Master_Mode  

#define     SPI_INTERRUPT                     SPI_Enable  

#define     SPI_DATA_ORDER                    SPI_Msb_First

#define     SPI_MODE                          SPI_Mode_0 //SPI_Sample_Rising_Setup_Falling  

#define     SPI_CLOCK                         SPI_fosc_128//  fosc/128   

/* this just for master mode */
#define     SPI_SS_DIRECTION                  SPI_Ss_Output


//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

 

اولین ماکرو SPI_VERSION_VOLUME    ماکروی مهمی هست . مقادیری که میتونید برای این ماکرو تعیین کنید در فایل  spi_define_name.h  تعیین شده و به صورت زیر هست .

//********  version volume  names   *****
#define     SPI_full_volume_version        1U     
#define     SPI_low_volume_version        0U

 مقدارSPI_full_volume_version  :

این مقدار کتابخانه در حالت نسخه کامل قرار خواهد داد .

مزیت کتابخانه دراین حالت اینه که میتوان تنظیمات spi( فرکانس پالس کلاک ، مد کاری ، حالت مستر و اسلیو و غیره ...) را در حین اجرای برنامه و بعد از تنظیمات اولیه ، بوسیله توابع کتابخانه ای تغییر داد. در این حالت کتابخانه  ، تقریبا کاری نیست که شما بخواهید انجام بدید و نتونید .

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

 

مقدار SPI_low_volume_version :

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

ماکروی SPI_MASTER_SLAVE_SELECT  که مربوط به انتخاب حالت مستر و اسلیو هست .و شامل انتخابهای زیر است  :

//********   SPI_MODE   name   *****

#define     SPI_Master_Mode    1U     
#define     SPI_Slave_Mode     0U

ماکروی SPI_INTERRUPT مربوط به استفاده از وقفه است  .

ماکروی SPI_MODE :

مربوط به  مد کار spi  هست که تعیین میکنه  نمونه گیری در کدام لبه پالس ساعت و تغیر داده در کدام لبه انجام بشه . و 4 حالت داره که من برای برای تشخیص آسون آونها رو به صورت کامنت در قسمت مربوطه در فایل spi_define_name.h قرار دادم که در تشخیص کمک میکنه .

ماکروی SPI_CLOCK :

که مربوط به فرکانس پالس کلاک spi هست , در حالت مستر تاثیر گذار هست .

ماکروی SPI_SS_DIRECTION  :

که مربوط به تعیین جهت پایه ss  در حالت مستر هست که هر کدام از حالتهای ورودی و خروجی  یک قابلیتی داره اما در حالت  اسلیو تاثیر گذار نیست ولی برای امنیت سخت افزار اون رو ورودی کنید .( اگر این پایه خروجی باشه و شما spi اسلیو رو خاموش کنید پایه به حالت خروجی در میاد که در صورتی که پایه ss مربوط به spi مستر خروجی باشه و ارزش های متفاوتی داشه باشن به دلیل امپدانس کم پورت در حالت خروجی ممکنه جریان زیادی از پورتها عبور کنه .)

ماکروهای

//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

مربوط به تعیین تعیین پایه های spi هستن ( و تا اونجا که من بررسی کردم برای میکروهای atmega8-16-32 یکسان هست ) فقط توجه داشته باشید که اون ماکروهایی که در اونها عبارت pin هست مربوط به شماره پایه های مربوطه ست .

تا اینجا توضیح در مورد فایلها به پایان رسید .( ادامه دارد )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

کتابخانه spi برایavr به زبان C در (winavr (GCC ( قسمت اول : معرفی)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

(این کتابخانه در تاریخ 1398/2/1 ساعت 16 به روز شده است .لطفا  فایل بروز شده را از آدرس موجود در متن دانلود کنید)

لینک دانلود:از اینجا دانلود کنید

با سلام .

این کتابخانه spi رو برای میکروهای avr با نرم افزار winavr (کمپایلرgcc) وبه زبان C نوشتم . چون کمپایلرش gcc هست روی آردوینو و atmel studio هم کار میکنه .و طوری  نوشتم که بشه از تمام قابلیتهای spi میکرو ، با استفاده از توابع  استفاده کرد .

این کتابخانه قابلیت این رو داره در حین کار با استفاده از توابع ، تنظیمات واحد spi رو تغییر داد مثلا کلاک ، مد کاری ، حالت master یا slave  و همینطور جهت پین SS برای حالت مستر رو تغیر داد . در این کتابخانه قابلیتی گنجاندم  که در جای دیگه ای ندیم و اون هم اینه که شما میتونید حجم کتابخانه رو کنترل کنید .

فعلا این رو علی الحساب داشته باشید تا سر فرصت روش استفاده رو توضیح بدم .( البته اگه خودتون کدها رو نگاه کنید متوجه میشید از کدام توابع باید استفاده بشه ...اسمها واضحه ) این هم لینک دانلود فایهای کتابخانه و شماتیک از گیتهاب. از اینجا دانلود کنید . و اگر در حین اجرای برنامه مستر و اسلیو بودن spi رو تغیر میدید به دلیل اینکه جهت پایه عوض میشه  پیشنهاد میکنم از شماتیک زیر استفاده کنید . البته فقط پیشنهاده .... اگر دقت کنید که  spi ها در یک زمان   در حالت master  نباشند ، نیازی به استفاده از شماتیک نیست .

 

مقاومت ها را بین 1.8 تا 2.2 کیلو اهم انتخاب کنید.

این کتابخانه رایگان نیست ولی لطفا همانطور که در قسمت معرفی وبلاگ گفتم عمل کنید .

بنده را از نظراتتان به صورت کامنت بهره مند سازید

با تشکر.

ادامه دارد.........

پست بعدی :  راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

حق مالکیت : محفوظ است . لطفا کپی نکنید لینک بدید.

کتابخانه 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 و پینهای میکرو از مقاومت استفاده نمایید .

شماتیک lcd کاراکتری stm32.jpg

دیودهای زنر 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

 
  BLOGFA.COM