نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

پروژه راه اندازی کیپد با میکروکنترلر lpc1768

به نام خدا : تو این مطلب، از سری مطالب پروژه آرم میخوام به راه اندازی کیپد با میکروکنترلر آرم lpc1768 بپردازم، برا این کار من یه کتابخونه نوشتم برا کیپد و یه کتابخونه هم نوشتم برا کار با GPIO ها، که دسترسی به پایه های میکرو آرم مون رو عین آردوینو ساده کرده تقریبا – من حتی اسم توابعش رو هم مثل آردوینو نوشتم ^_^ در این حد، بحث کیپد هم چیز خاصی نداره، همش دوتا تابع داره ^_^ ( پروژه راه اندازی کیپد با میکروکنترلر lpc1768 )
پروژه راه اندازی کیپد با میکروکنترلر lpc1768

پروژه راه اندازی کیپد با میکروکنترلر lpc1768


شماتیک پروژه : 
ترتیب پایه های کیپد فلت
به توجه به شکل بالا که ترتیب پایه ها در کیپد فلت رو نشون داده، در زیر شماتیک پروژه رو بر مبنای عکس بالا توضیح میدم :

D به P1.25
C به P1.24
B به P1.23
A به P1.22
1 به P1.21
2 به P1.26
3 به P1.19
توجه 1 : در پروژه این مطلب که من براتون گزاشتم، رو حالت مقاومت داخلی تنظیم کردم کیپد رو، تا شماتیک ساده تر بشه، شما اگه خواستید از مقاومت خارجی استفاده کنید، 3 تا مقاومت 10 کیلو بردارید و به پایه های ورودی( 3 تا پایه سمت راست کیپد فلت ) وصل کنید و سر دیگه تمام مقاومت ها رو به GND وصل کنید و بعد تو پروزه برید سراغ تابع keypad_init و اون YES پارامتر آخری رو NO کنید.
توجه 2 : ممکنه بعضی پایه ها برا بحث کیپد مناسب نباشن و مثلا همین پایه P1.18، اگه شماتیک هدربرد ECA رو بببیند، متوجه میشید چرا نمیشه ازش استفاده کرد؛ شماتیک هدر برد LPC1768 شرکت ECA رو از زیر میتونید دانلود کنید :

 
کد پروژه : میبینید چقدر کم هستش کدش، چون کارم رو تابع تابع کردم، کتابخونه نوشتم، میبینید پروژه چقدر خلوته، پیدا کردن مشکلات هم ساده تره تا تو بعضی پروژه هایی که فیل هم تو اون پروژه گم میشه یهو میبینی 5 هزار خط تو برنامه اصلی هستش O_o البته خودم قبلا از این کارا کردما ^_^ ولی خب گزاشتیم کنار، چون حقیقتا وقتی پروژه رو بروت یکم شلوغ بشه، آدم گیج میشه و عیب یابی هم یکم سخت میشه.

 
عکس پروژه : در اول مطلب قرارش دادم ^_^
 
فیلم پروژه : https://www.aparat.com/v/Ivy07

 

 

آموزش کار با کتابخانه کیپد میکروکنترلر LPC1768

این کتابخونه ای که براتون نوشتم، 2 تا همش تابع داره :

keypad_init : راه اندازی کیپد، ورودی های زیر رو بهش باید بدیم.

  • PinOutPut : یه آرایه ای از نوع unsigned char که نام پایه های خروجی ( 4 تا پایه سمت چپ کیپد فلت ) کیپد که تعیین میکنه این پایه ها به کدوم پایه های میکروکنترلر ما وصل هستش.
  • PinInput : مثل مورد بالا هستش فقط برا پایه های ورودی ( سه تا پایه سمت راست ) هستش.
  • KeypadDataSend : یه آرایه ای از نام هر دکمه کیپدمون، مثلا فلان دکمه فشرده شد، تابع keypad_scan چه متنی رو به ما بده و ما هم مستقیما اونو نمایش بدیم؟ مثلا دکمه * کلیک شد، به جای این که 1و2و … بده، میاد خود کاراکتر * رو به ما میده و ما هم کارمون خیلی ساده میشه و مسقیم، خروجی این تابع رو میدیم به تابع نمایش اطلاعات در پورت سریال.
  • useInternalResistor : تعیین این که میخواین از مقاومت داخلی استفاده کنید یا مقاومت خارجی، اگه میخواین از مقاومت داخلی استفاده کنید باید به جای این مورد YES قرار بدیم و در غیر این صورت باید NO قرار بدیم.

