اطلاعیه

Collapse
No announcement yet.

سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

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

    سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

    با سلام. من میخواهم 8 تا پورت ورودی رو بخونم و بر اساس این 8 بیت، آن ها را به کاراکتر متناظر تبدیل کنم.مثلا پورت های PB.0 , PB.1,PD.3 ,PD.0,PB.3,PC.0,PC.1,PC.7 به ترتیب دارای مقادیر 01000011 باشند که معادل 67 یعنی کاراکتر C هست.
    (دقت کنید که پایه های مختلف را می خواهم بعنوان بیت ها در نظر بگیرم)
    حالا فرض کنید آرایه ای به صورت زیر دارم:
    کد:
    char matn[4];
    و میخواهم حاصل تبدیل را در یکی از خانه های این آرایه بریزم. ممنون می شوم کمکم کنید.(به زبان c)
    با تشکر

    #2
    پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

    سلام دادا.
    راستش درست متوجه نشدم.
    برا خواندن اطلاعات از پورت که کاری نداره. کافیه هر پین رو جداگانه بخونی و بسته به محل قرار گیری در بایت مورد نظر، اطلاعات رو شیفت بدی.
    مثلاً:
    کد:
    unsigned char data;
    data = (PB.0);
    data = data | (PINB.0>>1);
    data = data | (PINB.2>>2);
    .
    .
    .
    .
    data = data | (PINC.7>>7);
    واسه تبدیل عدد به کد اسکی و .. هم که فکر کنم خود c کتابخانه داره.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

      راستی با دستور sprintf هم میتونی یه عدد رو رشته کنی.
      تشکر لازم نیست!

      دیدگاه


        #4
        پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

        ممنون از شما.
        من شیفت دادن رو بلد نیستم.
        یعنی با توجه به کد شما ، اگه PB.0=0 , PB.2=1 باشد، متغیر data برایر است با 10 یا 01؟

        در ضمن دستوری که همین متغیر data را به char تبدیل کند چیست؟

        دیدگاه


          #5
          پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

          ببین من مدار زیر رو بستم و این برنامه رو نوشتم و می خواهم بر اساس کلید هایی که وصله کاراکتر متانظر رو روی LCD نمایش بده ولی هیچی نشون نمیده:
          کد:
          while (1)
             {
                 
              
          MyData = (PINB.0);
          MyData = MyData | (PINB.0>>1);
          MyData = MyData | (PINB.1>>1);
          MyData = MyData | (PINB.2>>2); 
          MyData = MyData | (PINB.3>>3);
          MyData = MyData | (PINB.4>>4);
          MyData = MyData | (PINB.5>>5);
          MyData = MyData | (PINB.6>>6);
          MyData = MyData | (PINC.7>>7);    
          
             lcd_clear();
             lcd_gotoxy(0,0);
             lcd_putchar(MyData);
             
             };
          اینم مدار پروتئوس:

          JoyStick(LCD).rar - 14 KB

          دیدگاه


            #6
            پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

            سلام دادا.
            من شیفت دادن رو بلد نیستم.
            یه متغیر 8 بیتی رو در نظر بگیر (که میشه یه بایت). حالا هر کدوم از این بیت ها رو دونه دونه بچین سر جای خودش. برا این کار از دستور شیفت و اور استفاده کن.
            اگه نتونستی بگو تا برات یه کد بنویسم.

            در ضمن دستوری که همین متغیر data را به char تبدیل کند چیست؟
            شما میخاین معادل کد اسکی رو بریزین توی lcd. پس باید عدد متناظر اسکی حرف مورد نظر رو بسازین. مثلاً کاراکتر 2 دارای کد اسکی 50 هستش. برای تبدیل عدد 2 به کاراکتر 2 باید اونو با 48 ( که همون کد اسکی کاراکتر 0 ) جمع کنین.
            تشکر لازم نیست!

            دیدگاه


              #7
              پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

              ممنون. من میخوام با توجه به برنامه و مداری که گذاشتم، مثلا اگر کلید 1و2و7 وصل بود و بقیه قطع، روی lcd کارکتر C نمایش داده بشه و به همین ترتیب برای بقیه دکمه ها.
              ممنون میشوم اشکالش رو بگین که چرا هیچی نشون نمیده.

              دیدگاه


                #8
                پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

                کسی نظری نداره؟

                دیدگاه


                  #9
                  پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

                  بالاخره تونستم. البته به جای کد شما از این کد استفاده کردم:
                  کد:
                  unsigned char data;
                  data = 0 << 7 |
                           1 << 6 |
                           0 << 5 |
                           0 << 4 |
                           0 << 3 |
                           0 << 2 |
                           1 << 1 |
                           1 << 0;
                  و دیگه از این بابت مشکلی ندارم و به درستی با دستور lcd_putchar(data); کاراکتر C رو نمایش میده.
                  حالا سوالی که دارم اینه که چطوری بر عکس این کار رو انجام بدم؟
                  یعنی یک کاراکتر دریافت کنم و بیت های اون رو به پورت ها اختصاص بدم؟
                  ممنون.

                  دیدگاه


                    #10
                    پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

                    فرض کنید در متغیر unsigned char data مقدار "C" یا همان 01000011 ذخیره شده است. حالا چجوری هر کدام از این بیت ها را بخوانم؟ راهی که به ذهنم رسید این است:

                    بیت0= data & 00000001
                    بیت1= data & 00000010
                    بیت2= data & 00000100
                    بیت3= data & 00001000
                    .
                    .
                    .
                    بیت7= data & 10000000

                    حالا چطوری این کار را انجام دهم؟

                    دیدگاه


                      #11
                      پاسخ : سوال برنامه نویسی در مورد تبدیل به رشته(زبان c)

                      سلام دادا.
                      دقیقاً.
                      تشکر لازم نیست!

                      دیدگاه

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