نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی زمانی

راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2

385

سلام وقتتون بخیر : با یکی دیگه از سری مطالب میکروکنترلر stm32 در خدمت شما هستم؛ بریم سر سراغ ادامه ی کتابخونه؛ اول دوتا فایل برای کتابخونه میسازیم یکی h. و یکی هم c. ؛ دوم باید یکسری تابع بنویسیم برای اجرای تنظیملت یکیش اینه که پایه های LCD رو تعریف کنیم ( راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2 )؛ مطلب جلسه قبل : راه اندازی نمایشگر nokia 5110 با stm32 جلسه 1
راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2

راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2


برای راحتی کار، استراکچر براش میسازیم که پورت ها و پینها داخلش ذخیره بشن اینجوری :

حالا ازش استفاده میکنیم و استراکچر دوم که تعریف پروت ها هست رو مینویسیم :

پس توی استراکچر دوم ما برای پایه مثلا ریست هم پورت رو داریم و هم پین رو …. پایه های میکرو که RST ,CS ,DC ,DIN ,SCK باشه رو اینجا تعریف کردیم ولیکن اون دوتا پارامتر پایانی بمونه بعدا توضیح میدم راحبشون؛ حالا باید پایه ها رو کانفیگ کنیم و خروجی تعریف کنیم و با چنتا تابع بتونیم پین به پینشو کنترل کنیم؛ برای کنترل پین پین LCD این دیفاین ها رو مینویسیم :

الان اینجوری شد که هر جا بخوایم مثلا پایه CS ال سی دی رو 0 کنیم کافیه بنویسیم :

و هر کجا بخوایم پایه CS رو 1 کنیم اینو مینویسیم :

این روند برای تمام پایه های ال سی دی هست و از اینجا به بعد تو کتابخونه پایه ها رو با این کنترل میکنیم؛ این دیفاین ها رو توی فایل h. مینویسیم و استراکچر هایی که بالا تعریف شد هم توی فایل h. مینویسیم؛ حالا لازمه چندتا لایبرری از STM32 هم وارد کنیم داخل فایل h. ؛ اینجوری مینویسم :

خب چند دیفاین دیگه هم لازم داریم برای ال سی دی مثلا طول و عرض LCD رو دیفاین میکنیم :

یک تابع هم مینویسیم برای اتصال کلاک به پورت هایی که LCD بهشون وصل شده؛ این موضوع بر میگرده به آموزش STM32 که توی یکی از جلسه ها توضیح دادم چی به چیه؛ به این صورت عمل میکنیم که توی تابع مقدار پورت LCD رو میگیریم و با تابع :

کلاک میکرو رو به اون پورت اتصال میدیم؛ این تابع یک ورودی پوینتر داره؛ تابع رو اینجوری منویسم :

میاد بررسی میکنه که ورودی با کدوم شرط برابر هست بعد همون شرط رو اجرا میکنه که توی زیر مجموعه اون شرط کلاک رو به همون پورت شرط متصل کردیم؛ چندتا پورت هم بالا تر گذاشتیم برای میکرو های بزرگتر؛ خب دیگه همه زمینه سازی ها شد که یک تابع بنویسیم که ال سی دی رو پیکر بندی یا ایشنال کنه (یعنی کلاک پورت ها رو وصل کنه و پورت هارو خروجی کنه و کلا تنظیملتی که ال سی دی برای شروع کار لازم داره رو بهش بده)؛ من اسم تابع ایشنال LCD رو میزارم :

خب توی این تابع چی مینویسیم؟ این بر میگرده به اموزش های STM32 که میایم پایه ها رو خروجی میکنیم و کلاک پایه ها رو وصل میکنیم (البته برای شروع اینه بعدا تغیرش میدیم )؛ خب :
1) استراکچر GPIO ها رو اول تابع لود میکنیم :

2) با تابعی که برای اتصال کلاک به پورت ها نوشته بودیم کلاک رو به تک تک پورت های ال سی دی وصل میکنیم (یعنی اگه کل پایه های ال سی دی به یک پورت وصل هست فقط کلاک همون پورت رو وصل میکنیم ولی اگه هر کدم از پایه ها به صورت پراکنده روی یک پورت بود باید کلاک رو به تمام پورت ها وصل کنیم )

