طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
کنترل نور یک لامپ 12 الی 24 ولتی DC توسط دو عدد کلید در بازه روشنایی 1 تا 99 درصد. به همراه نمایشگر جهت نمایش درصد روشنایی.این پروژه در اصل یک شمارنده می باشد که می توان عبور مرور افراد از یک گیت را شمارش کرد، شمارنده هم می تواند به صورت بالا شمار و هم پایین شمار کار کند. همچنین توسط شدت نور یک عدد LED می‌توان سنسور فرستنده و گیرنده را در یک راستای مستقیم تنظیم کرد. سنسورها ار نوع مادون قرمز با برد تقریبی 120cm می باشد.کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها.در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود.ساعت دیواری دیجتال با قابلیت نمایش ساعت و دقیقه، دمای اتاق، تاریخ شمسی، روز هفته، زدن تک بوق وقتی که زمان یک ساعت جلو می رود، تنظیم ساعت و دما تنها با 2 کلید. ابعاد ساعت 33*27 سانتی متر می باشد.
دیمر دیجیتال با AVR به زبان سی

MCP-38

دیمر دیجیتال با AVR به زبان سی
پروژه شمارش افراد با سنسور مادون قرمز و avr

MCP-6

پروژه شمارش افراد با سنسور مادون قرمز و avr
پروژه کنترل سروو موتور از 0 تا 180 درجه با avr

MCP-2

پروژه کنترل سروو موتور از 0 تا 180 درجه با avr
پروژه محافظ لوازم برقی با avr و نمایشگر سون سگمنت

MCP-21

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

MCP-13

پروژه ساعت دیواری دیجیتال به همراه تاریخ شمسی و دما با avr

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

www.picpars.com ماشین حساب ساده به زبان سی با میکروکنترلر AVR 197

همانطور که قول داده بودم یه ماشین حساب ساده به زبان سی C با میکروکنترلر AVR و کامپایلر CodeVisionAVR V2.04.4a نوشتم نسبت به زبان بیسیک کمی پیچیده و بیشتر شده اما من طوری نوشتم که اگر از خط اول شروع به خوندن کنید تا آخر متوجه خواهید شد که من چه کردم. این ماشین حساب قادر است است تا عملیات های (OP) جمع، ضرب، تقسیم، تفریق، جذر و درصد را انجام دهید همچنین دارای یک حافظه برای ذخیره کردن جواب می باشد و یک کلید برای پاک کردن این حافظه و کلید On/c برای صفر کردن ماشین حساب.

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


من برای برنامه را به سه قسمت تقسیم کردم و هر کدام در داخل یک فایل جداگانه نوشته شده است که این کار باعث می شود شما دچار سردرگمی نشوید و به راحتی به تحلیل برنامه بپردازید. نکته: برنامه به گونه ای نوشته شده که به راحتی می توانید توابع عملیاتی دیگری مانند sin,cos... به آن اضافه کنید. توضیح فایل ها:

 فایل اصلی برنامه calculator-avr-c.c :

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

#include <keypad.h>
#include <inputNum.h>

در ابتدا یک سری متغیر به صورت سراسری تعریف کردم تا بتوانیم از آنها در سایر توابع نیز استفاده کنیم. متغیر a برای دخیره کردن عدد اولی استفاده شده و متغیر b برای ذخیره کردن عدد دومی و از متغیر ans هم برای ذخیره کردن نتیجه نهایی استفاده شده. توابع display1 تا display4 وظیفه آنها نمایش اطلاعات به گونه های مختلفی روی LCD می باشد.

 تابع equal :

اگر بعد از وارد کردن عدد اولی بلافاصله کلید = را بزنید این تابع اجرا شده و متغیر ans برابر a خواهد شد و روی LCD نمایش داده خواهد شد.

تابع may_error :

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

تابع clear_var :

