نمونه برنامه های میکروکنترلر

نمونه برنامه

نمونه برنامه ی 01

University

در این برنامه یک LED روشن و خاموش می شود. در ابتدا پورت A خروجی شده و سپس هر 0.5 ثانیه یک بار خاموش و روشن می شود.

دانلود


نمونه برنامه ی 02

University

در این برنامه با مقدار دهی به رجیستر PORTA یک فلاشر 8 کانال ساخته شده است که به صورت اتوماتیک مد چشمک زدن آن تغییر می کند.

دانلود


نمونه برنامه ی 03

در این نمونه برنامه برای کاهش حجم نمونه برنامه ی 02 و کاهش تعداد خط های برنامه از حلقه ی for استفاده شده است. تو ضیحات برنامه با // شروع شده اند که برای راهنمایی نوشته شده اند. دستور << یعنی شیفت به راست و دستور >> یعنی شیفت به چپ عدد می باشد (یعنی به ترتیب تقسیم بر 2 و ضرب در 2 شدن عدد)

دانلود


نمونه برنامه ی 04

University

در این نمونه برنامه با فشار دادن کلید موجود LED روشن شده و با رها کردن کلید، LED خاموش می شود. برای تثبیت ولتاژ روی پایه ی PA1 از یک مقاومت Pull-Down استفاده شده است. ویژگی این برنامه این است که تا وقتی کلید را نگه داریم LED روشن می ماند. کلید مانند پدال چرخ خیاطی می ماند و می توان بجای LED یک موتور وصل کرد (در ادامه ی برنامه ها چگونگی اتصال موتور را ببینید).

دانلود


نمونه برنامه ی 05

در این برنامه وقتی کلید را می زنیم و رها می کنیم، LED روشن می شود و با دوباره فشردن و رها کردن کلید، LED خاموش می شود در صورتی که حلقه ی while حذف شود، با فشردن کلید، LED با سرعت بسیار زیادی تا حد 1/4 فرکانس میکروکنترلر روشن و خاموش می شود. تاخیر 50 میلی ثانیه ای داخل حلقه ی while جهت حذف لرزش های ناشی از فشردن شده کلید یا به اصطلاح debounce نوشته شده است.

دانلود


نمونه برنامه ی 06

University

در این برنامه که همان برنامه ی قبلی است، بجای LEDیک موتور وصل شده است. با فشردن کلید موتور روشن شده و می چرخد و با فشردن مجدد کلید موتور خاموش می شود. در صورتی که موتور آمپر بالایی لازم داشته باشد، بجای ترانزیستور BD139 باید درایور مناسب تری مانند L298 قرار داد که در مثال های بعدی گفته می شود.

دانلود


نمونه برنامه ی 07

University

در این برنامه هر 0.5 ثانیه یک بار متغیری زیاد می شود و روی lcd نمایش داده می شود. توابع مهم این برنامه عبارتند از:

