اطلاعیه

Collapse
No announcement yet.

درخواست کمک راجع به یک برنامه به زبان c

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

    درخواست کمک راجع به یک برنامه به زبان c

    سلام دوستان کسی هست که در مورد این برنامه کمکم کنه توضیحاتی در مورد هر خط بهم بده ممنون میشم
    include <mega16.h>

    #include <delay.h>

    #define red_1 PORTA.0
    #define yellow_1 PORTA.1
    #define green_1 PORTA.2
    #define red_2 PORTA.3
    #define yellow_2 PORTA.4
    #define green_2 PORTA.5
    #define green_a PORTA.6
    #define red_a PORTA.7
    #define green_b PORTB.0
    #define red_b PORTB.1
    unsigned char a,b;

    unsigned char segment (unsigned char input){
    switch(input){
    case 1:{return 0x06;break;}
    case 2:{return 0x5B;break;}
    case 3:{return 0x4F;break;}
    case 4:{return 0x66;break;}
    case 5:{return 0x6D;break;}
    case 6:{return 0x7D;break;}
    case 7:{return 0x07;break;}
    case 8:{return 0x7F;break;}
    case 9:{return 0x6F;break;}
    case 0:{return 0x3F;break;}
    }
    }
    void delay_green(void){
    red_a=0;
    green_b=0;
    a=9;
    b=0;
    while(b!=10){
    delay_ms(1000);
    b++;
    PORTC=segment(a);
    green_a=1;
    red_b=1;
    a--;
    }
    a=9;
    }


    void delay_red(void){
    green_a=0;
    red_b=0;
    a=9;
    b=0;
    while(b!=10){

    delay_ms(1000);
    b++;
    PORTC=segment(a);
    red_a=1;
    green_b=1;
    a--;
    }
    }

    void main(void){
    PORTA=0x00;
    DDRA=0xFF;
    PORTB=0x00;
    DDRB=0x03;
    PORTC=0x00;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0xFF;

    while (1)
    {
    red_1=0;
    red_2=1;
    green_1=1;
    delay_green();
    green_1=0;
    yellow_1=1;
    delay_ms(1500);
    yellow_1=0;
    red_1=1;
    red_2=0;
    green_2=1;
    delay_red();
    yellow_2=1;
    green_2=0;
    delay_ms(1500);
    yellow_2=0;
    };
    }

    #2
    پاسخ : درخواست کمک راجع به یک برنامه به زبان c

    سلام
    خیلی زیاده
    به قطعات کوچکتر برنامتو بشکون و توضیح بخواه
    گفت که دیوانه نهی لایق این خانه نهی

    دیدگاه


      #3
      پاسخ : درخواست کمک راجع به یک برنامه به زبان c

      امید وارم این توضیح بدردت بخوره:



      //این خط برای اضافه کردن توابع مگا 16.اچ هست (کتابخونه مگا16رو اضافه میکنه
      #include <mega16.h>
      //کتابخونه تاخیر رو اضافه میکنه
      #include <delay.h>
      //تعیف ثوابت با استفاده از دفاین ...یعنی مثلا در خط اول با این تعریف به پیش پردازنده میگی قبل از کامپایل هرجا که توی برنامه نوشتم رد_1 منظورم همون پورت آ.0 هست
      #define red_1 PORTA.0
      #define yellow_1 PORTA.1
      #define green_1 PORTA.2
      #define red_2 PORTA.3
      #define yellow_2 PORTA.4
      #define green_2 PORTA.5
      #define green_a PORTA.6
      #define red_a PORTA.7
      #define green_b PORTB.0
      #define red_b PORTB.1
      //تعریف دو متغییر از نوع کاراکتر
      unsigned char a,b;
      //این تابع برای این هست که مثلا اگه عدد مورد نظر 5 بود اونوقت معادل هگز اونو توسط این تابع بگیری و روی مثلا سون سگمنت نشون بدی
      unsigned char segment (unsigned char input){
      switch(input){
      case 1:{return 0x06;break;}//این برای با 0110 0000که این عدد برای روشن کردن بیت 1و2 از یکی از پورت های مگا 16 هست که به سون سگمنت وصل هست که در عکس برات توضیح میدم
      case 2:{return 0x5B;break;}//اینا هم مثل بالا
      case 3:{return 0x4F;break;}
      case 4:{return 0x66;break;}
      case 5:{return 0x6D;break;}
      case 6:{return 0x7D;break;}
      case 7:{return 0x07;break;}
      case 8:{return 0x7F;break;}
      case 9:{return 0x6F;break;}
      case 0:{return 0x3F;break;}
      }
      }

      void delay_green(void){
      //این یعنی همون پورت آ.0 رو 0کن (یعنی به حالت low
      //ببرش
      red_a=0;
      //اشاره با همون ثوابت بالا
      green_b=0;
      a=9;
      b=0;
      while(b!=10){
      //تاخیر به اندازه 1 ثانیه
      delay_ms(1000);
      b++;
      //ظاهرا پورت سی به سون سگمنت وصل هست و که هر پورت شامل 8 بیت از شماره 0 تا 7 هست که مطابق با اون توضیح سون سگمنت که گفتم و تو عکس میبینی مقدار دهی میشه
      PORTC=segment(a);
      green_a=1;
      red_b=1;
      a--;
      }
      a=9;
      }


      void delay_red(void){
      green_a=0;
      red_b=0;
      a=9;
      b=0;
      while(b!=10){

      delay_ms(1000);
      b++;
      PORTC=segment(a);
      red_a=1;
      green_b=1;
      a--;
      }
      }

      void main(void){
      //همه پورت آ رو تو حال low قرار داده
      PORTA=0x00;
      //پورت آ رو تو حالت خروجی قرار داده یعنی همه رو یک کرده1111 1111
      DDRA=0xFF;
      PORTB=0x00;
      DDRB=0x03;
      PORTC=0x00;
      DDRC=0xFF;
      PORTD=0x00;
      DDRD=0xFF;
      //اینم حلقه اصلی که برنامه توش گردش داره
      while (1)
      {
      red_1=0;
      red_2=1;
      green_1=1;
      delay_green();
      green_1=0;
      yellow_1=1;
      delay_ms(1500);
      yellow_1=0;
      red_1=1;
      red_2=0;
      green_2=1;
      delay_red();
      yellow_2=1;
      green_2=0;
      delay_ms(1500);
      yellow_2=0;
      };
      }

      دیدگاه


        #4
        پاسخ : درخواست کمک راجع به یک برنامه به زبان c

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

        دیدگاه


          #5
          پاسخ : درخواست کمک راجع به یک برنامه به زبان c

          دوست من شما دستور while(b!=10){
          و دستور whileدر پایان برنامه را توضیح بده.البته اگه امکانش هست ممنون

          دیدگاه


            #6
            پاسخ : درخواست کمک راجع به یک برنامه به زبان c

            نوشته اصلی توسط Behnam13
            دوست من شما دستور while(b!=10){
            و دستور whileدر پایان برنامه را توضیح بده.البته اگه امکانش هست ممنون
            این یه حلقه هست که تا زمانی که شرطش بر قرار باشه داخل حلقه میمونه. شرطش هم اینه که b مخالف 10 باشه. یعنی موقعی که b برابر 10 شد از حلقه خارج میشه.
            توی آخرین while هم چون شرط برابر 1 هست پس همیشه برقراره. یعنی یه حلقه بی نهایت.
            گفت که دیوانه نهی لایق این خانه نهی

            دیدگاه


              #7
              پاسخ : درخواست کمک راجع به یک برنامه به زبان c

              مرسی دوست من ولی در مثلا وایل آخر green_1=1;
              یعنی چی یا delay_green();
              هم همینطور.در بخش تابع اصلی(main void)DDRB=0x03;
              به چه معناست یا DDRD=0xFFاگه توضیح بدی ممنون میشم.شرمنده اگه زیاد سوال میپرسم

              دیدگاه


                #8
                پاسخ : درخواست کمک راجع به یک برنامه به زبان c

                نوشته اصلی توسط Behnam13
                مرسی دوست من ولی در مثلا وایل آخر green_1=1;
                خواهش میکنم
                یعنی مقدار green_1 برابر با یک بشه. توی اوایل برنامه #define green_1 PORTA.2 رو داشتیم حالا هر جا به green_1 مقدار بدیم مقدار PORTA.2 تغییر میکنه

                نوشته اصلی توسط Behnam13
                یعنی چی یا delay_green();
                یک تابع با این نام تعریف شده که در اینجا داریم از اون تابع استفاده میکنیم
                نوشته اصلی توسط Behnam13
                در بخش تابع اصلی(main void)پبه چه معناست
                این دستور مربوط به تابع اصلی هستش. هر برنامه به زبان c باید یک تابع اصلی با نام main داشته باشه
                نوشته اصلی توسط Behnam13
                یا DDRD=0xFFاگه توضیح بدی ممنون میشم.شرمنده اگه زیاد سوال میپرسم
                تو این دستور داریم مقدار ff رو که در مبنای شانزده هست رو توی رجیستر DDRD میریزیم. که به وسیله ی او خروجی یا ورودی بودن پایه های پورت D مشخص میشه
                گفت که دیوانه نهی لایق این خانه نهی

                دیدگاه

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