از این تابع برای صفر کردن متغیر های اصلی و همچنین پاک کردن LCD و آماده کردن آن می باشد. نکته کد 0x0f که در دیتاشیت LCD ها هم موجود می باشد باعث چشمک زدن نویسه می شود.

تابع calculat_add :

در این تابع مجدد یک بار دیگر برای دریافت عدد دوم از کاربر تابع input_digit فراخوانی شده و بعد a,b با هم جمع شده و نتیجه آن روی LCD نمایش داده می شود.

تابع calculat_min و calculat_mul و calculat_div :

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

تابع calculat_squ :

این تابع از متغییر a در صورتی که منفی نباشد جذر خواهد گرفت و نتیجه نمایش داده خواهد شد. نکته کد 0xE8 برای نمایش علامت جذر می باشد. (دیتاشیت lcd)

تابع inc_memory و dec_memory:

از این تابع برای ذخیره محاسبه در در متغییر M استفاده شده که متغیر M با مقدار جدید جمع خواهد شد. و تابع dec همین کار را نجام می دهید با این تفاوت که به جای جمع تفریق خواهد شد.

تابع calculat_percent :

از این تابع برای گرفتن درصد استفاده شده به این صورت که با نوشتن 2%50 میکرو 2 درصد عدد 50 را گرفته و روی lcd نمایش می دهد.

تابع memory_clear:

 از این تابع برای پاک کردن متغییر سراسری M که بع عنوان حافظه استفاده شده.

تابع main :

تابع اصلی برنامه که در آن lcd به صورت ستون 20 تایی پیکره بندی شده و تابع صفر کردن فراخوانی می شود و در نهایت وارد حلقه بی نهایت شده که در این حلقه ابتدا عدد اولی a همراه با نوع عملیات op از کیبورد دریافت شده و با استفاده از دستور switch نوع عمل تشخیص داده می شود و یکی از توابع بالا فراخوانی می شود. برای محاسبه بعدی در انتها op=0 خواهد شد.

فایل inputNum.h :

وظیفه دستوارت نوشته شده در این فایل الحاقی این است که اعداد را به صورت تک رقمی از کیبورد دریافت نماید و درون آرایه ذخیره کرده و در آخر این ارقام را به صورت یک عدد صحیح integer تبدیل کرده و درون متغییر n قرار دهد و در نهایت این متغییر را برگشت دهد. در این فایل الحاقی تابع input_digit از نوع برگشتی تعریف شده که دستورات آن را در ادامه توضیح می دهیم:

char op,last_op,dis,buffer[40];
float ans;


در این قسمت متغییر های سراسری تعریف شده در فایل C که در این تابع مورد نیاز می باشند دوباره نوشته می شوند. (دلیل این کار این است که تابع در یک فایل هدر می باشد) 

درون تابع یک سری متغییر محلی تعریف تعریف کرده ایم که در زیر وظیفه هر کدام را شرح خواهیم داد:

  • key: مقدار کلید فشار داده شده درون این متغییر قرار میگیرد.
  • k: مقدرا اسکی درون key با and شدن در 0f تبدیل به عدد صحیح شده و در k قرار می گیرد.
  • count و count2: برای شمارش تعداد ارقام وارد شده استفاده شده.
  • i و t: متغییر های موقت هستند برای شمارش و شرط ...
  • indigt: یک آرایه 10 عضوی می باشد که ارقام وارد شده در آن قرار می گیرند.
  • neg: برای اینکه بفهمیم کلید - سمت چپ فشار داده شده یعنی اینکه عدد ورودی منفی می باشد و در مرحله پایانی متغییر n را منفی کنیم.picpars
  • ashar: از این متغییر هم برای اینکه بفهمیم کاربر می خواهد عدد اعشاری وارد کند استفاده شده که در ادامه توضیح می دهیم.
  • n,n2: هم برای ذخیره کردن عدد صحیح نهایی استفاده می شود. (n2 موقت)
  • dis: با یک شدن این متغییر ما مجوز پاک کردن lcd را داده ایم تا بعد از فشار دادن اولین کلید lcd پاک شده و حاصل آخرین محاسبه در سطر دوم نشان داده شود.

