اطلاعیه

Collapse
No announcement yet.

تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

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

    تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

    سلام
    من از آیسی ساعت همون ds1307 برای پروژه ساعت دارم استفاده میکنم همونطور که میدونید
    rtc_get_time(&h,&m,&s)
    این دستور رو داریم برای ساعت حالا میخوام از سون سگمنت استفاده کنم که برای چاپ باید آرایه اعداد مربوط به 0-9 رو معرفی کردم اما برای اینکه بکم از عضو های توی این آرایه استفاده کن باید بگم فلان عضو(عدد ثابت) حالا متغییر های h ,, m , s همه آرایه هستند چجوری باید عدد ثابت بشن؟؟
    از sprintf(buffer,"%d",h,)
    a=atoi(buffer)
    هم استفاده کردم اما حواب نگرفتم
    Every one can do everything so why you do this awful thing.

    #2
    پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

    نوشته اصلی توسط mnwato نمایش پست ها
    سلام
    من از آیسی ساعت همون ds1307 برای پروژه ساعت دارم استفاده میکنم همونطور که میدونید
    rtc_get_time(&h,&m,&s)
    این دستور رو داریم برای ساعت حالا میخوام از سون سگمنت استفاده کنم که برای چاپ باید آرایه اعداد مربوط به 0-9 رو معرفی کردم اما برای اینکه بکم از عضو های توی این آرایه استفاده کن باید بگم فلان عضو(عدد ثابت) حالا متغییر های h ,, m , s همه آرایه هستند چجوری باید عدد ثابت بشن؟؟
    از sprintf(buffer,"%d",h,)
    a=atoi(buffer)
    هم استفاده کردم اما حواب نگرفتم
    سلام به شما دوست گرامی

    یه مثال میزنم :
    ما یه آرایه داریم به این صورت : a[3] = {9,5,3}
    از اولین عضو ارایه شروع میکنیم
    1_ عددی که در اولین عضو آرایه قرار دارد 9 است
    2_ 9 رو در 100 ضرب میکنیم و میریزیم تو متغیر مثلا b
    3_ عددی که در دومین عضو آرایه قرار دارد 5 است
    4_ 5 را در 10 ضرب میکنیم و با متغیر b که قبلا مقدارش 900 بوده جمع میکنیم که میشه 950
    5_عددی که در سومین عنصر ارایه قرار دارد 3 است
    6_ آن را در 1 ضرب میکنیم و با متغیر b که قبلا مقدارش 950 بوده جمع میکنیم که میشه 953 که همون مقدار آرایه است

    شما میتونید کمی تغییر در این الگوریتم بوجود بیارید مثلا اول بیاید تعداد عناصری که در آرایه شما وجود داره رو پیدا کنید
    بعدش از آخر شروع کنید
    از آخر اولین عنصر آرایه باید در 1 ضرب شه
    از آخر دومین عنصر ارایه باید در 10 ضرب شه و
    . . .


    سوالی داشتید درخدمتم
    موفق باشید
    جدیدترین ویرایش توسط rezamajdi; ۱۶:۱۲ ۱۳۹۵/۰۶/۱۵.
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

      نوشته اصلی توسط rezamajdi نمایش پست ها
      سلام به شما دوست گرامی

      یه مثال میزنم :
      ما یه آرایه داریم به این صورت : a[3] = {9,5,3}
      از اولین عضو ارایه شروع میکنیم
      1_ عددی که در اولین عضو آرایه قرار دارد 9 است
      2_ 9 رو در 100 ضرب میکنیم و میریزیم تو متغیر مثلا b
      3_ عددی که در دومین عضو آرایه قرار دارد 5 است
      4_ 5 را در 10 ضرب میکنیم و با متغیر b که قبلا مقدارش 900 بوده جمع میکنیم که میشه 950
      5_عددی که در سومین عنصر ارایه قرار دارد 3 است
      6_ آن را در 1 ضرب میکنیم و با متغیر b که قبلا مقدارش 950 بوده جمع میکنیم که میشه 953 که همون مقدار آرایه است

      شما میتونید کمی تغییر در این الگوریتم بوجود بیارید مثلا اول بیاید تعداد عناصری که در آرایه شما وجود داره رو پیدا کنید
      بعدش از آخر شروع کنید
      از آخر اولین عنصر آرایه باید در 1 ضرب شه
      از آخر دومین عنصر ارایه باید در 10 ضرب شه و
      . . .


      سوالی داشتید درخدمتم
      موفق باشید
      ایده خوبی بود روش کار میکنم اگه مشکلی بود مزاحمتون میشم
      Every one can do everything so why you do this awful thing.

      دیدگاه


        #4
        پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

        نوشته اصلی توسط rezamajdi نمایش پست ها
        سلام به شما دوست گرامی

        یه مثال میزنم :
        ما یه آرایه داریم به این صورت : a[3] = {9,5,3}
        از اولین عضو ارایه شروع میکنیم
        1_ عددی که در اولین عضو آرایه قرار دارد 9 است
        2_ 9 رو در 100 ضرب میکنیم و میریزیم تو متغیر مثلا b
        3_ عددی که در دومین عضو آرایه قرار دارد 5 است
        4_ 5 را در 10 ضرب میکنیم و با متغیر b که قبلا مقدارش 900 بوده جمع میکنیم که میشه 950
        5_عددی که در سومین عنصر ارایه قرار دارد 3 است
        6_ آن را در 1 ضرب میکنیم و با متغیر b که قبلا مقدارش 950 بوده جمع میکنیم که میشه 953 که همون مقدار آرایه است

        شما میتونید کمی تغییر در این الگوریتم بوجود بیارید مثلا اول بیاید تعداد عناصری که در آرایه شما وجود داره رو پیدا کنید
        بعدش از آخر شروع کنید
        از آخر اولین عنصر آرایه باید در 1 ضرب شه
        از آخر دومین عنصر ارایه باید در 10 ضرب شه و
        . . .


        سوالی داشتید درخدمتم
        موفق باشید
        اومدم اونی که گفتین رو دری غالب buffer1 پیاده کردم و توی lcd نگاه میکنم اصلا اون عدد buffer3 که همون عدد درسته ساعت هست رو نشون نمیده. درحالیکه کد بنظر سالمه.
        جدا از اون روش فکر میکنم اگه بشه buffer3 رو که دارای اعداد h,m,s هست رو تک تک بخونیمش هم میشه؟؟؟ فقط وقتی این کار رو میکنم سون سگمنت کلا عدد نشون نمیده و بهم ریختست.
        اینم کد:
        while (1)      {            
        pd=0x01;
        rtc_get_time(&h,&m,&s);
        fun_elicit();
        fun_num();
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_puts(buffer3);
        lcd_gotoxy(0,1);
        lcd_puts(buffer1);
        for(i=0;i<6;i++)
        {
        delay_ms(2);
        PORTB=pd;
        PORTD=display[buffer1[i]];
        pd=pd<<1;
        }
        }
        }
        void fun_elicit(void)
        {
        a = buffer3[0];
        a = a*100000; //012345
        b = buffer3[1];
        b = b*10000;
        c = buffer3[2];
        c = c*1000;
        d = buffer3[3];
        d = d*100;
        e = buffer3[4];
        e = e*10;
        f = buffer3[5];
        z = a+b+c+d+e+f;
        z = z*-1;
        sprintf(buffer3,"%d%d%d",h,m,s);
        sprintf(buffer1,"%d",z);
        }
        void fun_num(void)
        {
        buffer1[5]=z%10;
        buffer1[4]=(z/10)%10;
        buffer1[3]=(z/100)%10;
        buffer1[2]=(z/1000)%10;
        buffer1[1]=(z/10000)%10;
        buffer1[0]=(z/100000)%10;
        }
        جدیدترین ویرایش توسط mnwato; ۰۲:۰۸ ۱۳۹۵/۰۶/۱۶.
        Every one can do everything so why you do this awful thing.

        دیدگاه


          #5
          پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

          دوستان لطفا راهنمایی کنید
          پروژه ساعت هست که قراره با سون سگمنت کار کنه.
          Every one can do everything so why you do this awful thing.

          دیدگاه


            #6
            پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

            خب من مشکلات عدم نمایش روی سون سگمنت رو حل کردم الان ساعت به صورت صحیح روی سون سگمنت نمایش داده میشه.
            فقط یه ایراد جزئی هست.>>> هز وقت ثانیه به 59 میرسه و دقیقه میخواد اضافه بشه وضعیتی غیر از ساعت کنونی رو پیدا میکنه اما بعد از 10 ثانیه به وضعیت صحیح و طبق ساعت لحظه ای بر میگرده. بنظرتون مشکل از کجاست؟
            اینم کد:
            [FONT=Yekan]while (1)[/FONT]      {   
            pd=0x01;
            rtc_get_time(&h,&m,&s);
            sprintf(buffer,"%d%d%d",h,m,s);
            z = atoi(buffer);
            fun_num();
            for(i=0;i<6;i++)
            {
            delay_ms(3);
            PORTD = pd;
            PORTB = display[buffer1[i]];
            pd = pd << 1;
            }
            [FONT=Yekan] }[/FONT]



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

            متوجه شدم مشکل از کجاست در کد دقت کنید دستور sprintf وقتی مثلا دقیقه برابر 5 است( عدد یک رقمی) به جای اینکه روی سون سگمنت 05 نشون بده میاد و فقط 5 نشون میده اما اگر همزمان مثلا ساعا باشه 2(عدد تک رقمی) بجای نمایش 02 میاد 2 رو میبره بغل 5 (دقیقه) و دوتا 00 که مربوط به رقم دهگان دقیقه و ساعت بود رو قرار میده در سمت چپترین رقم روی سون سگمنت
            حالا چه راه حلی دارید؟
            Every one can do everything so why you do this awful thing.

            دیدگاه


              #7
              پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

              محض رضای خدا یکی جواب بده
              Every one can do everything so why you do this awful thing.

              دیدگاه


                #8
                پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                ببینید اگه میخاید از sprintf استفاده کنید باید حتما کاراکترهای کنترلی اون رو بخونید و باهاشون آشنا بشید...
                به جای %d بهتره از
                کد:
                %2d
                استفاده کنید تا عدد صحیح رو در هر صورت دورقمی نشون بده...
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازی با AVR [آموزشی]

                دیدگاه


                  #9
                  پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                  نوشته اصلی توسط mnwato نمایش پست ها
                  محض رضای خدا یکی جواب بده
                  سلام به شما
                  میبخشید یه مدت نبودم

                  شما میتونید در دستور sprintf به این صورت عمل کنید
                  sprintf(buffer,"%d:%d:%d",h,m,s);

                  اینطوری اعداد از هم جدا میشن

                  اگه سوالی دارید بپرسید
                  موفق باشید
                  آرزوی سرافرازی برای ایران عزیز . . .


                  دیدگاه


                    #10
                    پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                    نوشته اصلی توسط rezamajdi نمایش پست ها
                    سلام به شما
                    میبخشید یه مدت نبودم

                    شما میتونید در دستور sprintf به این صورت عمل کنید
                    sprintf(buffer,"%d:%d:%d",h,m,s);

                    اینطوری اعداد از هم جدا میشن

                    اگه سوالی دارید بپرسید
                    موفق باشید
                    این برای وقتی نیست که روی lcd میخوایم نشون بدیم؟
                    الان ساعت کامل نشون میده فقط مشکل اینه که اگر ساعت اینجوری باشه( 020525) یعنی ساعت 2 و 5 دقیقه و 25 ثانیه. میاد و 002525 نشون میده یعنی صفر 02 و صفر 05 رو میزاره بقل هم و 2 رو هم میزاره بقل 5 .
                    راهی که گفتید رو هم پیاده کردم کلا ساعت و رو توی جای ثانیه نشون داد و جای خود ساعت و دقیقه هم 00 گزاشت
                    Every one can do everything so why you do this awful thing.

                    دیدگاه


                      #11
                      پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                      نوشته اصلی توسط mnwato نمایش پست ها
                      این برای وقتی نیست که روی lcd میخوایم نشون بدیم؟
                      الان ساعت کامل نشون میده فقط مشکل اینه که اگر ساعت اینجوری باشه( 020525) یعنی ساعت 2 و 5 دقیقه و 25 ثانیه. میاد و 002525 نشون میده یعنی صفر 02 و صفر 05 رو میزاره بقل هم و 2 رو هم میزاره بقل 5 .
                      راهی که گفتید رو هم پیاده کردم کلا ساعت و رو توی جای ثانیه نشون داد و جای خود ساعت و دقیقه هم 00 گزاشت
                      سلام به شما

                      آیا حجم بافرتو ن به اندازه هست ؟؟؟
                      بهتره بافرتون رو با حجم 16 بایت در نظر بگیرید که خیالمون از بابت حجم بافر راحت بشه
                      ضمنا به جای d% از 2d% استفاده کنید
                      آرزوی سرافرازی برای ایران عزیز . . .


                      دیدگاه


                        #12
                        پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                        نوشته اصلی توسط rezamajdi نمایش پست ها
                        سلام به شما

                        آیا حجم بافرتو ن به اندازه هست ؟؟؟
                        بهتره بافرتون رو با حجم 16 بایت در نظر بگیرید که خیالمون از بابت حجم بافر راحت بشه
                        ضمنا به جای d% از 2d% استفاده کنید
                        مقدار بافر رو اصلا انتخاب نکردم که روی بیشتر مقدار 256 قرار بده
                        مشکلی که گفتم صفر ها رو میبره سمت چپ درست شد %02d گذاشتم درست شد
                        الان باتن برای تغییر دقیقه و ساعت گزاشتم ، دقیقه رو تا 59 اضافه میکنم مشکلی نداره اما ساعت وقتی میخواد 04 بشه یدفه اینجوری میشه و دیگه کلا همینجوریه
                        Every one can do everything so why you do this awful thing.

                        دیدگاه


                          #13
                          پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                          نوشته اصلی توسط mnwato نمایش پست ها
                          مقدار بافر رو اصلا انتخاب نکردم که روی بیشتر مقدار 256 قرار بده
                          مشکلی که گفتم صفر ها رو میبره سمت چپ درست شد %02d گذاشتم درست شد
                          الان باتن برای تغییر دقیقه و ساعت گزاشتم ، دقیقه رو تا 59 اضافه میکنم مشکلی نداره اما ساعت وقتی میخواد 04 بشه یدفه اینجوری میشه و دیگه کلا همینجوریه
                          نمیدونم دقیقا مشکل از کجاست اما سگمنت هایی که باید روشن میشدن روشن نشدن
                          آرزوی سرافرازی برای ایران عزیز . . .


                          دیدگاه


                            #14
                            پاسخ : تبدیل آرایه به عدد ثابت برای نمایش در سون سگمنت

                            نوشته اصلی توسط rezamajdi نمایش پست ها
                            نمیدونم دقیقا مشکل از کجاست اما سگمنت هایی که باید روشن میشدن روشن نشدن
                            کل برنامه رو یه نگاه بندازید.
                            اون 16بیتی که گفتید چجوریه؟
                            unsigned char buffer[] این میشه 8 بیت؟
                            [FONT=Yekan]#include <mega16.h>[/FONT]#include <i2c.h>
                            #include <ds1307.h>
                            #include <alcd.h>
                            #include <delay.h>
                            #include <stdio.h>
                            #include <stdlib.h>
                            #define upsec PINC.4
                            #define upmin PINC.2
                            #define upclk PINC.3
                            flash char display[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
                            char pd,h,m,s;
                            int i,hh=0,mm=0,ss=0;
                            long int z;
                            unsigned char buffer[];
                            unsigned char buffer1[];
                            void fun_num(void);
                            void main(void)
                            {
                            PORTB=0x00;
                            DDRB=0xFF;
                            PORTD=0x00;
                            DDRD=0x00;
                            i2c_init();
                            rtc_init(0,0,0);
                            lcd_init(16);


                            while (1)
                            {
                            pd=0x01;
                            rtc_get_time(&h,&m,&s);
                            sprintf(buffer,"%02d%02d%02d",h,m,s);
                            z = atoi(buffer);

                            fun_num();
                            lcd_clear();
                            lcd_puts(buffer1);

                            for(i=0;i<6;i++)
                            {
                            delay_ms(3);
                            PORTD = pd;
                            PORTB = display[buffer1[i]];
                            pd = pd <<1;
                            }
                            if( upclk == 0 )
                            {
                            while(upclk == 0){}
                            hh++;
                            if( hh == 24 ) hh=0; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 0
                            rtc_set_time(hh,mm,ss);

                            }


                            if( upmin == 0 )
                            {
                            while(upmin == 0){}
                            mm++;
                            if( mm == 60 ) mm=0; // 0 1 2 3 ... 55 56 57 58 59 0
                            rtc_set_time(hh,mm,ss);

                            }
                            if( upsec == 0 )
                            {
                            while(upsec == 0){}
                            ss++;
                            if( ss == 60 ) ss=0; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 0
                            rtc_set_time(hh,mm,ss);

                            }
                            }
                            }
                            void fun_num(void)
                            {

                            buffer1[5]=z%10;
                            buffer1[4]=(z/10)%10;
                            buffer1[3]=(z/100)%10;
                            buffer1[2]=(z/1000)%10;
                            buffer1[1]=(z/10000)%10;
                            buffer1[0]=(z/100000)%10;
                            [FONT=Yekan] }[/FONT]


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

                            یه سوال دیگه چرا کدویژن اینجوریه یه موقع هایی کدی که قبلا نوشته بودی درست کار میکرده هم درست کار نمیکنه !!!
                            ولی وقتی دوباره از اول یه پروژه جدید درست میکنی و از اول مینویسیم درست میشه الان دیگه همون ساعت رو هم که نشون میداد دیگه نشون نمیده کد های عجیب و غریب نشون میده

                            الان شما اینو بگی خیلی کمک بزرگی کردی:
                            من یه بار دیگه پروژه رو نوشتم شروع کردم از ساعت 00 00 00 به زیاد کردن ساعت و دقیقه . تا یه جایی مشکلی نداره اما وقتی انگار عددش که توی کاراکتر ذخیره میشه بزرگ میشه اینم عددش به هم میریزه
                            جدیدترین ویرایش توسط mnwato; ۰۰:۵۲ ۱۳۹۵/۰۶/۱۹.
                            Every one can do everything so why you do this awful thing.

                            دیدگاه

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