اطلاعیه

Collapse
No announcement yet.

کمک راجع به فلاشر با زبان c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک راجع به فلاشر با زبان c

    سلام این یک برنامه ی فلاشر هست که 8 تا ال ای دی رو از بالا به تریتب روشن و خاموش میکند و پایین می آید و دوباره از پایین به بالا می رود.
    اگر می شود خط های برنامه رو از void main به پایین توضیح دهید. خواهشا سریع تر کمک کنید که وقت ندارم.
    ممنونم ازتون.
    #include<mega16.h>
    #include<delay.h>
    #define xtal 4000000

    int i;

    void main (void)
    {

    DDRD = 0xFF;

    while(1)
    {

    for(i = 1; i <= 128; i = i*2)
    {
    PORTD = i;
    delay_ms(100);
    }

    for(i = 128; i > 1; i = i/2)
    {
    PORTD = i;
    delay_ms(100);
    }

    }

    }


    آقا این دستور یعنی چی؟ کدوم پایه ها رو یک میکنه؟ اگه میشه با عکس توضیح بدید؟
    حلقه ی for چرا تا 128 ادامه داره؟ چرا گام حرکت i/2 شده؟ علت این دستورات چیه؟
    اگر بخواهیم یکی از بالا یکی از پایین روشم خاموش شود و به وسط برسند( یعنی دیود اولی روشم بشه و خاموش بشه بعد دیود هشتمی و بعد دیود دومی و بعد هفتمی و.. تا به وسط برسند و دوباره تکرار بشه)

    #2
    پاسخ : کمک راجع به فلاشر با زبان c

    سلام دوست من
    این برنامه خیلی ساده داره ابتدا یک بیت را به راست شیفت می دهد پس از اتمام به چپ شیفت می دهد.در واقع اگر را ضرب در 2 کنیم به صورت باینر شیفت پیدا می کند.مثلا
    1=00000001
    2=00000010
    4=00000100
    6=00001000
    8=00010000
    10=0010000
    و....
    که این قسمت می توان از دستور های زیر جایگزین کرد.که البته فرقی هم نداره بجز در سرعت اجرای برنامه که در این برنامه اصلا مهم نیست.
    PORTB=1;
    POTRB=PORTB <<1
    شیب یک بیت به سمت چپ
    PORTB=PORTB <<1
    شیب یک بیت به سمت راست
    که برابر است با دستورات زیر
    PORTB=PORTB *2
    بهتر یکمی به دستورات زبان c توجه کنید.

    دیدگاه


      #3
      پاسخ : کمک راجع به فلاشر با زبان c

      برای یه همچین برنامه ساده ای برنامه نویسی سطح پایین اونم واسه AVR مناسب نیست
      کد:
      while(1)
      {
      int i,j;
      unsigned char led=0x80;
      for(i=0;i<8;i++){
      delar_ms(500);
      led=led>>1;}
      delar_ms(500);
      for(j=0;j<8;j++){
      delar_ms(500);
      led=led<<1;}
      {
      برنامه بالا با پورت A کار کردم که شما میتونی تغییرش بدید همچنین اگه درست کار نکرد جای عملگرای شیفت رو تغییر بدید
      *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
      *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

      دیدگاه

      لطفا صبر کنید...
      X