اطلاعیه

Collapse
No announcement yet.

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

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

  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

    این برنامه فقط واسه تسته و اینجوری فکر نکنم کسی کار کنه
    موفق باشید
    سلام و خداقوت
    یه راهنمایی دیگه میخوام خدا خیرت بده داداش
    من برای همین پروژه میخوام در خط دوم ال سی دیم فقط دما رو با سنسور ds18b20 به این برنامه چیا باید اضافه کنم؟
    void main(void)

    {
    char buffer[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    unsigned char devices;

    float temp;

    lcd_init(16);

    devices=w1_init();

    while(devices>0)

    {
    temp=ds18b20_temperature(0);

    lcd_gotoxy(0,0);

    sprintf(buffer,"T:%6.4f%cC",temp,223);

    lcd_clear();

    lcd_puts(buffer);

    delay_ms(100);

    }
    }


    این برنامه رو با این سنسور از نت گیر آوردم ولی وقتی اضافه میکنم به برنامه خطا میده
    یعنی آسی رو به mega8 تغییر دادم و تغییرات دیگه ولی خطا میده.

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

    این برنامه فقط واسه تسته و اینجوری فکر نکنم کسی کار کنه
    موفق باشید
    خیلی ممنون سرعتشم درست شد .عالی ....
    برای سیو در حافظه EEPROM هم باید setting رو با دستور سیو و لود تعریف کنم ؟ شرمنده داداش اگه اینقد مبتدیم ،اول راهم

    یک دیدگاه بنویسید:


  • mashroti
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

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

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

    یک دیدگاه بنویسید:


  • mashroti
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

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

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

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

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

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

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

    یک دیدگاه بنویسید:


  • mashroti
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

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

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

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان 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;
    }
    این برنامه رو تست کن
    کدویژن نداشتم کامپایل بزنمش
    داداش خیلی گلی الان تستش میکنم .فایل پروتئوسو کامل فرستادم شاید ورژن پروتئوست پاینه

    یک دیدگاه بنویسید:


  • mashroti
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان 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; 2020/06/05, 15:57.

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان 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; 2020/06/05, 15:01.

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان c

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


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

    یک دیدگاه بنویسید:


  • mashroti
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان 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;

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

    یک دیدگاه بنویسید:


  • Sodokom
    replied
    پاسخ : تغییر متغیر توسط سه دکمه و منو ساده با زبان 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;

    }

    یک دیدگاه بنویسید:

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