keypad_scan : خب این تابع برا بررسی این هستش که دکمه ای فشرده شده یا نه، اگه دکمه ای فشرده نشده باشه عدد 0 رو برمیگردونه، لذا برا استفاده از این تابع، و تشخسص این که دکمه ای فشرده شده یا نه، بهتره از کدی، شبیه کد زیر استفاده کنیم ( البته میتونیم همین کد زیر رو هم ارتقا بدیم و حرفه ای تر کنیم که فعلا حسش نیست ^_^ ) :

 

آموزش کار با کتابخانه GPIO میکروکنترلر LPC1768

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

توجه مهم : در توابع زیر نیازه که پایه مدنظرمون رو به تابع بفهمونیم، برا این کار یه سری دیفاین تو کتابخونه گزاشتم، مثلا بخواین از پورت 0 پایه 2 استفاده کنید باید از کد P0_2 استفاده کنید؛ یا از پورت 2 پایه 13 استفاده کنید باید کد P2_13 رو استفاده کنید.
 
digitalRead : برا خوندن مقدار پایه ای که ورودی هستش، این تابع یه ورودی همش داره و اونم برا تعیین پایه ای هستش که قراره مقدارش رو بخونیم ( مثلا بخوایم مقدار پورت0 پایه 14 رو بخونیم باید دستور P0_14 رو به این تابع بدیم، البته شرط استفاده از این تابع اینه که، پایه فوق ورودی تنظیم شده باشه، که در حالت پیشفرض، تمام پایه های میکروکنترلر، ورودی هستن، مگه این که تغییرشون بدید )
 
digitalWrite : اگه پایه ای خروجی تنظیم شده باشه، به کمک این تابع میتونیم مقدار پایه رو تعیین کنید که سطح منطقی 0 باشه یا 1 ( یا همون LOW باشه یا HIGH )؛ ورودی های این تابع به صورت زیر هستش :
pin : تعیین پایه ای که میخواین مقدارش رو تغییر بدید ( مثلا برا پایه پورت 3 پین 2 باید کد P3_2 رو به این پارامتر بدید )
status : تعیین سطح منطقی پایه انتخاب شده، 0 یا LOW قرار بدیم مقدار پایه 0ولت میشه و 1 یا HIGH قرار بدیم، مقدار پایه 3.3 ولت میشه.
 
pinMode : برا تعیین ورودی و یا خروجی بودن پایه ها استفاده میشه؛ پارامترهای این تابع به صورت زیر هستش :
pin : پایه ای که میخوایم ورودی/خروجی بودنش رو تعیین کنید.
inputResistor : تعیین نوع مقاومت ورودی، اگه میخواین پایه رو خروجی تعریف کنید بهتره مقدار Neither قرار بدین و اگه پایه رو میخواین ورودی تعریف کنید، هر کدوم از مقادیر PullUp یا Repeater یا Neither یا PullDown رو میتونید استفاده کنید بسته به نیازتون.
status : تعیین این که پایه ورودی باشه یا خروجی، اگه میخواین ورودی باشه باید مقدار 0 یا INPUT به این پارامتر بدید و اگه میخواین خروجی باشه باید مقدار 1 یا OUTPUT رو به این پارامتر بدید.

 
خب امیدوارم این مطلب براتون مفید بوده باشه، ما رو از دعاتون بی نصیب نزارید، برا سلامتی رهبر انقلاب امام خامنه ای و مسئولینی که خدمت گزار این ملت هستن، 3 تا صلوات بفرستید.
 
یه خرید ساده و عادی از نوع آمریکاییش : 
فیلم زیر رو هم خواستید ببیند، خودشونو دارن چطوری میکشن – اون کسایی که هی به ملت ایران توهیج میکنن و شبا خواب USA !!! میبینن، این فیلم رو هم ببینن ظرر نداره شاید هم داشته باشه الله اعلم ^_^
http://www.aparat.com/v/BtjgR

