اطلاعیه

Collapse
No announcement yet.

سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

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

    سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

    سلام خدمت دوستان گرامی لطفا مرا راهنمایی کنید @};- @};- @};- @};-
    1_وقتی که از طریق VB اطلاعات را روی پورت سریال می گذاریم اطلاعاتبه چه صورت هستش (هگز،اسکی، رشته،....)
    2_من یک برنامه نوشتم که در میکرو قرارمی گیرد و به صورت دقیق نمی دونم چه اتفاقی داره می فته قسمتی از برنامه را که مشکل دارم در پایین قرارمی دهم
    3_این متغیر S که از نوع رشته هست قتی S=" " می گذاریم یعنی چه؟
    4_ خط S = S + String(1 , Receive) چه کار می کنه ؟
    5_ خیلی سوال دارم لطفا راهنمایی کنید
    کد:
    Receive = Inkey()
     Select Case Receive
      Case 1:
      R = Val(s)
      S = ""
      Case 2:
       G = Val(s)
      S = ""
      Case 3:
       B = Val(s)
       S = ""
      Case Else
      S = S + String(1 , Receive)
     End Select
    معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
    اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
    آموزش Modelsim

    #2
    پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

    سلام
    1-اطلاعات به صورت باینتری انتقال داده می شوند اما بسته به نوع پروتکل و نوع بازیابی داده ها این بایت ها می تونن معرف رشته ، عدد دسیمال ، عدد هگزادسیمال باشن
    2-مقدار بایت دریافت شده توسط تابع inkey در متغییر receive ریخته می شود و سپس توسط دستور چند شرطی select case با چندین شرط چک می شه و در صورت برقراری شرط که اگر بایت رسیده 1و2و3 باشه مقدار متغییر s که رشته ای هست به عدد تبدیل شده و در متغییر R,G,B ریخته می شه و در صورتی که هیچ یک نباشه متغییر s با مقدار جدید recive جمع می شود (فکر نکنین جمع ریاضی بلکه جمع رشته ای جمع 2 و 3 نمی شه 5 بلکه می شه 23)
    3-s="" یعنی مقدار قبلی متغییر s را پاک کن انگار روی یه کاغذ یه خط کشیده باشین و با پاک کن پاکش کنین یعنی هیچی دیگه داخلش نیست
    5-بفرمایین در خدمتم
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


      #3
      پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

      نوشته اصلی توسط baby_1
      سلام
      1-اطلاعات به صورت باینتری انتقال داده می شوند اما بسته به نوع پروتکل و نوع بازیابی داده ها این بایت ها می تونن معرف رشته ، عدد دسیمال ، عدد هگزادسیمال باشن
      2-مقدار بایت دریافت شده توسط تابع inkey در متغییر receive ریخته می شود و سپس توسط دستور چند شرطی select case با چندین شرط چک می شه و در صورت برقراری شرط که اگر بایت رسیده 1و2و3 باشه مقدار متغییر s که رشته ای هست به عدد تبدیل شده و در متغییر R,G,B ریخته می شه و در صورتی که هیچ یک نباشه متغییر s با مقدار جدید recive جمع می شود (فکر نکنین جمع ریاضی بلکه جمع رشته ای جمع 2 و 3 نمی شه 5 بلکه می شه 23)
      3-s="" یعنی مقدار قبلی متغییر s را پاک کن انگار روی یه کاغذ یه خط کشیده باشین و با پاک کن پاکش کنین یعنی هیچی دیگه داخلش نیست
      5-بفرمایین در خدمتم
      baby جان دستت درد نکنه @};- @};- @};- @};-
      1_اون select case ها را می دونم اینو نمی فهمم چطوری رشته ای که فرستادم با کارکتر قاطی نشده ؟
      یعنی چطور شده که دستور inkey فقط کارکتر را گرفته و رشته ارسالی با اون قاطی نشده؟
      این قسمت S = S + String(1 , Receive) را هنوز نفهمیدم چرااینطوری باید بنویسیم (String(1 , Receive
      معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
      اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
      آموزش Modelsim

      دیدگاه


        #4
        پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

        سلام
        کار نکردم
        نگاه کنین اگر این دستوراتی که شما گذاشتین رو داخل حلقه استفاده کنیم هر بار اجرا و چک شدن تابع یکی از بایت های دریافتی رو می خونه و داخل متغییر s می زاره
        به جای اون دستور که متوجه نشدین این دستور هم معادل هست
        dim s1 as string*1
        s1=str(recive)
        s=s+s1
        اون دستور رو بابت این به کار بردن که همه این کدها رو داخل یک خط بنویسن اما فرقی نمی کنه چون bascom کامپایلر قوی نیست مجبوریم توی هر خط یک کار رو انجام بدین یعنی اگر جمع می کنیم فقط یه جمع و نه دو تا یا سه تا جمع
        هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

        دیدگاه


          #5
          پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

          نوشته اصلی توسط baby_1
          سلام
          کار نکردم
          نگاه کنین اگر این دستوراتی که شما گذاشتین رو داخل حلقه استفاده کنیم هر بار اجرا و چک شدن تابع یکی از بایت های دریافتی رو می خونه و داخل متغییر s می زاره
          به جای اون دستور که متوجه نشدین این دستور هم معادل هست
          dim s1 as string*1
          s1=str(recive)
          s=s+s1
          اون دستور رو بابت این به کار بردن که همه این کدها رو داخل یک خط بنویسن اما فرقی نمی کنه چون bascom کامپایلر قوی نیست مجبوریم توی هر خط یک کار رو انجام بدین یعنی اگر جمع می کنیم فقط یه جمع و نه دو تا یا سه تا جمع
          خیلی ممنون نمی دونم فهمیدم یا نه
          می گم شما بگید درسته یا نه ما برای اینکه یک جا اطلا عات را بگیریم هر دفعه می گیریم و داخل S می ریزیم من این را نمی فهمم چرا (String(1 , Receive مگه Receive ازInkey() گرفته نمی شه ؟ :angry: :angry: :angry:
          معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
          اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
          آموزش Modelsim

          دیدگاه


            #6
            پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

            برنامه c برای همین قسمت هم می نویسم اینو که اصلا نفهـــــــــــــــــــــــــــمیدم :eek:
            کد:
            unsigned char s2v(void)
            {
              sum=0;
              P=0;
              while(i>0)
               {
               i--;
               sum=sum+(10^P)*(s[i]-0x30);
               s[i]=0x30;
               P++;
               } 
               i=0;
               return (sum);
            }
            معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
            اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
            آموزش Modelsim

            دیدگاه


              #7
              پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

              سلام
              می بخشید دیشب دیگه خسته بودم خواب رفتم
              خوب بزارین سوالتون رو این جوری جواب بدم
              ما دو بشکه یکی بی اب و دیگری با 2 گالون آب داریم که هر لحظه می تونیم از بشکه با آب ازش یه لیوان بر داریم و نمی خوایم قطره ای هم ازش از دست بدیم پس من هر بار که لیوانم پر شد اب داخل لیوان رو داخل بشکه خالی می کنم تا علاوه بر اینکه چیزی رو از دست ندم داده های قبلیم(اب های مرحله قبل که با لیوان انتقال دادم داخل بشکه رو) باز داشته باشم بنابراین لیوان حکم متغییر recive رو داره و متغییر s حکم بشکه دوم که تمامی داده ها و همچنین محلی برای ذخیره هست داره.
              سوالی بود در خدمتم
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #8
                پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                سلام
                داخل برنامه c که قرار دادین یه متغییر به نام s که از نوع آرایه هست داریم و متغییری به اسم i که مقدارش از ماکزیمم به صفر می رسه
                هر بار با کم شدن یکی از متغییر i یکی از داده های متغییر آرایه ای s خونده می شه و از اون عدد 0x33 کم می شه و در مکانی که متغییر p اشاره می کنه ذخیره می شه
                بزارین این جوری بگم
                فرض کنیم متغییر s مقدار داده ایش به صورت زیر باشه
                s[0]=100
                s[1]=200
                s[2]=300
                s[3]=400
                s[4]=500
                s[5]=600
                حالا اینجا متغییر i رو فرض می کنیم 5 باشه و مقدار اولیه متغییر sum=0
                lمرحله اول
                i=4
                sum=sum+10^0*(s[i]-0x33)
                که به جای i قرار بدیم 4 مقدار 500 رو از عدد 51(0x33) کم می کنه و در 1 ضرب و با مقدار قبلی sum جمع می کنه حالا مقدار sum=449
                به متغییر p یکی اضافه می کنه

                i=3
                sum=sum+10^0*(s[i]-0x33)
                که به جای i قرار بدیم 3 مقدار 400 رو از عدد 51(0x33) کم می کنه و در 10 ضرب و با مقدار قبلی sum جمع می کنه حالا مقدار sum=3939
                به متغییر p یکی اضافه می کنه

                این روند همین طور ادامه پیدا می کنه تا i برابر صفر بشه


                هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                دیدگاه


                  #9
                  پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                  baby منو ببخش بخاطر کم سوادیم ولی فکر کنم هنوز برام جا نیفتاده باشه من می گم شما بگویید درسته یا نه؟
                  وقتی ما از طریق VB کدی را می فرستیم کد در حالت اسکی هست ولی به صورت باینری می فرستدش
                  طبق این برنامه من یک عدد که 1یا 2یا 3 است که نشان دهنده هر یک از led ها است به همراه عددی که در داخلtext هستش فرستاده می شود اگر اعداد فرستاده شده 1یا2یا3 باشند می فهمیم که مربوط به کدام led هستش و اگر این اعداد نبودند پس مربوط به عدد داخل text ما هستند که قرار است نور هر LED را تعیین کنند اینهایی که گفتم درسته؟ :eek::eek:
                  و دستور (S = S + String(1 , Receive اعدادی که داخل text ها بوده وفرستاده شده بودند را یکی یکی میگرد چرا یکجا نمی شود مگه 8بیت 8بیت نمی فرستیم ؟
                  در ضمن من یک سوال اساسی مثلا من وقتی عدد 200 را می فرستم معادل اسکی هر کدام از اعداد 2و0و0 روی خط قرار می گیرد یعنی 050048048 درسته ؟ اینهار را چطور می فرسته 8بیت می فرسته بقیه را در ارسال بعد یا 050 اول می فرسته بعد 048 ودر اخر 048 یعنی برای انتخاب هر رنگ سه بار این مسیر طی می شود؟
                  شرمنده که خیلی سوال می پرسم
                  قسمتی از برنامه VB
                  کد:
                  Private Sub HScroll1_Change()
                   text1 = HScroll1.Value
                   MSComm1.Output = Chr$(1)
                   MSComm1.Output = text1.Text
                  End Sub
                  
                  
                  Private Sub HScroll1_Scroll()
                   text1 = HScroll1.Value
                   MSComm1.Output = Chr$(1)
                   MSComm1.Output = text1.Text
                  End Sub
                  
                  Private Sub HScroll2_Change()
                   Text2 = HScroll2.Value
                   MSComm1.Output = Chr$(2)
                   MSComm1.Output = Text2.Text
                  End Sub
                  
                  Private Sub HScroll2_Scroll()
                   Text2 = HScroll2.Value
                   MSComm1.Output = Chr$(2)
                   MSComm1.Output = Text2.Text
                  End Sub
                  
                  
                  Private Sub HScroll3_Change()
                   Text3 = HScroll3.Value
                   MSComm1.Output = Chr$(3)
                   MSComm1.Output = Text3.Text
                  End Sub
                  
                  Private Sub HScroll3_Scroll()
                   Text3 = HScroll3.Value
                   MSComm1.Output = Chr$(3)
                   MSComm1.Output = Text3.Text
                  End Sub
                  معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
                  اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
                  آموزش Modelsim

                  دیدگاه


                    #10
                    پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                    سلام
                    این چه حرفیه وظیفه من پاسخ به شماست
                    طبق این برنامه شما هم یکی از داده های شما ارسال می شه هم محتوایات textbox تون
                    مثلا این قسمت از کد
                    Private Sub HScroll3_Change()
                    Text3 = HScroll3.Value
                    MSComm1.Output = Chr$(3)
                    MSComm1.Output = Text3.Text
                    End Sub
                    ابتدا عدد 3 رو به رشته تبدیل می کنه و ارسال می شه و سپس مقدار تکست رو می فرسه
                    چون شما تبدیل به مقدار اسکیش می کنین مقدار 3 به جای دریافت 3 در میکرو عدد 51 دریافت می کنین
                    این جدول رو ببنین


                    اگر شما می خواین 3 بفرستین و 3 بگیرین(بدون نیاز به تبدیل به رشته مستقیما داده دریافتی از تابع inkey رو پردازش کنین)
                    اینجوری باید بنویسین
                    MSComm1.Output=3

                    نگاه کنین دوست من کد
                    (S = S + String(1 , Receive
                    به ازای هر بار اجرا شدنش مقدار بافر سریال رو چک می کنه و ریزه داخل متغییر recevie (اونم توسط تابع inkey) و سپس متغییر recive رو تبدیل به رشته می کنه و با مقدار قبلی رشته s جمع می کنه (اگر اینجا مشکل دارین باید خیلی روی برنامه نویسی رشته ها همت کنین و خیلی کار کنین خیلی کار کردن یعنی از سطح پایه بیاین به متوسط نه بیتشر)

                    اگر عدد 200 رو به صورت رشته بفرستین بسته به دریافت MSB یا LSB اول داده با ارزش بیشتر 2 و سپس داده های کمتر یا اول داده های کم ارزش یعنی 0 بعد داده های پر ارزش رو می فرسته که برای رشته در مود MSB می شه
                    50
                    48
                    48
                    اگر باینتری کد رو بفرستین
                    مقدار 200 ارسال می شه
                    باز سوالی بود در خدمتم

                    اضافه:
                    بگین دقیقا چی کار می کنین شاید کدش رو نوشتم گذاشتم براتون
                    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                    دیدگاه


                      #11
                      پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                      سلام دوست من
                      من شرمندم دیر می رسم خونم و دیر می تونم جواب بدم
                      بزارین کار تابع sting رو براتون تشریح کنم دیدتون بیشتر بشه
                      نمونه برنامه خود سازنده کامپایلر بسکام
                      Dim S As String * 15

                      S = String(5 , 65)

                      اگر به تیبل اسکی نگاه کنین می بینین که کارکتر A معادل عدد 65 هست در تابع بالا 5 بار کارکتر A تولید می شه و در متغییر S ریخته می شه یعنی مقدار متغییر S برابر AAAAA می شه
                      حالا داخل تابع بالا
                      ( S = S + String(1 , Receive
                      ابتدا مقدار عددی کارکتر دریافتی در Receive ریخته می شه به عنوان مثال اگر شما عدد 9 رو بفرستین به صورت رشته مقدار متغییر Receive برابر 57 می شه و حالا اگر این تابع رو اجرا کنین
                      (String(1 , Receive
                      مقدار 9 که معادل کارکتر 57 هست در خروجی ظاهر می شه یعنی دقیقا همون 9 که فرستادین وسط راه تبدیل به 57 می شه و توسط تابع string مجددا به 9 تبدیل می شه
                      دستور کل بالا مقدار قبلی S رو با مقدار کارکتر دریافتی جدید در کنار هم قرار می ده فکر کنین ابتدا عدد 9 رو فرستادین پس مقدار S برابر 9 می شه و حالا اگر عدد 8 رو بفرستین مقدار S برابر 98 می شه


                      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                      دیدگاه


                        #12
                        پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                        ممنون که راهنمایی می کنید دربرنامه c اصلا نفهمیدم چطور معادل همین خط در بیسیک شد این هم بررسی می کنید @};- @};-
                        کد:
                        unsigned char s2v(void)
                        {
                          sum=0;
                          P=0;
                          while(i>0)
                           {
                           i--;
                           sum=sum+(10^P)*(s[i]-0x30);
                           s[i]=0x30;
                           P++;
                           } 
                           i=0;
                           return (sum);
                        معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
                        اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
                        آموزش Modelsim

                        دیدگاه


                          #13
                          پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                          سلام
                          مهمترین قسمت برنامه جایی هست که عدد 48 یا همون 0x30 از عدد کارکتر دریافتی کم می شه
                          نگاه کنین اگر من کارکتر 9 رو ارسال کنم میکرو عدد 57 رو دریافت می کنه حالا اگر عدد 48 رو از 57 کم کنم جواب چی میشه ؟ بله همون عدد 9
                          پس هر معادل اسکی هر عدد رو که بگریم و عدد 48 رو ازش کسر کنیم مقدار عدد ارسالی به دست می یاد
                          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                          دیدگاه


                            #14
                            پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                            نوشته اصلی توسط baby_1
                            سلام
                            مهمترین قسمت برنامه جایی هست که عدد 48 یا همون 0x30 از عدد کارکتر دریافتی کم می شه
                            نگاه کنین اگر من کارکتر 9 رو ارسال کنم میکرو عدد 57 رو دریافت می کنه حالا اگر عدد 48 رو از 57 کم کنم جواب چی میشه ؟ بله همون عدد 9
                            پس هر معادل اسکی هر عدد رو که بگریم و عدد 48 رو ازش کسر کنیم مقدار عدد ارسالی به دست می یاد
                            مرسی اره اینو فهمیده بودم این 10^p چیه xor میکنه ؟ چرا این کار رامی کنیم
                            معجزه اين است که هرچه داشته هايت را بيشتر با ديگران سهيم شوي،داراتر مي شوي (لئونارد نيموي)
                            اگر مغزانسان،چنان ساده مي بود که ما از آن سر در مي آورديم،هنوز چنان احمق بوديم که هيچ از آن سر در نمي آورديم!
                            آموزش Modelsim

                            دیدگاه


                              #15
                              پاسخ : سوالاتـــــــــــــــــــــــــــــــی در مورد VB6

                              دستور 10^p کراکتر دریافتی رو در سمت چپ قرار می ده و کارکترهای قبلی که در رشته sum هستن رو به سمت راست شیفت می ده
                              مثلا اگر مقدار اولیه 9 بوده باشه بعد از دریافت کرکتر بعدی که اگر عدد 3 باشه داخل متغییر مقدار
                              39 قرار می گیره
                              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                              دیدگاه

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