اطلاعیه

Collapse
No announcement yet.

تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

    تغییر متغیر توسط سه دکمه و منو ساده با زبان c

    سلام بر همگی دوستان
    من میخوام به مدارم سه دکمه اضافه کنم (ست،بالا و پایین) که که وقتی ست رو بزنی بره به حالت تنظیم و مینیمم ماکزیمم مدارم رو تغییر بدم.
    خیلی ممنون میشم اگه کمک کنین .


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

    نوشته اصلی توسط Sodokom نمایش پست ها
    سلام بر همگی دوستان
    من میخوام به مدارم سه دکمه اضافه کنم (ست،بالا و پایین) که که وقتی ست رو بزنی بره به حالت تنظیم و مینیمم ماکزیمم مدارم رو تغییر بدم.
    خیلی ممنون میشم اگه کمک کنین .

    سلام
    شما هیچ چیزی از پروژت تعریف نکردی
    نوع میکروت چیه؟ با چه کامپایلری کار میکنی؟ برنامت به چه صورته و...

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

    دیدگاه


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

      سلام خیلی ممنون
      ببخشید خیلی کلی بود ،اما به صورت کلی تر اینکه من میخوام فشار رو تنظیم کنم از طریق سنسور و این برنامه رو براش تعریف کردم که البته این حلقه فقط مربوط به قسمت فشاره دستگاهه، همونطورم که مشخصه بدلیل نداشتن تخصص بیشتر مقدار محدوده کنترل رو مجبورم از طریق خود کدویژن تغییر بدم ( max:18 min:10)
      اگه بیشتر بتونی کمک کنی واقعا ممنون میشم.
      while (1)
      {
      Vout = (float)read_adc(0)/1024*5;
      P_kPa = 5*(Vout/Vs-0.2);
      P_milibar = 10*P_kPa;

      delay_ms(1000);
      lcd_clear();
      lcd_gotoxy(0,0);
      sprintf(text, "%.2f mBar",P_milibar);
      lcd_puts(text);

      if(P_milibar>18)
      PORTD.0=1;
      else if(P_milibar<10)
      PORTD.0=0;

      }

      دیدگاه


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

        نوشته اصلی توسط Sodokom نمایش پست ها
        سلام خیلی ممنون
        ببخشید خیلی کلی بود ،اما به صورت کلی تر اینکه من میخوام فشار رو تنظیم کنم از طریق سنسور و این برنامه رو براش تعریف کردم که البته این حلقه فقط مربوط به قسمت فشاره دستگاهه، همونطورم که مشخصه بدلیل نداشتن تخصص بیشتر مقدار محدوده کنترل رو مجبورم از طریق خود کدویژن تغییر بدم ( max:18 min:10)
        اگه بیشتر بتونی کمک کنی واقعا ممنون میشم.
        while (1)
        {
        Vout = (float)read_adc(0)/1024*5;
        P_kPa = 5*(Vout/Vs-0.2);
        P_milibar = 10*P_kPa;

        delay_ms(1000);
        lcd_clear();
        lcd_gotoxy(0,0);
        sprintf(text, "%.2f mBar",P_milibar);
        lcd_puts(text);

        if(P_milibar>18)
        PORTD.0=1;
        else if(P_milibar<10)
        PORTD.0=0;

        }
        بازم پین های مربوط که کلید و غیره رو مشخص نگردی
        فایل پروژت با شبیه سازی پروتئوس اگ بتونی اپلود کنی خیلی بهتره

        دیدگاه


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

          نوشته اصلی توسط mashroti نمایش پست ها
          بازم پین های مربوط که کلید و غیره رو مشخص نگردی
          نوشته اصلی توسط mashroti نمایش پست ها
          فایل پروژت با شبیه سازی پروتئوس اگ بتونی اپلود کنی خیلی بهتره


          فایل پروتئوس
          بازم ممنون از لطفت

          دیدگاه


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

            کسی جواب منو نمیده ؟
            mashroti جان نیستی؟ اگه روش کار بشه بقیه بچه های انجمنم استفاده ببرن،چون این پروژه رو جایی ندیدم باشه

            دیدگاه


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

              نوشته اصلی توسط Sodokom نمایش پست ها
              کسی جواب منو نمیده ؟
              mashroti جان نیستی؟ اگه روش کار بشه بقیه بچه های انجمنم استفاده ببرن،چون این پروژه رو جایی ندیدم باشه
              سلام
              بودنش که قطعا هست. من خودم چندین بار دوستانی رو برای همچین مواردی توی انجمن راهنمایی کردم!
              شما کافیه یه متغیر درست کنید مثلا به اسم منو که 3 تا وضعیت عادی، تنظیم مینیمم و تنظیم ماکزیمم داشته باشه. 3 تا وضعیتی که میگم میتونه 3 تا مقدار باشه که توی این متغیر قراره بگیره. مثلا 0، 1 و 2.
              کافیه کلید ست توی برنامه خونده بشه و اگر لازم شد وضعیت رو تغییر بده. در ادامه یه ساختار if else یا switch case که بسته به وضعیت کلیدهای بالا و پایین رو بخونه و مقادیر مینیمم و ماکزیمم رو تغییر بده یا اینکه اگر توی وضعیت عادی بود، چیزایی که لازمه روی LCD نمایش بده. یه چیزی توی این مایه ها:

              unsigned char menu = 0;
              int min = 0;
              int max = 0;
              char str[17];
              while(1)
              {
              if (ReadSetKey() == 1)
              {
              if (menu < 2)
              menu++;
              else
              menu = 0;
              }

              switch (menu)
              {
              case 0:
              sprintf(str, "min:%d max:%d", min, max);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(str);
              break;


              case 1:
              if (ReadUpKey() == 1)
              min++;
              if (ReadDownKey() == 1)
              min--;
              sprintf(str, "min:%d", min);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(str);
              break;


              case 2:
              if (ReadUpKey() == 1)
              max++;
              if (ReadDownKey() == 1)
              max--;
              sprintf(str, "max:%d", max);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(str);
              break;
              }
              }
              جدیدترین ویرایش توسط hossein.m98; ۱۵:۰۱ ۱۳۹۹/۰۳/۱۶.

              دیدگاه


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

                سلام مجدد
                فایل پروتئوس باز شد ولی خالی بود

                #include <mega8.h>#include <delay.h>
                #include <stdio.h>
                #include <alcd.h>
                #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))


                #defin set PIND.0
                #defin up PIND.1
                #defin down PIND.2


                void setting(int *min, int *max);
                unsigned int read_adc(unsigned char adc_input)
                {
                ADMUX=adc_input | ADC_VREF_TYPE;
                delay_us(10);
                ADCSRA|=(1<<ADSC);
                while ((ADCSRA & (1<<ADIF))==0);
                ADCSRA|=(1<<ADIF);
                return ADCW;
                }


                void main(void)
                {
                float Vout, P_kPa, P_milibar;
                char text[16];
                unsigned char i;
                int max = 18 ,min = 10;
                float Vs = 3;


                DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);


                PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


                DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);


                PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

                DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (1<<DDD0);


                PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


                ADMUX=ADC_VREF_TYPE;
                ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
                SFIOR=(0<<ACME);


                lcd_init(16);


                while (1)
                {
                Vout = (float)read_adc(0)/1024*5;
                P_kPa = 5*(Vout/Vs-0.2);
                P_milibar = 10*P_kPa;

                for(i=0 ; i<100 ;i++)
                {
                if(set==1)setting(&min,&max);
                delay_ms(10);
                }
                lcd_clear();
                lcd_gotoxy(0,0);
                sprintf(text, "%.2f mBar",P_milibar);
                lcd_puts(text);

                if(P_milibar>max)
                PORTD.0=1;
                else if(P_milibar<min)
                PORTD.0=0;

                }
                }
                void setting(int *min, int *max)
                {
                int Min=min,Max=max;
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_puts("Set Min:");
                delay_ms(500);
                do
                {
                lcd_gotoxy(9,0);
                sprintf(text, "%03d",Min);
                lcd_puts(text);
                if(up==0)Min++;
                if(down==0)Min--;
                delay_ms(250);
                }while(set==1)

                lcd_gotoxy(0,1);
                lcd_puts("Set Max:");
                delay_ms(500);
                do
                {
                lcd_gotoxy(9,1);
                sprintf(text, "%03d",Max);
                lcd_puts(text);
                if(up==0)Max++;
                if(down==0)Max--;
                delay_ms(250);
                }while(set==1)
                *min = Min;
                *max = Max;
                }




                این برنامه رو تست کن
                کدویژن نداشتم کامپایل بزنمش
                جدیدترین ویرایش توسط mashroti; ۱۵:۵۷ ۱۳۹۹/۰۳/۱۶.

                دیدگاه


                  #9
                  پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                  خیلی ممنونم حسین جان
                  خیلی گشتم ولی پیدا نکردم ،شایدم خوب نگشتم

                  دلیل: ادغام دو پست برای جلوگیری از اسپم

                  نوشته اصلی توسط mashroti نمایش پست ها
                  سلام مجدد
                  فایل پروتئوس باز شد ولی خالی بود
                  کد:
                  #include <mega8.h>#include <delay.h>
                  #include <stdio.h>
                  #include <alcd.h>
                  #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))
                  
                  
                  #defin set    PIND.0
                  #defin up    PIND.1
                  #defin down    PIND.2
                  
                  
                  void setting(int *min, int *max);
                  unsigned int read_adc(unsigned char adc_input)
                  {
                  ADMUX=adc_input | ADC_VREF_TYPE;
                  delay_us(10);
                  ADCSRA|=(1<<ADSC);
                  while ((ADCSRA & (1<<ADIF))==0);
                  ADCSRA|=(1<<ADIF);
                  return ADCW;
                  }
                  
                  
                  void main(void)
                  {
                  float Vout, P_kPa, P_milibar;
                  char text[16];
                  unsigned char i;
                  int max = 18 ,min = 10;
                  float Vs = 3; 
                  
                  
                  DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
                  
                  
                  PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
                  
                  
                  DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
                  
                  
                  PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                   
                  DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (1<<DDD0);
                  
                  
                  PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
                  
                  
                  ADMUX=ADC_VREF_TYPE;
                  ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
                  SFIOR=(0<<ACME);
                  
                  
                  lcd_init(16);
                  
                  
                  while (1)
                        {
                        Vout = (float)read_adc(0)/1024*5;
                        P_kPa = 5*(Vout/Vs-0.2);
                        P_milibar = 10*P_kPa;
                        
                        for(i=0 ; i<100 ;i++)
                        {
                            if(set==1)setting(&min,&max);
                        }
                        lcd_clear();
                        lcd_gotoxy(0,0);
                        sprintf(text, "%.2f mBar",P_milibar);
                        lcd_puts(text);
                        
                        if(P_milibar>max)
                          PORTD.0=1;
                        else if(P_milibar<min)
                          PORTD.0=0;   
                        
                        }
                  }
                  void setting(int *min, int *max)
                  {
                      int Min=min,Max=max;
                      lcd_clear();
                      lcd_gotoxy(0,0);
                      lcd_puts("Set Min:");
                      delay_ms(500);
                      do
                      {
                          lcd_gotoxy(9,0);
                          sprintf(text, "%03d",Min);
                          lcd_puts(text);
                          if(up==0)Min++;
                          if(down==0)Min--;
                          delay_ms(250);
                      }while(set==1)
                          
                      lcd_gotoxy(0,1);
                      lcd_puts("Set Max:");
                      delay_ms(500);
                      do
                      {
                          lcd_gotoxy(9,1);
                          sprintf(text, "%03d",Max);
                          lcd_puts(text);
                          if(up==0)Max++;
                          if(down==0)Max--;
                          delay_ms(250);
                      }while(set==1)    
                      *min = Min;
                      *max = Max;
                  }
                  این برنامه رو تست کن
                  کدویژن نداشتم کامپایل بزنمش
                  داداش خیلی گلی الان تستش میکنم .فایل پروتئوسو کامل فرستادم شاید ورژن پروتئوست پاینه

                  دیدگاه


                    #10
                    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                    نوشته اصلی توسط Sodokom نمایش پست ها
                    داداش خیلی گلی الان تستش میکنم .فایل پروتئوسو کامل فرستادم شاید ورژن پروتئوست پاینه
                    ورژن 8.9 پروتئوس من
                    نمیدونم والا

                    واسه این برنامه هم توی قسمت شرط های if با توجه به پول آپ و پول داون بودن پین باید خودت صفر و یک بودنشو تغییر بدی
                    چون کدویژن نداشتم نمیشد تست کنم دیگ شرمنده

                    ولی میشه خیلی بهتر از این نوشت برنامه رو تا بهتر بشه

                    دیدگاه


                      #11
                      پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                      نوشته اصلی توسط mashroti نمایش پست ها
                      ورژن 8.9 پروتئوس من
                      نمیدونم والا

                      واسه این برنامه هم توی قسمت شرط های if با توجه به پول آپ و پول داون بودن پین باید خودت صفر و یک بودنشو تغییر بدی
                      چون کدویژن نداشتم نمیشد تست کنم دیگ شرمنده

                      ولی میشه خیلی بهتر از این نوشت برنامه رو تا بهتر بشه
                      همینم بسیار عالیه .نتیجشو اطلاع میدم و انشاالله کامل شدشو میزارم.تو فایل پروتئوسم مشکل از من بود معذرت میخوام،اصلاحش میکنم و آپلود میکنم.
                      بازم ممنون

                      دیدگاه


                        #12
                        پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                        نوشته اصلی توسط mashroti نمایش پست ها
                        ورژن 8.9 پروتئوس من
                        نمیدونم والا

                        واسه این برنامه هم توی قسمت شرط های if با توجه به پول آپ و پول داون بودن پین باید خودت صفر و یک بودنشو تغییر بدی
                        چون کدویژن نداشتم نمیشد تست کنم دیگ شرمنده

                        ولی میشه خیلی بهتر از این نوشت برنامه رو تا بهتر بشه
                        داداش برنامه خطاهای متعددی داره هر کار کردم رفع نشد.
                        اینم فایل پروتئوسش

                        البته من برنامه ای که فرستادی رو کمی تغییر دادم و پورت d0 رو که خروجی بود از d1 , d2 , d3 استفاده کردم برای ورودی. ولی بازم نشد

                        دیدگاه


                          #13
                          پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                          دیدگاه


                            #14
                            پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                            سلام
                            بسیار عالی شده داداش ،تا اینجا تو پروتئوس کامل جواب داده حالا مداریشم میبندم ، کندی عملکردش مربوط به انتخاب کریستال داخلی که براش 1M انتخاب کردم میشه یا از جای دیگه تو برنامس؟.از لطفت بسیار ممنونم رحمت و برکت بسیار زیاد برای شما دوست عزیز به امید الله

                            دیدگاه


                              #15
                              پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

                              نوشته اصلی توسط Sodokom نمایش پست ها
                              سلام
                              بسیار عالی شده داداش ،تا اینجا تو پروتئوس کامل جواب داده حالا مداریشم میبندم ، کندی عملکردش مربوط به انتخاب کریستال داخلی که براش 1M انتخاب کردم میشه یا از جای دیگه تو برنامس؟.از لطفت بسیار ممنونم رحمت و برکت بسیار زیاد برای شما دوست عزیز به امید الله
                              سلام. خواهش میکنم
                              کریستالی که انتخاب میکنی باید با تنظیمات داخل کدویژن یکی باشه
                              اگ منظورت از سرعت کم اینه که اعداد دیر تغییر میکنه که تو برنامه میتونی واسه کلید ها به جای تاخیر از شرط های مختلف استفاده کنی تا تاخیر رو برداری و سرعت برنامه بره بالا

                              این برنامه فقط واسه تسته و اینجوری فکر نکنم کسی کار کنه
                              موفق باشید

                              دیدگاه

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