در این پست از سایت اِمیک, پروژه avr رقص نور با استفاده از هشت led به زبان c (کدویژن) قرار داده شده است. در این پروژه از میکروکنترلر ATmega16 و 8 عدد led و سه کلید استفاده شده است که شما با فشار دادن هر کدام از کلید ها یک حالت رقص نور را انتخاب می کنید و همچنین با فشار دادن همه انها هر 3 حالت رقص نور پشت سرهم انجام می شود. کلیپ شبیه سازی نحوه عملکرد این پروژه در پروتئوس در انتهای مطلب قرار داده شده است. شماتیک این پروژه به صورت زیر است :
برنامه کدویژن :
در محیط کدویزارد, مگا 16 را انتخاب کنید و فرکانس ان را 1 مگا هرتز تنظیم کنید. پورت C را جهت اتصال led ها خروجی کنید و پین های پورت A که به کلیدها متصل هستند را بگذارید ورودی بمانند فقط قسمت PULLUP جلوی انها را از T به P تغییر دهید تا مقاومت بالاکش برای پورت A فعال شود. کدهای نهایی پروژه به صورت زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
//////// WWW.EMIC.IR //////// #include <mega16.h> #include <delay.h> #include <math.h> void main(void) { int i,a ; DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0); DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); while (1) { PORTC=0; if(PINA.0==0) { PORTC=0b10101010; delay_ms(500); PORTC=0b01010101; delay_ms(500); } if(PINA.1==0) { for(i=0;(i<=7)&(PINA.1==0);i++) { a=pow(2,i); PORTC=a; delay_ms(250); } } if(PINA.2==0) {a=0; for(i=0;(i<=7)&(PINA.2==0);i++) { a=a+pow(2,i); PORTC=a; delay_ms(250); } } } } |
نکات برنامه :
- دلیل فراخوانی کتابخانه math استفاده از دستور pow (توان) در برنامه می باشد, جهت اشنایی با این دستور اینجا را مطالعه کنید
- برای هرکدام از کلیدها یک دستور شرطی if نوشته شده که با فشار دادن هر کلید و درنتیجه برقرای شرط درون if مربوط به ان کلید, دستورات درون if اجرا می شوند
- در if دوم و سوم از حلقه for استفاده شده است که با هر بار تکرار حلقه شمارنده i یکی اضافه شده و با توجه به اینکه از i در دستور pow استفاده شده در هر بار تکرار for که می تواند از 0 تا 7 باشد, 2 به توان i می رسد به عنوان مثال در تکرار اول مقدار i=0 است بنابراین 2 به توان 0 می رسد و حاصل که 1 است در پورت c قرار داده می شود و باتوجه به مقدار باینری 1 که به صورت 00000001 است فقط led متصل به پین 0 از پورت c روشن می شود. در تکرار بعدی که i=1 می شود 2 به توان 1 مرسد و حاصل 2 می شود که با توجه به مقدار باینری ان که 00000010 است led متصل به پین 1 از پورت c روشن شده و بقیه خاموش هستند و این روند ادامه دارد… تا حلقه for به پایان برسد .
فایل های شبیه سازی و کدویژن در ادامه قرار داده شده است. اگر سوالی در مورد برنامه داشتید, در قسمت نظرات میتونید مطرح کنید
کلیپ شبیه سازی :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام، میکروکنترلر رو طبق برنامه پروگرام کردم و مدار رو عملی بستم، بدون مشکل کارکرد.
پاورش همون منبع تغذیش به کجاش وصل میشه؟
پایه های 10 و 11 میکرو به ترتیب به مثبت و منفی تغذیه متصل می شوند. همچنین کاتد LEDها و یک طرف کلیدها نیز به GND یا منفی تغذیه متصل می شود
سلام با 3تا دکمه پوش باتن و دو تا سوییچ چجوری میشه؟
همچنین قطعات مورد نیاز در برنامه شبیه سازی پروتئوس را چی باید سرچ کنیم مثلا میکرو کنترلر را atmega16 بقیه چی هست کلید ؟ مقاومت ؟ ال ای دی؟
سلام, نام قطعاتی را که نیاز دارید به انگیسی سرچ کنید. در فایل های انتهای مطلب شبیه سازی موجود است
سلام خیلی عالی بود فقط امکانش هست توضیح خط به خط برنامه هم بدین ممنون میشم
خیلی عالی و بامزه است