اطلاعیه

Collapse
No announcement yet.

اجرای یک مرتبه LCD_Clear() در حلقه while (1)

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

    اجرای یک مرتبه LCD_Clear() در حلقه while (1)

    با سلام
    دوستان من در حلقه while (1) دارای چند شرط IF هستم که بر اساس وضعیت دیپ سوییچ یکی از If ها اجرا میشود و محتویات LCD باید عوض بشه، اگر بعد از هر دستور If از clear_lcd() استفاده کنم بعد اجرای آن ،LCD مرتبا چشمک میزند من چطور میتونم کاری کنم که فقط یکبار این دستور اجرا بشه؟در واقع با این کار میخوام نتایج حاصل از if قبلی روی LCD پاک بشه
    با تشکر

    #2
    پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

    بعضی وقت ها موضوعی اینقدر ممکنه ساده باشه که براحتی از زیر دستمون در میره. غیر از برنامه شما که کسی روی LCD چیزی نمینویسه. هر جا مطمئنین که LCD قبلا پاک نشده یا بعدا بایستی اول پاک بشه؛ یک متغیر رو ست کنین و در جایی LCD رو پاک کنین که این متغیر ست شده باشه.

    بقول یکی از دوستان: به همین سادگی!

    دیدگاه


      #3
      پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

      نوشته اصلی توسط رضا آقازاده
      بعضی وقت ها موضوعی اینقدر ممکنه ساده باشه که براحتی از زیر دستمون در میره. غیر از برنامه شما که کسی روی LCD چیزی نمینویسه. هر جا مطمئنین که LCD قبلا پاک نشده یا بعدا بایستی اول پاک بشه؛ یک متغیر رو ست کنین و در جایی LCD رو پاک کنین که این متغیر ست شده باشه.

      بقول یکی از دوستان: به همین سادگی!
      دوست عزیز یه همین سادگی من متوجه نشدم!
      اگه ممکنه بیشتر توضیح بدید
      با تشکر

      دیدگاه


        #4
        پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

        کدتون رو میشه اینجا بذارین (همون کدی که کار نمیکنه) تا تصحیحش کنم؟ اینجوری شما هم کارتون راه میفته هم من درک بهتری از کد شما پیدا میکنم هم شما بهتر طبق اسلوب برنامه نویسی خودتون حل مشکل رو بهتر متوجه میشین.

        دیدگاه


          #5
          پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

          نوشته اصلی توسط رضا آقازاده
          کدتون رو میشه اینجا بذارین (همون کدی که کار نمیکنه) تا تصحیحش کنم؟ اینجوری شما هم کارتون راه میفته هم من درک بهتری از کد شما پیدا میکنم هم شما بهتر طبق اسلوب برنامه نویسی خودتون حل مشکل رو بهتر متوجه میشین.
          سلام
          همانطور که مشاهد میکنید در حلقه While چهار دستور IF با استفاده از دیپ سوییچ وجود داردکه مدهای کاری برنامه را مشخص میکند و در انتهای هر دستور IF باید نتایج محاسبات نمایش داده بشه
          بدلیل بالا بودن تعداد خطهای برنامه،براتون پیام خصوصی گذاشتم.در صورت حل شدن مشکل میتونید فقط قسمت While برنامه رو برای استفاده دیگر دوستان در سایت قرار بدید
          با تشکر

          دیدگاه


            #6
            پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

            سلام
            یک راه کار ساده، گذاشتن یک دستور تاخیر (delay) بعد از lcd_clear است. مقدار تاخیر به برنامه شما بستگی داره مثلا 100 میلی ثانیه
            **/nsm\**

            دیدگاه


              #7
              پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

              نوشته اصلی توسط nasser_sm
              سلام
              یک راه کار ساده، گذاشتن یک دستور تاخیر (delay) بعد از lcd_clear است. مقدار تاخیر به برنامه شما بستگی داره مثلا 100 میلی ثانیه
              nدوست عزیز همانطور که از سورس شلوغ برنامه مشاهده کردید من نمیتونم تاخیر بیشتر به حلقه While اضافه کنم چون همینطوری محاسبات کند انجام میشه

              دیدگاه


                #8
                پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

                سورس برنامه تون را کجا گذاشتید من نمی بینم :question:
                **/nsm\**

                دیدگاه


                  #9
                  پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

                  استفاده از دستور lcd_clear() باعث ایجاد چشمک میشود به جای این دستور بهتر است کل سطرهای lcd را با اسپیس پر کنید مثلا
                  lcd_gotoxy(0,0)
                  lcd_putsf(" &quot
                  lcd_gotoxy(0,1)
                  lcd_putsf(" &quot
                  و ...
                  The harder I work, the luckier I get

                  دیدگاه


                    #10
                    پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

                    فکر می کنم دلیلش اینه که مدام وارد IF مربوط به وضعیت دیپ سوییچ ها میشه..
                    طبق گفته ی آقای آقا زاده از یک متغیر کمک بگیرید.
                    من یه چیزایی اینجا براتون می نویسم:
                    کد:
                    if(PORTC.0=0 && s1=0){
                    PORTA.0=1;
                    s1=1;
                    }
                    if(PORTC.1=1 && s1=1){
                    PORTA.0=0;
                    s1=1;
                    }
                    می بینی که برای وارد شدن به if ها نتها وضعیت دیپ سوییج ها مهمه بلکه باید s1 هم مقدار درستی داشته باشد...
                    شما هر یک باری که lcd را پاک می کنید یک متغیر را هم یک کنید..و در if بنویسید که اگر این متغیر صفر بود وارد حلقه شود
                    در این صورت فقط یک بار وارد حلقه می شود و در نتیجه فقط یک بار lcd را پاک می کند.

                    دیدگاه


                      #11
                      پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

                      با تشکر از تمامی دوستانی که من را در این زمینه راهنمایی کردند.با توجه به راهنمایهای شما دوستان بهترین روش با توجه به سورس سنگین و 400 خطی برنامه من استفاده از یک متغییر جداگانه برای هر مد در حلقه While بود.
                      در برنامه من چهار مد کاری با استفاده از دیپ سوییچ وجود داشت بنابراین من چها متغییر از نوع Bit در برنامه استفاده کردم :
                      کد:
                      bit clear_lcd_a=0b0;
                      bit clear_lcd_b=0b0;
                      bit clear_lcd_c=0b0;
                      bit clear_lcd_d=0b0;
                      و در ادامه در حلقه While بصورت زیر از آنها جهت یکبار پاک کردن صفحه نمایش در هر مد کاری استفاده کردم:
                      کد:
                       if(mode==0x00){
                      بقیه فانکشن ها......
                      if(clear_lcd_a==0){
                      lcd_clear();
                      clear_lcd_a=1;
                      clear_lcd_b=0;
                      clear_lcd_c=0;
                      clear_lcd_d=0;
                      }
                      }
                      
                      
                       if(mode==0x01){
                      بقیه فانکشن ها......
                      if(clear_lcd_b==0){
                      lcd_clear();
                      clear_lcd_a=0;
                      clear_lcd_b=1;
                      clear_lcd_c=0;
                      clear_lcd_d=0;
                      }
                      }
                      
                      
                      
                       if(mode==0x02){
                      بقیه فانکشن ها......
                      if(clear_lcd_c==0){
                      lcd_clear();
                      clear_lcd_a=0;
                      clear_lcd_b=0;
                      clear_lcd_c=1;
                      clear_lcd_d=0;
                      }
                      }
                      
                      
                       if(mode==0x03){
                      بقیه فانکشن ها......
                      if(clear_lcd_d==0){
                      lcd_clear();
                      clear_lcd_a=0;
                      clear_lcd_b=0;
                      clear_lcd_c=0;
                      clear_lcd_d=1;
                      }
                      }
                      با تشکر

                      دیدگاه


                        #12
                        پاسخ : اجرای یک مرتبه LCD_Clear() در حلقه while (1)

                        خب خدا رو شکر که جواب گرفتی...

                        دیدگاه

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