;(lcd_init(16 جهت روشن کردن و مقدار دهی اولیه LCD

;()lcd_clear جهت پاک شدن LCD

;(lcd_puts(A جهت نمایش آرایه ی A که توسط تابع sprintf مقدار گرفته است.

دانلود


نمونه برنامه ی 08

University

در این برنامه با فشردن کلید متصل شده به پایه ی PA0 متغیر شمارنده زیاد شده و روی LCD نشان داده می شود و با فشردن کلید متصل شده به PA1 این شمارنده صفر می شود. عیب این برنامه این است که اگر کلید PA0 را نگه داریم، شمارنده به سرعت زیاد می شود. این عیب در برنامه ی 09 حل شده است.

دانلود


نمونه برنامه ی 09

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

دانلود


نمونه برنامه ی 10

University

در این برنامه سه متغیر به نام های s یعنی ثانیه، m یعنی دقیقه و h یعنی ساعت وجود دارند. در این برنامه در ابتدا متغیر s یک واحد افزایش می یابد اگر بیش از 59 شد، دقیقه اضافه می شود و s صفر می شود. اگر دقیقه بیش از 59 شود ساعت زیاد شده و m صفر می شود و اگر ساعت بیش از 23 شود s,m,h هرسه صفر می شوند و سپس با کمک تابع sprintf و lcd_puts مقدار این سه متغیر روش lcd نشان داده می شود و پس از تاخیر یک ثانیه ای مجددا ثانیه زیاد می شود.

این برنامه جهت ساخت ساعت بکار می رود. مشکل این برنامه در نمایش تک رقمی ساعت دقیقه و ثایه است که این مشکل در تمرین 11 حل شده است.

دانلود


نمونه برنامه ی 11

University

در این برنامه تمام خطوط برنامه شبیه برنامه ی قبلی است با این تفاوت که بجای کاراکتر u% در تابع sprintf از کاراکتر 02u% استفاده شده است. که به معنی نمایش دو رقمی عدد همراه با صفر است.

دانلود


نمونه برنامه ی 12

این برنامه شبیه برنامه ی قبلی می باشد با این تفاوت ک بجای اینکه ثانیه را در حلقه ی بی نهایت اضافه کنیم، داخل وقفه ی تایمر 0 اضافه کرده ایم. این تایمر طوری تنظیم شده است که هر یک ثانیه یک بار چهار بار سر ریز شود و پس از سر ریز شدن تایمر در این مدت زمان شمارنده 4 می شود و در این حالت یک واحد به ثانیه اضافه می شود. در داخل حلقه ی بی نهایت فقط زمان روی lcd نشان داده می شود. در این برنامه فرکانس میکروکنترلر 1MHz فرض شده است و تقسیم فرکانسی تایمر 0 برابر 1024 می باشد. محاسبات تعداد بار سر ریز شدن تایمر صفر و رجیستر TCNT0 در ابتدای برنامه نوشته شده است.

دانلود


نمونه برنامه ی 13

University

این برنامه مشابه برنامه ی 07 می باشد با این تفاوت که از تایمر صفر برای ایجاد یک ثانیه استفاده شده است. این تایمر در این برنامه تقسیم فرکانسی 256 دارد و فرکانس میکروکنترلر در این برنامه 8MHz در نظر گرفته شده است. در این حالت تایمر 123 بار سرریز می شود.

دانلود


نمونه برنامه ی 14

در این برنامه همانند برنامه ی 13 شمارنده ای زیاد می شود. فرق این برنامه این است که هر 200 میلی ثانیه یک بار شمارنده زیاد می شود. تقسیم فرکانسی تایمر 0 در این برنامه 64 است و فرکانس میکروکنترلر برابر 4MHz است. تایمر در این برنامه در مدت 200 میلی ثانیه 49 بار سرریز می شود.

دانلود


نمونه برنامه ی 15

در این برنامه همانند برنامه ی 13 شمارنده ای زیاد می شود. فرق این برنامه این است که هر 50 میلی ثانیه یک بار شمارنده زیاد می شود و نیز از تایمر 1 استفاده شده است. تقسیم فرکانسی تایمر 1در این برنامه 8 است و فرکانس میکروکنترلر برابر 8MHz است. تایمر در این برنامه در مدت 50 میلی ثانیه 1 بار سرریز می شود.

دانلود


نمونه برنامه ی 16

University

در این برنامه از تایمر صفر برای شمارش یک ثانیه و از تایمر 1 برای شمارش پالس های ورودی به پایه ی T1 استفاده شده است. هرگاه در مدت یک ثانیه تعداد پالس های ورودی را شمارش نماییم، فرکانس متر ساخته می شود. عیب این فرکانس متر این است که فقط تا فرکانس 65KHz را می تواند اندازه گیری نماید. در برنامه ی 17 این عیب رفع شده است.

دانلود


نمونه برنامه ی 17

University

این برنامه شبیه برنامه ی قبلی است با این تفاوت که این برنامه می تواند تا فرکانس های ورودی تا فرکانس خود میکروکنترلر را اندازه بگیرد (در این برنامه حداکثر 1MHz و در حالت کلی 16MHz) برای حل مشکل برنامه ی قبلی از وقفه ی تایمر 1 استفاده شده است. وقتی تعداد پالس های ورودی بیش از 65 هزار پالس در مدت یک ثانیه شود، تایمر 1 که 16 بیتی است سر ریز می شود و وقفه ی آن رخ می دهد. در برنامه ی وقفه متغیری به نام ovf زیاد می شود و بعد از گذشت یک ثانیه که وقفه ی تایمر 0 رخ می دهد، متغیر ovf در 65 هزار ضرب شده و با مقدار شمارشی تایمر 1 جمع می شود که این حاصل برابر فرکانس ورودی است. به دلیل اینکه اعداد بیش از 65 هزار با u% قابل نمایش نیستند، از کاراکتر کنترلی 1.0f% استفاده شده است به این معنی که حداقل یک رقم صحیح و حداکثر صفر رقم اعشار روی LCD نمایش بیابد. f% می تواند یک عدد 32 بیتی اعشاری یا صحیح را روی LCD نشان دهد.

دانلود


نمونه برنامه ی 18

University

در این برنامه موج PWM تولید می شود که زمان Duty Cycle آن از 1 در صد تا 99 درصد تغییر می کند. در این برنامه در حلقه ی بی نهایت متغیر x هر 50 میلی ثانیه زیاد می شود و مقدار x در رجیستر OCR0 قرار می گیرد.

دانلود


نمونه برنامه ی 19

University

در این برنامه تایمر صفر در حالت CTC راه اندازی شده است. با تغییر مقدار رجیستر OCR0 از 0 تا 255 مقدار فرکانس خروجی کاهش پیدا می کند.

دانلود


نمونه برنامه ی 20

University

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

دانلود


نمونه برنامه ی 21

University

در این برنامه توسط ارتباط USART اعداد 0 تا 9 برای پورت سریال کامپیوتر ارسال می شوند. در اینجا از virtual terminal برنامه ی proteus استفاده شده است. در عمل می بایست از آی سی MAX232 استفاده شود که طریقه ی راه اندازی آن در صفحه ی اصلی سایت آمده است. لازم به ذکر است که پورت سریال کامپیوتر داده ها را به صورت کد اسکی نمایش می دهد لذا موقع ارسال کد اسکی اعداد 0 تا 9 یا همان 0x30 الی 0x39 در رجیستر UDR قرار می گیرند تا ارسال شوند. نرم افزار دریافت اطلاعات در کامپیوتر می تواند Hyper Terminal یا Terminal نرم افزار code vision AVR باشد.

دانلود


نمونه برنامه ی 22

University

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

دانلود


نمونه برنامه ی 23

University

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

دانلود


نمونه برنامه ی 24

University

در این برنامه دما از سنسور دمای LM35 توسط مبدل آنالوگ به دیجیتال یا همان ADC گرفته می شود و بر روی LCD نشان داده می شود.

دانلود


نمونه برنامه ی 25

University

در این برنامه از یک مقاومت LDR جهت اندازه گیری نور استفاده شده است. این مقاومت ها در نور زیاد در حدود 1K اهم و در تاریکی در حدود 1M اهم مقاومت دارند. در صورتی که نور از حد مشخصی کمتر شود (عدد بدست آمده از ADC بیش از 400 شود) رلهی خروجی که به لامپ ها وصل است روشن می شود. در صورتی که نور از حد معینی بیشتر شود (عدد ADC بیش از 375  شود. دلیل اختلاف 400 و 375 این است که یک مرز بین روشن و خاموش بودن در نظر گرفته شود تا نویز لامپ ها را خاموش و روشن ننماید)، مجددا رله خاموش می شود. عدد بدست آمده از ADC از طریق ارتباط UART برای میکروکنترلر دوم ارسال می شود و آن میکروکنترلر اطلاعات را نمایش می دهد.

دانلود


29 thoughts on “نمونه برنامه های میکروکنترلر

  1. متین says:

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

  2. علیرضا says:

    سلام ؛
    چجوری میشه فقط با دو دستور for ، ال ای دی اول یک بار چشمک بزنه و ال ای دی سوم سه بار و در نهایت ال ای دی اول شش بار چشمک بزنه .

  3. شایگان says:

    بی نظیرید ….همتا ندارید …ادم باورش نمیشه تو این زمونه همچین ادمایی هم هستن

  4. سارا says:

    برای درس آز ریز پردازنده پروژه زیر را انجام بدید:
    برنامه ای بنویسید که با اتصال به lcd و یک کلید (قطع/وصل) به میکرو در صورت وصل بودن کلید، جمله ای دلخواه را از راست به چپ روی سطر اول lcd نمایش داده و حرکت دهد و اگر کلید قطع شد جهت حرکت از راست به چپ شود.
    میشه برام حل کنید ممونم

  5. محمدرضا says:

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

  6. مایکل says:

    سلام به نظر من مطالبی که تو سایت گذاشتین تو صنعت اصلا به درد نمیخوره و به درد دوستانی میخوره که هیچی بلد نیستن

    • محمد رضا بیگی says:

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

  7. مجید says:

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

  8. امیر says:

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

  9. علی says:

    سلام ممنون از  این برنامه ها 

    فرمتش چیه؟

    ممنون میشم اگه جواب بدین

  10. سید حسین زینتی says:

    کارتان بسیار قشنگ بود و جای تقدیر دارد

    ای کاش سورس برنامه را هم قرار می دادید

    پروژه 8 و 9 را می خواهم اما متسفانه باز نمیکند و با خظا مواجه می شود

    اگر سورس آن در بسکام را حتی اگر شده در فایل نوت پد (txt) بریزید ممنون می شود

    • محمد رضا بیگی says:

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

      • احسان says:

        سلام چجوری میشه با یک کلید فشاری چند پایه رو کنترل کنیم به صورتی که هر بار فشار بدیم یه پایه فعال بشه و با فشار بعدی پایه بعد فعال بشه
        مثلا زمانی که 3 تا پایه خروجی دارید با یکبار فشار پایه 0 فعال بشه با 2 بار فشار پایه 2 و با 3 بار فشار پایه 3 و با 4 بار فشار جریان قطع
        بشه

        • admin says:

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

  11. میلاد says:

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

  12. جاوید says:

    ذکات علم یاد دادن است.خسته نباشی و ممنون بابت آموزش هات

  13. علی بهروز says:

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

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

    علی بهروز کار آموز دوره تابستان 93

  14. جواد حاجی زاده (دانشجوی انقلاب) says:

    استاد عزیزم سلام

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

    استاد ان شاالله روزی بشه ملاقاتتون کنم.جواد از آذربایجان غربی – شهرستان پلدشت

  15. سمیه says:

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

  16. amin says:

    سلام دوست عزیز

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

    خدا خیرت بده.

    موفق باشی

     

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *