طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
ورودی این فرکانس متر قادر است با ولتاژهای 12 تا 500 ولت AC کار کند. ماکزیمم فرکانس اندازه گیری 20KHz می باشد. همچنین با تعیین نرخ نمونه برداری می توانید فرکانس را تا دو رقم اعشار اندازه گیری نمائید.یک سیستم امنیتی که دارای یک کاربر اصلی می باشد و توسط این کاربر می توان کاربرهای متعددی با پسورد های مجزا تعریف نمود. می توان تا 100 کاربر و 100 پسورد مختلف را تعریف، و در قسمت ورود هر یک از اعضاء که نام کاربری و رمز عبور خود را بدرستی وارد کند یک رله به همراه LED روشن خواهد شد.در این پروژه با استفاده از یک ساعت نجومی و محاسبات ریاضی، دو عدد سروو موتور یکی در جهت XY و دیگری در جهت Z پنل خورشیدی را به صورت اتوماتیک در موقیعتی قرار می دهید که بیشترین تابش خورشید را دریافت کند.این مدار یک کنترلر زمانی و دمایی می باشد، که بر اساس برنامه ریزی دلخواه توسط کاربر یک رله خروجی را کنترل می نمایید. با اتصال لامپ فلورسنت مرغوب به رله دستگاه می توانید لامپ را تحت کنترل داشته باشید.یک مدار صوتی جهت پخش فایل های صوتی MP3 و WMV با Sampling rate 8KHz-48KHz و خروجی دیجیتال به آنالوگ 24 بیتی می باشد که از حافظه های Micro SD تا 32GB و فرمت های FAT16 و FAT32 پشتیبانی می کند.
پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr

MCP-1

پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr
پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

MCP-12

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

MCP-25

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

MCP-24

پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)
پروژه mp3 پلیر ساده با avr به زبان C

MCP-32

پروژه mp3 پلیر ساده با avr به زبان C

ماشین حساب ساده به زبان سی با میکروکنترلر 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 کیلوبایت | دانلود 9020 بار

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

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

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

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

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

ساعت آنالوگ با AVR و lcd گرافیکی به زبان c
کد پروژه: MCP-36
عنوان: ساعت آنالوگ با AVR و lcd گرافیکی به زبان c
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این پروژه یک ساعت آنالوگ، تاریخ شمسی و روزه هفته به زبان فارسی به همراه ساعت دیجیتال می باشد. قابلیت تنظیم ساعت و تاریخ توسط سه عدد میکروسوئچ
پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)
کد پروژه: MCP-24
عنوان: پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این مدار یک کنترلر زمانی و دمایی می باشد، که بر اساس برنامه ریزی دلخواه توسط کاربر یک رله خروجی را کنترل می نمایید. با اتصال لامپ فلورسنت مرغوب به رله دستگاه می توانید لامپ را تحت کنترل داشته باشید.

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

 دانلود پروژه کامل چراغ راهنمایی (trafic _ light) تحت کدویژن  [ چهارشنبه، 3 شهريور ماه، 1389 ] 78017 مشاهده
 پروژه اتصال کیبورد کامپیوتر به میکرو کنترلر AVR با کدویژن  [ يكشنبه، 14 شهريور ماه، 1389 ] 31384 مشاهده
 پروژه کنترل از راه دور 5 کاناله مادون قرمز به زبان سی  [ شنبه، 9 ارديبهشت ماه، 1391 ] 22670 مشاهده
 ساعت دقیق با میکروکنترلر AVR به صورت غیر همزمان با کریستال خارجی RTC 32.768KHz  [ دوشنبه، 11 بهمن ماه، 1389 ] 46302 مشاهده
 کنترل موتورهای ac دوکاناله بوسیله avr  [ پنجشنبه، 7 مرداد ماه، 1389 ] 22606 مشاهده
نام شما: حامد
ایمیل شما: hamed.t_1990@yahoo.com
در مورخه : شنبه، 11 آذر ماه، 1391

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

ارسال جوابیه

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

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

ارسال جوابیه

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

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

مرسی، اه

ارسال جوابیه

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

سلام

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

ارسال جوابیه

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

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

  [ بازگشت ]