اطلاعیه

Collapse
No announcement yet.

مشکل عجیب با دستور if در کدویژن

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

    مشکل عجیب با دستور if در کدویژن

    سلام
    من یه مشکل جالب با دستور if پیدا کردم که خیلی کلافه م کرده
    تو کدویژن تایمر صفر کی پد رو چک می کنه و اگه عددی باشه تو یه متغییر از نوع int قرار می ده حالا تو تابع اصلی برنامه این متغییر با دستور if چک می کنه که اگه بین 0 تا 9 بود یه سری کار انجام بده اگه 10 تا 15 بود یه کارای دیگه .حالا بعضی وقت ها عدد بین 0 تا 9 هست ولی شرط دوم اجرا میشه برای اطمینان رو ال سی دی هم عدد رو نشون میده مثلا عدد 6 هست ولی میره تو شرط دو یعنی اعداد بین 10 تا 15 ، تایمر رو هم قبل اجرای شرط غیر فعال میکنم
    ببخشین دیگه زیاد وارد نیستم :redface: . اینجا هم سرچ زدم ولی موضوع مشابهی نبود.

    #2
    پاسخ : مشکل عجیب با دستور if در کدویژن

    برنامه ای که نوشتی رو بذار تا بشه راحتتر کمت کرد :smile:
    ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

    امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

    دیدگاه


      #3
      پاسخ : مشکل عجیب با دستور if در کدویژن

      این قسمت تایمر 0:

      کد:
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      static int tim;
      tim++;
      resettime++;
        
        if(tim>=30){
        led_green();
        tim=0;
        }
      if(resettime>=120 && keypad!=0){
      keypad=0;
      number=16;
      buzzer(1,200);
      lcd_clear();
      }
      // scan keypad
       number=scankey();  
       if(number>=0 && number<=15)TCCR0B=0x00;
      }

      این هم زیر برنامه اسکن کی پد :
      کد:
      char scankey(void){
      int row=0,cal=0;
      char num[5][5];
      int numb=16;
      num[1][1]=1;num[1][2]=2;num[1][3]=3;num[1][4]=12;num[2][1]=4;num[2][2]=5;num[2][3]=6;num[2][4]=13;
      num[3][1]=7;num[3][2]=8;num[3][3]=9;num[3][4]=14;num[4][1]=10;num[4][2]=0;num[4][3]=11;num[4][4]=15;
      
      
      //row=0;cal=0;
      key=0x08;
      PORTD.4=0;PORTD.5=0;PORTD.6=0;PORTD.7=0;
      
      while(PIND.0!=1 || PIND.1!=1 || PIND.2!=1 || PIND.3!=1 ) {
        
        if(PIND.0!=1)row=1;if(PIND.1!=1)row=2;if(PIND.2!=1)row=3;if(PIND.3!=1)row=4;
        key=key<<1;
        cal++;
        PORTD|=key;
        if(key>0x80)break; 
      }// end While
      PORTD.4=0;PORTD.5=0;PORTD.6=0;PORTD.7=0;
      delay_us(10);
      while(PIND.0!=1 || PIND.1!=1 || PIND.2!=1 || PIND.3!=1 ) {
      
      }
      
        if(key>0x08 && row!=0 && cal!=0){
        key=0x08; 
        buzzer(0,40);
        numb=num[row][cal];
        }else{
        numb=16;
        }
      
      return numb;
      }// end scankey

      اینم که حلقه اصلی :
      کد:
      while (1)
         {
         if( number>=0 && number<=9 ){
          resettime=0;
          keypad=(keypad*10)+number; 
          sprintf(buf,"N=%d  ",keypad);
          lcd_gotoxy(0,0);
          lcd_puts(buf);
          delay_ms(150);
          number=16;
          TCCR0B=0x05;
         }else if(number>9 && number<16){
          switch(number){
          case 10:
          break;
          case 11: 
          break;
          case 12: // light on
          break;
          case 13: // mute
          break;
          case 14: 
          break;
          case 15: 
          break;
          } //end switch
      		
          number=16;
          keypad=0;
          TCCR0B=0x05;
      		
         } //end if 
          
         
      
         }//end while

      دیدگاه


        #4
        پاسخ : مشکل عجیب با دستور if در کدویژن

        مشکلم اینطوری حل شد که به جای && از یدونه & استفاده کردم

        دیدگاه


          #5
          پاسخ : مشکل عجیب با دستور if در کدویژن

          سلام
          منم با if مشکل دارم ولی ماله من ساده تر و پیش پا افتاده تره
          من اول برنامه شرط if قرار دادم اما اصلا اجرا نمیشه مثل اینکه اون شرط اونجا نیست(منظورم if (PIND.7 == 1) )
          لطفا کمک کنید مشکل برنامه رو پیدا کنم :sad:


          while (1)
          {

          if (PIND.7 == 1)
          {
          if (PIND.3 == 1)
          {
          PORTC.0 = 1;
          lcd_clear ();
          lcd_puts ("FAN ONE IS ON&quot ;
          delay_ms (80);
          }
          else
          {
          PORTC.0 = 0;
          lcd_clear ();
          lcd_puts ("FAN ONE IS OFF"
          delay_ms(80);
          }

          if (PIND.2 == 1)
          {
          PORTC.1 = 1;
          lcd_clear ();
          lcd_gotoxy(0,1) ;
          lcd_puts ("FAN TWO IS ON&quot ;
          delay_ms (80);
          }
          else
          {
          PORTC.1 = 0;
          lcd_clear ();
          lcd_gotoxy(0,1);
          lcd_puts ("FAN TWO IS OFF"
          delay_ms(80);
          }

          if (PIND.1 == 1)
          {
          PORTC.2 = 1;
          lcd_clear ();
          lcd_gotoxy(0,2) ;
          lcd_puts ("FAN THREE IS ON&quot ;
          delay_ms (80);
          }
          else
          {
          PORTC.2 = 0;
          lcd_clear ();
          lcd_gotoxy(0,2) ;
          lcd_puts ("FAN THREE IS OFF"
          delay_ms(80);
          }

          if (PIND.0 == 1)
          {
          PORTC.3 = 1;
          lcd_clear ();
          lcd_gotoxy(0,3) ;
          lcd_puts ("FAN FOUR IS ON&quot ;
          delay_ms (80);
          }
          else
          {
          PORTC.3 = 0;
          lcd_clear ();
          lcd_gotoxy(0,3) ;
          lcd_puts ("FAN FOUR IS OFF"
          delay_ms(80);
          }
          }

          if (PIND.6 == 1)
          {
          if (PORTD.6 == 1)
          {

          if (PINB.0 == 1)
          {
          i++;
          lcd_clear ();
          sprintf(str,"time%2d",i);
          lcd_puts(str);
          delay_ms (1);
          }
          if (PINB.2 == 1)
          {
          i--;
          lcd_clear ();
          sprintf(str,"time to off :%2d",i);
          lcd_puts(str);
          delay_ms (80);
          }
          }
          };
          من با دانش و آکاهی ام تمام جهالت ها رو به زانو در خواهم اورد.

          دیدگاه


            #6
            پاسخ : مشکل عجیب با دستور if در کدویژن

            دستور if شما مشکلی نداره. شاید مشکل سخت افزاری باشه. یک پیشنهاد. شما وقتی پورت d رو به عنوان ورودی تعریف کردی بیا از طریق portd.7=1 و portd.3=1 این پایه ها رو پول پ کن. ببین If اجرا میشه یا نه.
            ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

            امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

            دیدگاه

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