NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3931 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: سون سگمنت

  1. #1
    عضو جدید
    تاریخ عضویت
    Jun 2013
    نوشته ها
    5
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض سون سگمنت

    سلام دوستان
    من میخوام اعداد 1 تا f رو روی 7seg نمایش بدم با ATMEGA16
    3تا کلید دارم که میخوام با زدن کلید اول، یک واحد به عدد نمایش داده شده اضافه بشه و نمایش داده بشه
    با زدن کلید دوم یک واحد کم شده و نمایش داده بشه
    و با زدن کلید سوم، اعداد از صفر مجددا شمارش بدم
    ممنون میشم کسی کمک کنه

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    سلام با کدوم کامپایلر؟؟
    خودتون برنامه ای نوشتین؟؟؟؟؟
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  4. تشکرها از این نوشته :


  5. #3
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض

    سلام
    برای راه اندازی سون سگمنت دو روش وجود داره یکی این که با استفاده از 7447 (برای کاتد مشترک ها) اینکار رو انجام بدیم که اولا فقط چهار تا از پورت های میکرو رو اشغال میکنه دوما عدد رو مستقیما نشون میده یعنی اگه چهار پایه به پورت B0..3 وصل باشه اگه بنویسیم PORTB=8;
    روی سون سگمنت 8 رو نشون میده.
    البته این دیکودر فقط برای اعداد 1-9 هست.(البته تست نکردم)
    روش بعدی هم اینه که مستقیما بیایم بیایم هفت پایه سون سگمنت رو به میگرو وصل کنیم. و بعد اگه اون پورت رو مثلا قرار 1111111 سون سگمنت عدد 8 رو نشون میده یعنی باید بیایم اعداد باینری متناظر هر عدد رو پیدا کنیم.(هر پایه متناظر با یکی از پایه هاست).
    که یکم برنامه زیاد میشه.

  6. کاربران : 3 تشکر کرده اند از شما amiray برای ارسال این پست سودمند:


  7. #4
    عضو جدید
    تاریخ عضویت
    Jun 2013
    نوشته ها
    5
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    با کامپایلر کدویژن
    مشکل من اینجاست که چطور باید کاری کنم که وقتی برنامه داره اعداد رو نشون میده، با زدن کلید، شمارش یک واحد به عقب یا جلو بیفته..
    یا با زدن کلید صفر بشه..

  8. #5
    کاربر فعال
    تاریخ عضویت
    Dec 2007
    نوشته ها
    113
    تشکر
    92
    تشکر شده 78 بار در 59 پست

    پیش فرض

    نقل قول نوشته اصلی توسط syamak نمایش پست ها
    با کامپایلر کدویژن
    مشکل من اینجاست که چطور باید کاری کنم که وقتی برنامه داره اعداد رو نشون میده، با زدن کلید، شمارش یک واحد به عقب یا جلو بیفته..
    یا با زدن کلید صفر بشه..
    سلام
    بنده با کدویژن کار نکردم اما برای اینکه کارتون راه بیافته راه حل تقریبی رو می گم شاید بدردتون بخوره(اگه برای avr-gcc خواسته بودین راحتتر می تونستم راهنمایی کنم):
    به صورت کلی یه متغییر counter تعریف میکنید که برای نشان دادنش هی باقیمانده تقسیم متغییر بر مضرب ده رو به عنوان یه عدد یک رقمی روی سگمنت نشون میدید،‌مثلا اگه 753 باشه:
    753٪10==>عدد ۳ روی اولین سگمنت نمایش داده بشه
    753٪100==>عدد۵ روی دومین سگمنت نمایش داده بشه
    753٪1000==>عدد7 روی سومین سگمنت نمایش داده بشه
    و....
    در رابطه با کاهش یا افزایش این متغییر شما می تونید دو کار انجام بدید:

    1- اگه بخواین با وقفه کارکتین باید از یک میکرو با ۳ تا اینتراپت (مثلا مگا۱۶)‌استفاده کنید و هر کدوم از کلید ها رو به این سه تا وقفه متصل کنید و در زیربرنامه وقفه تغییرات رو اعمال کنید
    مثلا اگه
    ++ INT0==> counter
    -- INT1==> counter
    و...
    2-به صورت معمول هم می تونید توی همون حلقه main چک کنید که ورودی تغییر کرده یانه :
    مثل در نظر بگیرید هر کدوم از کلیدها به پین a میکرو متصله و مقاومت پول آپ هم فعال شده:
    کد:
    void check(void){
        if(!(pina.0 and pina.1 and pina.2) ){
            flag++;
            if (flag==50){
                if (!(pina.0))
                    counter++;
                if (!(pina.1))
                    counter--;
                   if (!(pina.2))
                    counter=0;
            flag=0;
            }
                
        }
    
    }
    یه نکته تو پایان بگم من از متغییر flagاستفاده کردم برای اینکه از نویز در امان باشم و از اینکه کلیدی فشرده شده مطمپن بشم یعنی کاربر حدودا ۳۰ تا ۴۰ میلی ثانیه پایه رو نگه داره تا درخواست تغییر داده بشه

  9. تشکرها از این نوشته :


موضوعات مشابه

  1. پاسخ: 12
    آخرين نوشته: 03-04-2014, 20:35
  2. پاسخ: 0
    آخرين نوشته: 27-12-2013, 20:51
  3. پروژه ماشین حساب با سون سگمنت
    توسط mo_sh64 در انجمن AVR
    پاسخ: 13
    آخرين نوشته: 29-04-2011, 02:14
  4. تبلت سامسونگ
    توسط morteza_rk در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 09-02-2011, 23:45
  5. لپ تاپ فوق سبک جدید سامسونگ
    توسط arsalan681 در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 02-02-2011, 13:45

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •