آموزش میکروکنترلر AVR " درس سیزدهم: کلید های وضعیت منطقی(Logic State) "
درس سیزدهم
کلید های وضعیت منطقی(Logic State)
برای امروزمیخواهیم با قطعه ایی در برنامه پروتئوس به نام کلید های لاجیک آشنا شویم و چند مثال را باهم تمرین کنیم.
کلید های لا جیک (logic state) یا منطقی همان نماد صفرویک منطقی هستند که اگر در حالت یک قرار بگیرد یعنی ولتاژ 5ولت منطقی را دارد و اگر صفرباشد نیز صفر ولت منطقی را داراست.
که البته برای آشنایی بیشتر با ورودی اعداد باینری نیز میتوان از آنها استفاده کرد. مثلا اعداد 100011 را میتوانیم با استفاده از این کلیدهای منطقی به آی سی میکرو وارد نماییم.
برای انتخاب کلید های لاجیک کافیست که در قسمت کیبورد برنامه پروتئوس کلمه logicstateرا وارد نمایید.
سپس کلیدی را که در سمت راست است انتخاب نمایید.
شکل 1-13
خوب همانطور که در شکل بالا دیده میشود کلید منطقی را انتخاب کنید. حال یک دیود نورانی و آی سی مگا16 و همچنین یک سون سگمنت کاتد مشترک تکی را انتخاب نماییدوتمرینات زیر را باهم حل می کنیم.
تمرین اول :برنامه ای بنویسید که اگر پایه اول پورت Cفعال باشد (یعنی یک باشد) تمامی دیود های پورت Bروشن و در غیر اینصورت خاموش باشند.
جواب :
خوب برای شروع از یک تمرین ساده که قبلا آنرا با استفاه از پوش باتن حل کردیم را در اینجا آوردم تا هم تکراری شود برای شما و هم یک مثالی باشد با کلید های لاجیک. برتری این کلیدها نسبت به پوش باتن ها این است که دیگر لازم نیست از دو منبع ولتاژ و پایه زمین استفاده کنیم. ودر رابطه به برنامه که دیگه خودتون اوستا شدید و لازم نیست بگم تمامی پایه های پورت Bرو خروجی و تمامی پایه های پورت Cرا ورودی پوش پول قرار بدید و میریم سر اصل مطلب :
while(1){
if(PINC.0==1)
{
PORTB = 0xFF;
}
else
PORTB = 0x00;
}
خوب همانطور که می بینید با یک ستور ifساده توانستیم که این مسئله را حل کنیم. برای elseهم چون یک خط بیشتر نیست دیگر از {} استفاده نکردیم.
به برنامه پروتئوس باز میگردیم و آی سی را قرار داده و تمامی پایه های پورت Bرا به یک دیود نورانی پایه های منفی آنهارا نیز به زمین وصل می کنیم. حال کلید منطقی را به پایه صفر پورت Cوصل می کنیم.
کدهگز را به آی سی ارجاع و مقدار کلاک را 8 قرار می دهیم . حال برنامه را راه اندازی میکنیم.
باراه اندازی شدن برنامه می بینید که کلید لاجیک عدد صفر را نشان میدهد وبه رنگ آبی است ودیود ها خاموش هستند ، حال کافیست که موس را بروی کلید آورده و رو آن یک کلیک نمایید . خواهید دید که کلید به رنگ قرمز در می آید و عدد یک را نشان میدهد و درنتیجه دیود ها روشن می شوند.
شکل 2- 13
تمرین 2 :برنامه ایی بنویسید که ورودیها را از پورت Cگرفته و دیودهای متناظر با آنها را روشن کند.
جواب :
برای پاسخ به این سوال هشت کلید منطقی را به تمامی پایه های پورتCوصل کنید. اگر بخواهیم برای هر کلید یک دستور ifو elseبنویسیم ، برنامه خیلی طولانی و بد ریخت می شود اما راه ساده تری نیز وجود دارد. تنها کافیست که تمامی پایه های پورت Cرا مساوی با پورت Bدر نظر بگیریم. یعنی متناظر قرار بدهیم مثلا اگر کلید هفتم از پورت Cرا یک کنیم ، متناظر با آن پایه هفتم از پورت Bروشن شود.
حال برنامه را به این صورت می نویسیم :
while(1){
PORTB = PINC ;
}
حال با اجرا کردن برنامه خواهید دید که با یک کردن هر کدام از کلید ها ، دیود متناظر با آن رو شن می شود.
شکل 3 - 13
تمرین 3 : برنامه ایی بنویسید که ورودی را از پورت Cگرفته و عدد متناظر با آن را در سون سگمنت نمایش دهد.
جواب :
برای حل این مسئله ابتدا باید سون سگمنت را جایگزین دیود ها کنیم، پس دیودهارا حذف وپایه های سون سگمنت را به پورت Bوصل می کنیم. مرحله بعد یک آرایه برای اعداد صفر تا نه که قرار است در سون سگمنت به نمایش درآید را تعریف می کنیم. در ادامه متغییری را با نام دلخواه تعریف می کنیم. ابتدا متغییر را مساوی با ایه های پورت Cقرار داده و بعداز آن پورت Bرا متناظر با اعداد سون سگمنت قرار می دهیم.
پس :
voide(main)voide{
int i = 0;
int table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
while(1){
i = PINC ;
PORTB=table[i];
};
}
شکل 4- 13
نکته ایی که حائز اهمیت است این است که با یک سون سگمنت مامیتوانیم اعداد 0 تا 9 را نمایش دهیم.
برای اون دسته از دوستان که خیلی از معادل باینری یادشون نمونده جدول زیر را قرار می دهم:
|
مبنای ده دهی |
مبنای دودویی |
|
0 |
0 |
|
1 |
01 |
|
2 |
10 |
|
3 |
11 |
|
4 |
100 |
|
5 |
101 |
|
6 |
110 |
|
7 |
111 |
|
8 |
1000 |
|
9 |
1001 |
جدول 1 - 13
پس با توجه به جدول بالا ما فقط میتوانیم از 4عدد کلید استفاده کنیم و آن چهار کلید اول از پایه های اول تا چهارم پورت Cواگر از پایه پنجم به بعد کلیدی را یک کنیم سون سگمنت اصطلاحا گیج شده و عددی را نشان نمی دهد.
خوب این هم کار با کلیدهای منطقی
امید که توانسته باشم در یادگیری این درس به شما عزیزان کارایی داشته باشم.
موفق باشید
یاعلی مدد



