(۱۳-دى-۱۳۹۱, ۰۳:۰۱:۲۹)complexcoding نوشته است: با تشكر
و ديگه اينكه Xtal = 4000000 فركانس نوسان سازي كريستال هست؟ كه ميشه 4 گيگاهرتز
و در اين قسمتkey = PINC & 0b00000001;
در واقع همان آگاهي ما از فشرده شدن كليد هست؟ چون كاملا پورت سي به صورت ورودي مقدار دهي شده؟
من يك پروژه دارم كه كنترل دور موتور DC با PWM هست كه دور موتورش رو بايد با ولوم تغيير بدم و سرعتش رو از 0 تا 9 روي يك سون سگمنت نمايش بده ...
تازه 2 يا 3 روزه نشستم سر ميكرو؟ كلي سردرد گرفتم همش وسطاش سرم گيج مي ره؟ مثلا نمي دونم چرا پايه هاي سون سگمنت كاملا به پايه هاي پورت D وصل نشده؟ و يك پايه آزاده و در كدها در مرحله اول 0x3F, مقداردهي شده كه فقط 6 پايه مقدار مي گيره؟ يكي از دوستان گفت دو پايه اي كه مقداردهي نشده صفر هست؟ آيا درست گفت؟ اينم عكسه پايه هاي سون سگمنت وصل شده به ميكرو:
http://www.niloblog.com/files/images/ddb...t3wubh.png
اینا نشونه ی یادگیریه خیلی خوبه

هر سگمنت 7 تا لامپ داره در سگمنت کاتد مشترک پایه های مثبت تمام لامپ ها رو به هم وصل می کنن و باید مستقیم وصل کنیم به منفی و 7 تا پایه مثبت وصل می کنم به میکرو و با میکرو این پایه ها رو کنترل می کنیم تو عکسی که شما گذاشتین پایه مشترک به منفی وصل کردن و 6 تا پایه رو با میکرو کنترل کردن
با این کد 0x3F 6 تا پایه ای رو که به سگمنت وصل کرده اول بار یک کرده یعنی عدد 8 رو نمایش داده
کد:
#include <mega8.h>
#include <delay.h>
void main(void)
{
char seg[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
int a,f;
PORTB=0x00;
DDRB=0xFF;
while (1)
{
if((PINC.0==1)&& (f==0)){
f=1;
a++;}
if((PINC.0==0)&&(f==1)){
f=0;}
if (a>9){a=0;}
PORTB=seg[a];
};
}
خط اول تعریف میکرو
خط دوم کتابخانه تاخیر فعال کردم
خط 3 و 4 برنامه رو شروع کردم
خط 5 کد های مربوط به سگمنت آند مشترک
خط 6 2 تا متغیر تعریف کردم
خط 7 و 8 پورت b رو خروجی تعریف کردم
خط 9 شروع حلقه ی اصلی
خطوط 11 و 12 و 13 و 14 و 15 شرط مربوط به کلید
توضیحات کلید
در حالت عادی متغیر f=0 است و پایه d.0 هم صفر است پس هیچکدام از شرط ها برقرار نیستند و در لحظه ای که کلید یک شود در یک بار اجرای برنامه متغییر a یک واحد زیاد می شود و f=1 می شود و دوباره هیچکدام از شرط ها برقرار نمی شوند و زمانی که کلید رها شود پایه صفر می شود و شرط دوم برقرار می شود و f=0می شود که در این صورت هیچکدام از شرط ها بر قرار نمی شوند.در صورت استفاده از شرط ساده در هر بار که کلید فشار داده شود تا لحظه ای که پایه یک باشد متغیر زیاد می شود ولی با این روش در هر بار فشار دادن هر قدر هم که کلید را فشار دهیم فقط یک واحد متغیر اضافه می شود
خط 16 اگر a از 9 بیشتر شد صفر میشه
با آرایه ها متغیر a روی سگمنت نمایش می دیم
برنامه ی کامل پیوست کردم
موفق باشید