پس ما اینجوری مینویسم.
3) حالا باید پایه ها رو خروجی کنیم برای اینکار باید مقدار استراکچر GPIO رو تغیر بدیم و داخل استراکچر بریزیم ( توضیح بیشتر در آموزش STM32 )
خب برای خروی کردن پورت ها اینجوری مینویسیم :

اول که مد خروجی رو با

تعیین میکنیم که روی

تنظیم شده حالا میایم سرعت GPIO رو با

تنظیم میکنیم که این رو هم روی 50 مگاهرتز تنظیم میکنیم

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

حالا میریم سراغ یکی پارامتر های بالا که توی استراکچر بود یعنی :

ببنید ما توی کتابخونه لازم داریم تابع دیلا داشته باشیم برای اینکه دیلا توی برنامه وقتی که کتابخونه رو به برنامه اضافه کردید دوتا نشه و دقیق تر بودن دیلای ها و کم شدن حجم برنامه میایم تابعی رو در قالب استراکچر از کابر میگیریم که به عنوان تابع دیلای از اون توی برنامش نوشته شده؛ خب توضیحات کافیه حالا لازمه LCD رو ریست کنیم تا اگه از قبل چیزی داخلش بوده بپره؛ این وسط سایر پایه ها رو هم در وضعیت 1 قرار میدیم؛ پس پایه Res رو برای ریست LCD 0 میکنیم و با استفاده از تابعی که توی استراکچر از کابر گرفته بودیم یکم تاخیر ایجاد میکنیم و ال سی دی رو ریست در میاریم :

به همین سادگی  laugh طبق توضیحات گذشته میدونیم الگوریتم کار این LCD چجوریه ولی حالا میخوایم بهش دیتا بدیم؛ برای دیتا دادن به ال سی دی ما 3 تا پایه داریم
نکته : دیتا دادن به LCD دو نمونه هست، یکیش کامند یکی هم دیتا برای نمایش.
CS : که برای مشخص کردن کامند بودن یا دیتا بودن دیتایی که الان وارد ال سی دی شده استفاده میشه
SDA : پایه دیتا برایI2C
SCL : پایه کلاک برای I2C
حالا باید یک تابع بنویسیم که بیاد دیتایی که بهش میدیم رو بفرسته رو ال سی دی من اسمشو اینجوری میزارم :

یک پونتر و یک دیتا و یک مد برای دیتاهای ورودی تابع در نظر میگیریم

  1. پوینتر وقتی کاربرد داره که بخوایم چند ال سی دی به یک میکرو بزنیم
  2. دیتا هم 8 بیت دیتاییکه میفرسته
  3. مد هم مشخص کننده نوع دیتا هست که دیتا هست یا کامند

خب چجوری بفهمیمی که چجوری دیتا بفرستیم؟ اینجاشو با دقت بخونید؛ دیتاشیت صفحه 12 گفته که :
راه اندازی نمایشگر nokia 5110 با stm32 جلسه 2
1) برای دیتا دادن به ال سی دی اول پایه CS رو 0 کنید ( CS مخفف chip select هستش و با 0 کردن این پایه کنترلر ال سی دی اماده دریافت دیتا از کابر میشه )
2) تعیین کنید که این دیتایی ارسال میکنید دیتا هست یا کامند (اگر دیتا بود خب میاد روی ال سی دی نمایش داده میشه ولیکن اگر کامند بود به عنوان دستوری برای کنترلر شناخته میشه (اگر پایه DC مقدار high یا 1 داشته باشد دیتای ورودی به عنوان دیتایی برای نمایش یه کنترلر فرستاده میشود و اگر مقدار low یا 0 داشته باشد به عنوان کامند یا دستوری به کنترلر ال سی دی ) پس ما دوتا دیفاین به اول کتابخونه برای این موضوع اضافه میکنیم :

خب حالا یک شرط میزاریم که اگه MOD دیتای ورودی به تابع 1 بود پایه DC رو high کن و اگر دیتای ورودی کامند یا 0 بود DC هم low بشه؛ پس مینویسیم :

نکته : بعد از اتمام 8 بیت دیتای ارسالی باید این پایه رو 0 کنیم.
حالا چون دیتا ها 8 بیتی ارسال میشه به ال سی دی پس یک فور لازم داریم تا دونه دونه بیت ها رو ارسال کنه؛ پس یک متغیر برای FOR تعریف میکنیم 8 بیتی هم باشه من اسمشو میزارم i :

حالا باید یک for بنویسیم که 8 بار تکرار بشه :

توی این فور اول برا یک شرط داریم که یک بیت از دیتای ورودی رو انتخاب میکنه و مقدارشو روی SDA میریزه :

حالا برای تکرار دوم باید بره سراغ بیت بعدی دیتا پس یکی شیفت میدیم دیتا رو :

خب حالا ما یک بیت از دیتا رو به ال سی دی فرستادیم ولی کلاک رو که SCL باشه برای این بیت به LCD ارسال نکردیم؛ پس SCL رو 0 و 1 میکنیم تا کلاک هم برای این بیت ارسال بشه :

خب با تکرار 8 بار برای این FOR 8 بیت دیتا و 8 کلاک به ال سی دی ارسال میشه؛ پس کل for میشه این :

خب موقع خروج از تابع هم CS رو 1 میکنیم که چیپ ال سی دی از سلکت در بیاد :

پس کل تابع اراسال دیتا به ال سی دی میشه :

خب دیگه قسمت سخت کار همین بود از اینجا به بعد سادس همش کار با همین تابعی هست که نوشیم؛ به امید داشتن ایرانی اباد تر bb لایق دونستید برای من هم دعا کنید  smile هزینه این اموزش ها هم نشر اون هست پس تا میتونید به دیگران برای یادگیری کمک کنید heart موفق باشید smile

sexpromo.ch

درباره : 
تعداد مطالب : 20 تا
مهدی زمانی هستم متنفر از کلیشه های تکراری پادگان انجام پروژه های التیوم و برنامه نویسی میکروکنترلر پذیرفته میشود تلگرام : @stm32f اینستاگرام:zamanimahdi77 ایمیل:timahdizamani@gmail.com
ارسال دیدگاه
15
نظرات این مطلب بسته شده است.
  1. مجید

    مهمان

    مجید

    سلام خیلی خوب بود همه را فهمیدم الا قسمت delay-fonction(10 یعنی قسمت dilay اگه امکانش هست یه قسمت کد کوچیک بزارین تا متوجه شم

    مشاهده پاسخ ها (1)
    • مهدی زمانی

      نویسنده این مطلب

      مهدی زمانی

      میتونید از سمپل هایی که تو اینترنت موجود هست با تایمر systic استفاده گنید

  2. زهرا

    مهمان

    زهرا

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

    مشاهده پاسخ ها (1)
    • مهدی زمانی

      نویسنده این مطلب

      مهدی زمانی

      هر پینی رو میتونید متصل کنید قابل تنظیم هست تو برنامه

  3. STM8S

    مهمان

    STM8S

    سلام
    تا همین جاش هم خیلی مفید بود
    خیلی ممنون

  4. علی

    مهمان

    علی

    good

  5. مهدی زمانی

    نویسنده این مطلب

    مهدی زمانی

    استقبالی از مطالب نمیشه ؟ ادامه بدم ؟ sad

    مشاهده پاسخ ها (5)
    • احمد

      مهمان

      احمد

      خیلی توقع نداشته باشید که به سرعت مطلبتون خونده بشه؛ مطلب شما از اون دسته مطلبایی هست که تصادفی توی جستجوی یک نفر پیدا میشه و به قول معروف دلش رو شاد میکنه و اینا good

    • علیرضا آهنی

      مهمان

      علیرضا آهنی

      چرا؟
      خیلی خوبه

    • محمد

      مهمان

      محمد

      سلام ، بله ادامه بدید،
      ما الکترونیکی نیستیم ولی الکترونیکی ها رو دوست داریم laugh
      نمیدونم چرا نظر دادن اینقدر سخته
      ولی یه پیشنهاد
      یه دکمه تشکری چیزی بزارید برای کسی که می خونه خیلی راحت تره نسبت به نظر دادن،البته این نظر من بود حالا خوبه یا که بد بود laugh

    • مسعود

      مهمان

      مسعود

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

      • مهدی زمانی

        نویسنده این مطلب

        مهدی زمانی

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

  6. محمد

    مهمان

    محمد

    نقل قول از مهدی دمرچیلو:
    خب بسم الله – بیا یاد بده.
    باشه سورس کدش رو میزارم.

  7. محمد

    مهمان

    محمد

    من ال سی دی نوکیا ۱۲۰۰ رو راه اندازی کردم که هم کم مصرف تر از ۵۱۱۰ هستش هم پیکسل های بیشتری داره.با stm32

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      مدیر سایت

      مهدی دمرچیلو

      خب بسم الله – بیا یاد بده.