اطلاعیه

Collapse
No announcement yet.

در خواست راهنمایی برای تغییر mode

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

    در خواست راهنمایی برای تغییر mode

    سلام
    دوستان من برنامه ای برای تاریخ و ساعت با 1307 نوشتم همه چیش درست کار میکنه اما برای تغییر تاریخ با pushbotton وقتی از pinb.3 استفاده میکنم که ماه یا سال و select کنه هر 2 پارامتر ماه و سال کم و زیاد میشه ممنون میشم راهنمایی کنید

    مرسی



    while (1)
    {

    // Place your code here

    RTC();
    if(PINB.3==0)
    {
    while(PINB.3==0)delay_ms(10);
    setyear=1;
    while(setyear==1)
    {
    if(PINB.4==0)
    {
    if(PINB.4==0) delay_ms(10);
    year++;
    if(year==100) year=0;
    }
    if(PINB.5==0)
    {
    if(PINB.5==0) delay_ms(10);
    year--;
    if(year==0) year=99;
    }

    if(PINB.3==0)
    {
    while(PINB.3==0)delay_ms(10);
    setyear=0;
    setmonth=1;
    }
    while(setmonth==1) delay_ms(10);
    {

    if(PINB.4==0)
    {
    if(PINB.4==0) delay_ms(10);
    month++;
    if(month==100) month=0;
    }
    if(PINB.5==0)
    {
    if(PINB.5==0) delay_ms(10);
    month--;
    if(month==0) month=99;
    }

    if(PINB.3==0)
    while(PINB.3==0)delay_ms(10);
    {
    setyear=0;
    setmonth=0;
    }
    }
    rtc_set_date(day,month,year);
    RTC();
    lcd_gotoxy(2,1);
    lcd_putsf(" "
    delay_ms(20);




    }
    rtc_set_date(day,month,year);
    RTC();
    lcd_gotoxy(2,1);
    lcd_putsf(" "
    delay_ms(20);
    //}
    }
    }
    }

    #2
    پاسخ : در خواست راهنمایی برای تغییر mode

    دوستان کسی نمیتونه کمک کنه؟



    [ltr]

    while (1)
    {

    // Place your code here

    RTC();
    if(PINB.3==0)
    {
    while(PINB.3==0)delay_ms(10);
    setyear=1;
    while(setyear==1)
    {
    if(PINB.4==0)
    {
    if(PINB.4==0) delay_ms(10);
    year++;
    if(year==100) year=0;
    }
    if(PINB.5==0)
    {
    if(PINB.5==0) delay_ms(10);
    year--;
    if(year==0) year=99;
    }

    if(PINB.3==0)
    {
    while(PINB.3==0)delay_ms(10);
    setyear=0;
    setmonth=1;
    }
    while(setmonth==1) delay_ms(10);
    {

    if(PINB.4==0)
    {
    if(PINB.4==0) delay_ms(10);
    month++;
    if(month==100) month=0;
    }
    if(PINB.5==0)
    {
    if(PINB.5==0) delay_ms(10);
    month--;
    if(month==0) month=99;
    }

    if(PINB.3==0)
    while(PINB.3==0)delay_ms(10);
    {
    setyear=0;
    setmonth=0;
    }
    }
    rtc_set_date(day,month,year);
    RTC();
    lcd_gotoxy(2,1);
    lcd_putsf(" "
    delay_ms(20);




    }
    rtc_set_date(day,month,year);
    RTC();
    lcd_gotoxy(2,1);
    lcd_putsf(" "
    delay_ms(20);
    //}
    }
    }
    }

    دیدگاه


      #3
      پاسخ : در خواست راهنمایی برای تغییر mode

      سلام
      ایراد اول که ربطی به عیب شما نداره ولی برنامه باید هنگ کنه مگه اینکه کامپایلر این خط رو ترجمه نکنه

      کد:
      while(setmonth==1) delay_ms(10);


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

      کد:
      while (1)
      {
        // Place your code here
        RTC();
        if(PINB.3==0)
        {
          while(PINB.3==0)delay_ms(10);
          setyear=1;
          while(setyear==1)
          {
            if(PINB.4==0)
            {
              if(PINB.4==0) delay_ms(10);
              year++;
              if(year==100) year=0;
            }
            if(PINB.5==0)
            {
              if(PINB.5==0) delay_ms(10);
              year--;
              if(year==0) year=99;
            }
            if(PINB.3==0)
            {
              while(PINB.3==0)delay_ms(10);
              setyear=0;
              setmonth=1;
            }
          }
          while(setmonth==1)
          {
            if(PINB.4==0)
            {
              if(PINB.4==0) delay_ms(10);
              month++;
              if(month==100) month=0;
            }
            if(PINB.5==0)
            {
              if(PINB.5==0) delay_ms(10);
              month--;
              if(month==0) month=99;
            }
            if(PINB.3==0)
            {
              while(PINB.3==0)delay_ms(10);
              setyear=0;
              setmonth=0;
            }
          }
          rtc_set_date(day,month,year);
          RTC();
          lcd_gotoxy(2,1);
          lcd_putsf(" ");
          delay_ms(20);
        }
        // end if
        rtc_set_date(day,month,year);
        RTC();
        lcd_gotoxy(2,1);
        lcd_putsf(" ");
        delay_ms(20);
      }
      //end main while


      اگه حوصله نداری تا whitespace رو رعایت کنی (که خیلی اشتباهه رعایت نکنی) از سایت زیر استفاده کن
      http://www.prettyprinter.de/index.php
      اگه یه روز بخوام c درس بدم برگه کسانی رو که whitespace رعایت نمیکنن رو صفر میدم :twisted:
      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

      دیدگاه


        #4
        پاسخ : در خواست راهنمایی برای تغییر mode

        مصطفی جان پس چه خوب شد استاد C من نشدی :job:
        در مورد برنامه هم با آکولاد گذاری شما همچنان با تغییر پایه mode B.3 هم ماه و هم سال همزمان تغییر میکنه
        من بیشتر دنبال پیدا کردن نحوه نوشتن برنامه برای تغییر mode های مختلف با یک پایه pushbotton هستم
        مرسی

        دیدگاه


          #5
          پاسخ : در خواست راهنمایی برای تغییر mode

          این تابع RTC(); چیه؟
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #6
            پاسخ : در خواست راهنمایی برای تغییر mode

            RTC تابعی هستش که با کمک 1307 تاریخ و ساعت رو نشون میدم
            مقدار کلیه المان ها هم در ابتدا 0 گرفتم

            [ltr]

            void RTC(void)
            {
            rtc_get_time(&hour,&minute,&second);
            rtc_get_date(&day,&month,&year);
            sprintf(lcd1,"20%02u/%02u/%02u",year,month,day);
            sprintf(lcd2,"%02u:%02u:%02u",hour,minut e,second);
            lcd_clear();
            lcd_gotoxy(0,1);
            lcd_puts(lcd1);
            lcd_gotoxy(0,0);
            lcd_puts(lcd2);
            delay_ms(100);
            }

            [rtl]

            دیدگاه


              #7
              پاسخ : در خواست راهنمایی برای تغییر mode

              با سلام

              کلید یا پوش باتن را لرزش زدایی ننموده اید، debounce ( بین 100 تا 300 میلی ثانیه برای لرزش زدایی کلید ها نیاز است )
              بعد از مشاهده تغییر در وضعیت هر کلید، حداقل 100 میلی ثانیه صبر کنید( delay ) سپس دوباره کلید را بخوانید ،
              اگر با وضعیت قبل از 100 میلی ثانیه ، یکسان بود، این را یک تغییر کلید معتبر فرض کنید و پروسه مربوط به کلید را ادامه دهید.
              کدهای ذیل را بررسی کنید.
              با سپاس

              کد PHP:

              char PINB_3_PUSHED_OK
              void )
                  {
                  if(
              PINB.3==0
                      {
                      
              delay_ms(100);
                      if(
              PINB.3==0) return ( ) ;    // ok after debounce
                      
              }
                  return 
              ;    // nok after debounce
                  
              }

              char PINB_4_PUSHED_OKvoid )
                  {
                  if(
              PINB.4==0)
                      {
                      
              delay_ms(100);
                      if(
              PINB.4==0) return ( ) ;    // ok after debounce
                      
              }
                  return 
              ;    // nok after debounce
                  
              }

              char PINB_5_PUSHED_OKvoid )
                  {
                  if(
              PINB.5==0)
                      {
                      
              delay_ms(100);
                      if(
              PINB.5==0) return ( ) ;    // ok after debounce
                      
              }
                  return 
              ;    // nok after debounce
                  
              }
                  
              while (
              1)
              {
                  
              // Place your code here
                  
              RTC();
                  
              // if(PINB.3==0)
                  
              if( PINB_3_PUSHED_OK() )
                  {
                      while(
              PINB.3==0)delay_ms(100);
                      
              setyear=1;
                      while(
              setyear==1)
                      {
                          
              // if(PINB.4==0)
                          
              if( PINB_4_PUSHED_OK() )
                          {
                              if(
              PINB.4==0delay_ms(100);
                              
              year++;
                              if(
              year==100year=0;
                          }
                          
              // if(PINB.5==0)
                          
              if( PINB_5_PUSHED_OK() )
                          {
                              if(
              PINB.5==0delay_ms(100);
                              
              year--;
                              if(
              year==0year=99;
                          }
                          
              // if(PINB.3==0)
                          
              if( PINB_3_PUSHED_OK() )
                          {
                              while(
              PINB.3==0)delay_ms(100);
                              
              setyear=0;
                              
              setmonth=1;
                          }
                      }
                      while(
              setmonth==1)
                      {
                          
              // if(PINB.4==0)
                          
              if( PINB_4_PUSHED_OK() )
                          {
                              if(
              PINB.4==0delay_ms(100);
                              
              month++;
                              if(
              month==100month=0;
                          }
                          
              // if(PINB.5==0)
                          
              if( PINB_5_PUSHED_OK() )
                          {
                              if(
              PINB.5==0delay_ms(100);
                              
              month--;
                              if(
              month==0month=99;
                          }
                          
              // if(PINB.3==0)
                          
              if( PINB_3_PUSHED_OK() )
                          {
                              while(
              PINB.3==0)delay_ms(100);
                              
              setyear=0;
                          
              setmonth=0;
                          }
                      }
                      
              rtc_set_date(day,month,year);
                      
              RTC();
                      
              lcd_gotoxy(2,1);
                      
              lcd_putsf(" ");
                      
              delay_ms(20);
                  }
                  
              // end if
                  
              rtc_set_date(day,month,year);
                  
              RTC();
                  
              lcd_gotoxy(2,1);
                  
              lcd_putsf(" ");
                  
              delay_ms(20);
              }
              //end main while 
              گشتی در لاله زار
              http://www.eca.ir/forum2/index.php?topic=76138.0

              http://www.eca.ir/forum2/index.php?topic=76141

              دیدگاه


                #8
                پاسخ : در خواست راهنمایی برای تغییر mode

                از توجه شما ممنونم

                مرسی از وقتی که گذاشتید

                اما در خصوص کارکرد مدار پس از اعمال تغییرات پیشنهادی شما کلا push botton ها اثری بر عملکرد ساعت ندارند و تنها با نگه داشتن 20 ثانیه ای B.3 میکرو هنگ میکنه و lcd قفل میشه

                باز هم سپاس

                دیدگاه


                  #9
                  پاسخ : در خواست راهنمایی برای تغییر mode

                  آیا رویه نوشتن برنامه برای تغییر mode به همین ترتیبی که من نوشتم هستش؟
                  روش درسته؟

                  دیدگاه


                    #10
                    پاسخ : در خواست راهنمایی برای تغییر mode

                    نوشته اصلی توسط amir_honarmand
                    آیا رویه نوشتن برنامه برای تغییر mode به همین ترتیبی که من نوشتم هستش؟
                    روش درسته؟
                    با سلام
                    از برنامه ای که شما نوشتید،"با مقداری اصلاحات جزیی"، انتظار می رود که کار مورد نظر را انجام دهد.
                    کامپایل برنامه را بدون بهینه سازی انجام دهید تا کدهای عادی تولید کند.
                    اگر مفهوم دیبانس کلید ، برایتان واضح شد، برنامه را کمی ویرایش کنید تا عملیات صحیح را انجام دهد.
                    (در واقع مقداری سعی و خطا و آزمایش روی برد نیاز دارد.)
                    با سپاس
                    گشتی در لاله زار
                    http://www.eca.ir/forum2/index.php?topic=76138.0

                    http://www.eca.ir/forum2/index.php?topic=76141

                    دیدگاه


                      #11
                      پاسخ : در خواست راهنمایی برای تغییر mode

                      متشکر

                      من هم مشغول آزمون و خطام

                      دیدگاه

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