از دستور if(op) lcd_putchar(op); برای گرفتن عدد دوم استفاده شده که در صورتی op داشته باشیم آن op روی lcd نمایش داده می شود. در ادامه lable داریم که از این برچسب صرفا برای گرفتن قسمت اعشاری عدد مورد نظر استفاده شده. متغییرهای مورد نیاز برای گرفتن عدد صفر می شود و وارد حلقه بی نهایت شرطی می شویم.

شرط این حلقه مخالت با op است یعنی تا زمانی که ما op=0 داریم در حلقه ماندگاریم و به محضی که یکی از کلید های عملیاتی فشار داده شوند op دراری یک مقدار خواهد شد و شرط این حلقه از بین خواهد رفت و منجر به خروج از آن خواهد شد. ابتدا تابع keypad فراخوانی شده و مقدار کلید فشار داده شده مورد سنجش قرار خواهد گرفت اگر key اعداد 0 تا 9 بود با توجه به مقدار متغییر count رقم مورد نظر درون آریه قرار می گیرد و برای مرحله بعدی یک واحد به count اضافه می شود و مقدار count در count2 برای مراحل پایانی کپی می شود. در صورتی که اعداد 0 تا 9 نباشد مطمئنا یکی از کلید های عملیاتی فشار داده شده است پس این عمل در متغییر مربوطه op قرار می گیرد.

در صورتی که کلید +-  فشرده شده باشد neg=1 می کنیم و op را صفر می کنیم تا همچنان شرط حلقه برقرار باشد و عدد را دریافت کنیم و همچنین علامت - نمایش داده شود. برای کلید اعشاری هم همین وضعیت را داریم.

در پایان بعد از خروج از حلقه از متغییر count در صورتی که صفر نباشد یک واحد کم می شود و یک کپی از آن را هم در t قرار می دهیم. حالا با استفاده از یک حلقه شمارشی for آرایه ارقام را به هم چسبانده و درون متغییر n قرار می دهیم که در آن i از صفر شروع شده و تا t ادامه می یابد با استفاده از قانون ضرب ارقام و جمع آنها با هم ارقام تکی تکی را به یک عدد صحیح تبدیل می کنیم.

در صورتی که ashar=1 شده باشد شرط if برقرار می شود و دوباره عدد 2 را به ashar نسبت می دهیم و به طور موقت مقدار صحیح را در n2 ذخیره کرده و به آدرس lable پرش می کند تا این بار مقدار ارقام اعداد اعشاری را دریافت کند و در آخر چون ما قبلا ashar=2 کردیم این بار شرط if مربوطه برقرا شده و با توجه به آخرین مقدار متغییر i ما n را بر ضریبی که توسط i تعیین می شود تقسیم می کنم و تا قسمت اعشاری بدست آید و حالا با n2 قبلا مقدار صحیح در آن بود جمع می کنیم و تا عدد اعشاری ورودی ما ایجاد شود و در نهایت در n کپی می کنیم تا برگشت داده شود.

 در صورتی که مقدار count2=0 باشد یعنی اینکه تنها یکی از کلید های عملیاتی فشرده شده پس جواب آخرین محاسبه که در ans می باشد به عنوان عدد اولی در a قرار می گیرد و رشته Ans نیز روی نمایشگر نشان داده می شود.

 فایل Keypad.h:

در این فایل دستوراتی نوشته شده که وظیفه آنها اسکن پورت و خواندن کلید فشرده شده می باشد که توضیحات آن را در صفحه کلید 4×4 داده ایم در زیر در قسمت مطالب مرتبط آورده شده که می تواند با مراجعه به این مطلب نحوی کار آن را بخوانید. دراینجا تنها تفاوتی که داریم این است که کیبورد ما از 16 کلید به 24 کلید افزایش داده شده و با اعمال تغییرات کوچک در آن که بیشتر اعداد 4 به 6 جایگزین شده است.