تا مطلب بعد، اگه زنده بودیم، یا علی.
 
===================================
بروزرسانی در 5 دی 95 : اضافه شدن تابع زیر :

به کمک این تابع، میتونیم عدد چند رقمی دریافت کنیم، پارامتر های این تابع به صورت زیر هستش :
MaxTime : حداکثر زمانی که بین دریافت دو رقم میتونیم صبر کنیم، یعنی اگه کاربر مثلا عدد 3 رو وارد کرد و بعد 2ثانیه عددی وارد نکرد، این تابع به ما عدد دو رو میده ولی اگه قبل 2 ثانیه عددی وارد کرد، مثلا 5 وارد کرد، تابع به ما عدد  35 رو میده.
MaxNumber : حداکثر تعداد ارقامی که باید دریافت شود، در حداقل تعداد ارقام دریافتی محدودیت نزاشتم ولی در حداکثر تعداد ارقام محدودیت وجود داره، مثلا حداکثر تعداد ارقام رو 6 تا تعیین میکنیم، اگه کاربر با رعایت محدودیت زمانی تعیین شده، 6 تا رقم به کمک کیپد وارد کنه، تابع دیگه بهش اجازه نمیده که عدد جدیدی رو وارد کنه.
توجه : منظور از محدودیت زمانی این نیستش که مثلا هر 6 تا رقم رو در 2ثانیه باید وارد کنه، بلکه این هستش که رقم اول رو که وارد کرد، 2 ثانیه وقت داره رقم دوم رو وارد کنه و بعد که رقم دوم رو وارد کرد، 2 ثانیه وقت داره که رقم سوم رو وارد کنه و…
پروژه این تابع : برا دیدن پروژه این تابع به مطلب زیر میتونید مراجعه کنید ( در ضمن این تابع به کمک واحد جانبی RIT، نوشته شده است ) : آموزش پروژه محور آرم lpc1768 مبحث rit

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو گوگل میفرماید : إِنَّ اللّه مَعَ السارِچین ( خداوند با سرچ کنندگان است )
ارسال دیدگاه
14

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    حامد

    سلام
    ته کیپد من (جایی که به بردبورد متصل میشه)مثل کیپد شما نیست یعنی سوکتی برای فرورفتن تو بردبورد نداره
    چطور این مشکلو حل کنم؟

    • مهدی دمیرچیلو

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

      مهدی دمیرچیلو

      سلام.عکس بده.یعنی چی که سوکتی نداره.اگه پدهاشو داره که یه پین هدر روش لحیم میکنی.

      • Avatar

        مهمان

        حامد

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

        • مهدی دمیرچیلو

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

          مهدی دمیرچیلو

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

  2. Avatar

    مهمان

    سعید

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

    • مهدی دمیرچیلو

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

      مهدی دمیرچیلو

      سلام-متوجه نشدم.

      • Avatar

        مهمان

        سعید

        سلام عزیز خسته نباشی
        این پروژه رو اجرا کردم ولی وقتی دکمه های کی پد رو میزنم بجای ارسال اعداد علامت های گنگ و بی معنی مثه ؟؟ یا ! رو میفرسته مشکل از کجاست؟؟؟

        • Avatar

          مهمان

          مهدی رضاییان

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

  3. Avatar

    مهمان

    fer

    واحد زمان تو کتابخونه آپدیت شده کی پد چیه داداشم،میکرو ثانیست؟

    • مهدی دمرچیلو

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

      مهدی دمرچیلو

      تو تابع getNumberFromKeypad واحد زمان میکرو ثانیه هستش.

  4. Avatar

    مهمان

    fer

    داداش اینو برا کی پد ۴*۴ و بیشتر هم میشه استفاده کرد دیگه ،درسته؟

    • مهدی دمرچیلو

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

      مهدی دمرچیلو

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

  5. Avatar

    مهمان

    علی

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

    • مهدی دمرچیلو

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

      مهدی دمرچیلو

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