اطلاعیه

Collapse
No announcement yet.

برنامه نویسی برای سون سگمنت

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

    برنامه نویسی برای سون سگمنت

    سلام من یه برنامه برای سون سگمنت نوشتم طبق اموزش ها و پست هایی که تو سایت دیدم برای یه سون سگمنت کاتد مشترک سه تایی
    ولی سون سگمنت اون عدد درست نشون نمیده و اصلا عدد نشون نمیده
    من تو اینجا دو تا سنسور به میکرو وصل کردم و سنسور برای هر بار خواندن نیاز به وقفه ای دو ثانیه ای داره من برای نمایش اطلاعات روی سون سگمنت به جای وقفه یه حلقه تعریف کردم که اعداد رو رویه سون سگمنت نشون بده انقدر تکرار کنه تا زمان تلف شده به دو ثانیه برسه.
    و برنامه رو طوری نوشتم یک بار مقدار سنسور اول و یک بار مقدار سنسور دوم رو رویه سون سگمنت نشون بده برنامم هم به صورت زیر هست
    پورت avr به سون سگمنت
    کد:
    PORTA.0=A
    PORTA.1=B
    PORTA.2=C
    PORTA.3=D
    PORTA.4=E
    PORTA.5=F
    PORTA.6=G
    1=PORTC.7
    2=PORTC.6
    3=PORTC.5
    اتصال نامی پایه های سون سگمنت به میکرو به صورت بالا هست

    متغییر ارایه برای سون سگمنت:
    کد:
    unsigned char seg[10]={0xfc,0x60,0xd8,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
    برنامه نمایش روی سون سگمنت t دارای یک مقدار سه رقمی و h دارای یک مقدار دو رقمی:
    کد:
     if(b=2){
     a[1]=h%10;
     a[0]=(h/10)%10;
     for(b=0;b<300;b++){
     PORTC.7=1;
     seg_port=seg[a[0]];
     delay_ms(4);
     PORTC.7=0;
     PORTC.6=1;
     seg_port=seg[a[1]];
     delay_ms(4);
     PORTC.6=0;
     }
     b=1;
     }
     else{
     a[2]=t%10;
     a[1]=(t/10)%10;
     a[0]=(t/100)%10;
     for(b=0;b<200;b++){
     PORTC.7=1;
     seg_port=seg[a[0]];
     delay_ms(4);
     PORTC.7=0;
     PORTC.6=1;
     seg_port=seg[a[1]];
     delay_ms(4);
     PORTC.6=0;
     PORTC.5=1;
     seg_port=seg[a[2]];
     delay_ms(4);
     PORTC.5=0;
     }
     b=2;
     
     }
    کل برنامه:
    کد:
    #include <io.h>
    #include <dht21.h>
    #asm
        .equ __w1_port=0x18
        .equ __w1_bit=1
      #endasm
    #include <ds18b20.h>
    #include <1wire.h>
    #include <string.h>
    #define seg_ddr DDRA
    #define seg_port PORTA
    
    
    
    void main(void)
    {
    unsigned char seg[10]={0xfc,0x60,0xd8,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
    int a[3],b;
    
    unsigned char rom_codes[1][9];
    int temp=0,t2;
    int humidity=0;
    float t3;
    int t,h;
    DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    seg_ddr=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
    seg_port=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0);
    PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
    delay_ms(2000);
    seg_port=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
    w1_search(0xf0,rom_codes);
    ds18b20_init(&rom_codes[0][0],0,80,3);
    while (1)
       {   
       // Place your code here
       read_dht11(&temp,&humidity);
       t3=ds18b20_temperature(&rom_codes[0][0]);
       t2=t3*10;
       h=humidity;
       t=t2;
       
       if(b=2){
     a[1]=h%10;
     a[0]=(h/10)%10;
     for(b=0;b<300;b++){
     PORTC.7=1;
     seg_port=seg[a[0]];
     delay_ms(4);
     PORTC.7=0;
     PORTC.6=1;
     seg_port=seg[a[1]];
     delay_ms(4);
     PORTC.6=0;
     }
     b=1;
     }
     else{
     a[2]=t%10;
     a[1]=(t/10)%10;
     a[0]=(t/100)%10;
     for(b=0;b<200;b++){
     PORTC.7=1;
     seg_port=seg[a[0]];
     delay_ms(4);
     PORTC.7=0;
     PORTC.6=1;
     seg_port=seg[a[1]];
     delay_ms(4);
     PORTC.6=0;
     PORTC.5=1;
     seg_port=seg[a[2]];
     delay_ms(4);
     PORTC.5=0;
     }
     b=2;
     
     }
       }
    }
    با تشکر از این وقت گذاشتید و سوالمو خوندین با تشکر
    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

    #2
    پاسخ : برنامه نویسی برای سون سگمنت

    کد:
    unsigned char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x5f,0x07,0x7f,0x6f};
    مشکل اول حل شد و اعداد درست شد و حالا یه مشکل جدید دارم اون اینه که یه بار باید دو تا از ارقام روشن بشه و یه بار سه تا از ارقام روشن بشه
    اما الان رقم سوم معلوم نیست به چه صورته و دوبار به صورت سه رقمی روشن میشه و یه بار یه رقمی
    دوستان لطفا کمک کنید
    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

    دیدگاه


      #3
      پاسخ : برنامه نویسی برای سون سگمنت

      جان من حداقل یه نگاه بندازین :cry: :biggrin:
      سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

      دیدگاه


        #4
        پاسخ : برنامه نویسی برای سون سگمنت

        وقت نیس زیاد رو برنامه وقت بزارم فقط در یک نگاه دیدم که شرط if که گذاشتی صحیح نیست.منظورم اینه :

        کد:
         if(b=2){

        که داخل پرانتز باید به صورت دو مساوی باشه. (==)
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : برنامه نویسی برای سون سگمنت

          نوشته اصلی توسط سوران آراسته
          وقت نیس زیاد رو برنامه وقت بزارم فقط در یک نگاه دیدم که شرط if که گذاشتی صحیح نیست.منظورم اینه :

          کد:
           if(b=2){

          که داخل پرانتز باید به صورت دو مساوی باشه. (==)
          ممنون که جواب دادین اینو می دونم اشتباه تایپیه کلا شرطو حذف کردم
          الان این قسمت برنامه مشکل داره اما نمیتونم پیدا کنم
          کد:
           a[1]=h%10;
           a[0]=(h/10)%10;
           for(b=0;b<1000;b++){
           PORTC.7=1;
           seg_port=seg[a[0]];
           delay_ms(1);
           PORTC.7=0;
           PORTC.6=1;
           seg_port=seg[a[1]];
           delay_ms(1);
           PORTC.6=0;
           delay_ms(1);
           }
           
           a[2]=t%10;
           a[1]=(t/10)%10;
           a[0]=(t/100)%10;
           for(b=0;b<1000;b++){
           PORTC.7=1;
           seg_port=seg[a[0]];
           delay_ms(1);
           PORTC.7=0;
           PORTC.6=1;
           seg_port=seg[a[1]];
           delay_ms(1);
           PORTC.6=0;
           PORTC.5=1;
           seg_port=seg[a[2]];
           delay_ms(1);
           PORTC.5=0;
           delay_ms(1);
           }
          باتشکر
          سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

          دیدگاه


            #6
            پاسخ : برنامه نویسی برای سون سگمنت

            ممنون مشکل حل شد مشکل از پورت جی تگ بود بعد از چهار بار غیر فعال کردن درست شد
            سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

            دیدگاه

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