این پروژه همراه با توضیحات آن تنها در وب سایت www.picpars.com به صورت متن باز ارئه شده و کپی برداری از آن تنها با ذکر منبع امکان پذیر می باشد.

با تشکر فراوان سید محسن قاسمیان

ورژن نرم افزار ها: CodeVisionAVR V2.04.4a  و Proteus 7.7 sp2 Professional

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 111 | نسخه 1 | حجم 80 کیلوبایت | دانلود 9166 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود ماشین حساب ساده به زبان سی با میکروکنترلر AVR

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال سه شنبه، 19 بهمن ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 4 نظر    بازدید بازدید [ 54791 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان   

پروژه محافظ لوازم برقی با avr و نمایشگر سون سگمنت
کد پروژه: MCP-21
عنوان: پروژه محافظ لوازم برقی با avr و نمایشگر سون سگمنت
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود.
پروژه آلارم صبحگاهی و یادآور با LCD گرافیکی و avr
کد پروژه: MCP-7
عنوان: پروژه آلارم صبحگاهی و یادآور با LCD گرافیکی و avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این پروژه در اصل یک ساعت زنگ دار می باشد که قابلیت برنامه ریزی آلارم صبحگاهی و تنظیم 5 برنامه یادآور را دارد. با تنظیم آلارم هر روز راس ساعت تنظیمی آلارم پخش می شود، همچنین با تنظیم یادآور ها در ساعت و تاریخ مشخص نیز آلارم پخش می شود. از امکانات آن می توان برای هر یادآور یک نام تعیین کرد (20 کاراکتر اسکی) با قابلیت تایپ حروف کوچک و بزرگ انگلیسی با کیبورد 3×4 و ...

مرتبط باموضوع :          مطالب بیشتر در این موضوع

 ساعت دقیق با میکروکنترلر AVR به صورت غیر همزمان با کریستال خارجی RTC 32.768KHz  [ دوشنبه، 11 بهمن ماه، 1389 ] 48549 مشاهده
 دانلود پروژه نمایش ساعت فارسی روی LED با ابعاد ۱۱۲*۲۴  [ سه شنبه، 2 شهريور ماه، 1389 ] 28378 مشاهده
 پروژه دربازکن الکترونیکی خانه (قفل رمز)  [ چهارشنبه، 21 دي ماه، 1390 ] 61131 مشاهده
 پروژه MP3 Player با میکروکنترلر AVR به زبان C سی  [ سه شنبه، 6 مهر ماه، 1389 ] 55286 مشاهده
 دانلود پروژه کامل ماشین حساب مهندسی با AVR با (Codevision)  [ پنجشنبه، 4 شهريور ماه، 1389 ] 58281 مشاهده
نام شما: حامد
ایمیل شما: hamed.t_1990@yahoo.com
در مورخه : شنبه، 11 آذر ماه، 1391

من دقیقاً کار متغیر last_op رو نفهمیدم. اگه میشه یه توضیح واضح بدین.

ارسال جوابیه

نام شما: حامد
ایمیل شما:
در مورخه : يكشنبه، 12 آذر ماه، 1391

کسی نیست جواب منو بده؟

ارسال جوابیه

نام شما: دنی
ایمیل شما:
در مورخه : يكشنبه، 24 بهمن ماه، 1395

چرا ناقص میذارین برنامه ها رو ؟؟!!؟

مرسی، اه

ارسال جوابیه

نام شما: SHADAB
ایمیل شما:
در مورخه : پنجشنبه، 7 ارديبهشت ماه، 1396توسط
(مشخصات کاربر shadab | ارسال پیغام شخصی)

سلام

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

ارسال جوابیه

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]