اطلاعیه

Collapse
No announcement yet.

برنامه کیپد و دستور AND

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

    برنامه کیپد و دستور AND

    سلام

    من یه برنامه ای دارم به شکل زیر که درست کار میکنه:

    کد:
    Config Kbd = Portd , Debounce = 20
    
    Dim A As Byte
    
    Q:
    
    A = Getkbd()
    
    If A > 15 Then : Goto Q : End If
    
    If A = 0 Then : Locate 1 , 1 : Lcd "A" : End If
    
    If A = 1 Then : Locate 1 , 1 : Lcd "B" : End If
    
    If A = 2 Then : Locate 1 , 1 : Lcd "C" : End If
    
    If A = 3 Then : Locate 1 , 1 : Lcd "D" : End If
    
    If A = 4 Then : Locate 1 , 1 : Lcd "E" : End If
    
    If A = 5 Then : Locate 1 , 1 : Lcd "F" : End If
    
    If A = 6 Then : Locate 1 , 1 : Lcd "G" : End If
    
    If A = 7 Then : Locate 1 , 1 : Lcd "H" : End If
    
    If A = 8 Then : Locate 1 , 1 : Lcd "Y" : End If
    
    If A = 9 Then : Locate 1 , 1 : Lcd "P" : End If
    
    If A = 10 Then : Locate 1 , 1 : Lcd "X" : End If
    
    If A = 11 Then : Locate 1 , 1 : Lcd "W" : End If
    
    If A = 12 Then : Locate 1 , 1 : Lcd "T" : End If
    
    If A = 13 Then : Locate 1 , 1 : Lcd "V" : End If
    
    If A = 14 Then : Locate 1 , 1 : Lcd "L" : End If
    
    If A = 15 Then : Locate 1 , 1 : Lcd "M" : End If
    
    Locate 2 , 1 : Lcd A : Goto Q
    
    End


    اما می خوام که دستور AND بهش اضافه کنم یعنی به جای یه کلید چند کلید فشرده بشه که متاسفانه کار نمیکنه !!

    کد:
    Config Kbd = Portd , Debounce = 20
    
    Dim A As Byte
    
    Q:
    
    A = Getkbd()
    
    If A > 15 Then : Goto Q : End If
    
    If A = 0 And A = 1 And A = 2 And A = 3 Then : Locate 1 , 1 : Lcd "A" : End If
    
    If A = 4 Then : Locate 1 , 1 : Lcd "E" : End If
    
    If A = 5 Then : Locate 1 , 1 : Lcd "F" : End If
    
    If A = 6 Then : Locate 1 , 1 : Lcd "G" : End If
    
    If A = 7 Then : Locate 1 , 1 : Lcd "H" : End If
    
    If A = 8 Then : Locate 1 , 1 : Lcd "Y" : End If
    
    If A = 9 Then : Locate 1 , 1 : Lcd "P" : End If
    
    If A = 10 Then : Locate 1 , 1 : Lcd "X" : End If
    
    If A = 11 Then : Locate 1 , 1 : Lcd "W" : End If
    
    If A = 12 Then : Locate 1 , 1 : Lcd "T" : End If
    
    If A = 13 Then : Locate 1 , 1 : Lcd "V" : End If
    
    If A = 14 Then : Locate 1 , 1 : Lcd "L" : End If
    
    If A = 15 Then : Locate 1 , 1 : Lcd "M" : End If
    
    Locate 2 , 1 : Lcd A : Goto Q
    
    End

    یعنی در برنامه اولی با فشار هر کلید یه حرفی نوشته میشد ...

    اما الان میخوام کا با فشار چند تا کلید یه حرف نوشته بشه که به مشکل برخوردم

    از دستور AND استفاده کردم که جواب نداد

    به نظرتون مشکلم کجاست؟

    البته کلیدها نباید همشون یکباره فشار داده بشن و باید مثل برنامه قفل رمزی باشه که کلید ها به ترتیب فشرده شوند!!!

    آیا دستور دیگه ای داره؟؟

    #2
    پاسخ : برنامه کیپد و دستور AND

    ببینید موقع استفاده از دستور AND در بین شرطها، باید تمام اون حالات درست باشه تا شرط اجرا بشه.
    در کیپد اگه همه کلیدها با هم فشار داده بشه باز چیزی که شما می خواین حاصل نخواهد شد.
    برای حل مشکل در خط If A = 0 And A = 1 And A = 2 And A = 3 Then : Locate 1 , 1 : Lcd "A" : End If
    اینطوری بنویس که اگر A=0شد دوباره کیپد رو چک کن اگر A=1 شد دوباره کیپد چک شود و به همین ترتیب تا اخر برو جلو. البته راه بهتری هم می تونه باشه ولی الان این به ذهن من رسید. امیدوارم مشکلتون حل بشه.
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : برنامه کیپد و دستور AND

      ممنون میشم اگه بصورت برنامه بگین!!

      دیدگاه


        #4
        پاسخ : برنامه کیپد و دستور AND

        این مصداق چیزی بود که به ذهنم رسید :
        کد:
        Config Kbd = Portd , Debounce = 20
        
        Dim A As Byte
        
        Q:
        
        A = Getkbd()
        
        If A > 15 Then : Goto Q : End If
        
        If A = 0 Then
        A:
          A = Getkbd()
          If A > 15 Then Goto A
          If A = 1 Then
        B:
        A = Getkbd()
          If A > 15 Then Goto B
          If A = 2 Then
          Locate 1 , 1 : Lcd "A"
          End If
          End If
        End If
        
        If A = 0 And A = 1 And A = 2 And A = 3 Then : Locate 1 , 1 : Lcd "A" : End If
        
        If A = 4 Then : Locate 1 , 1 : Lcd "E" : End If
        
        If A = 5 Then : Locate 1 , 1 : Lcd "F" : End If
        
        If A = 6 Then : Locate 1 , 1 : Lcd "G" : End If
        
        If A = 7 Then : Locate 1 , 1 : Lcd "H" : End If
        
        If A = 8 Then : Locate 1 , 1 : Lcd "Y" : End If
        
        If A = 9 Then : Locate 1 , 1 : Lcd "P" : End If
        
        If A = 10 Then : Locate 1 , 1 : Lcd "X" : End If
        
        If A = 11 Then : Locate 1 , 1 : Lcd "W" : End If
        
        If A = 12 Then : Locate 1 , 1 : Lcd "T" : End If
        
        If A = 13 Then : Locate 1 , 1 : Lcd "V" : End If
        
        If A = 14 Then : Locate 1 , 1 : Lcd "L" : End If
        
        If A = 15 Then : Locate 1 , 1 : Lcd "M" : End If
        
        Locate 2 , 1 : Lcd A : Goto Q
        
        End
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : برنامه کیپد و دستور AND

          ببخشید که وقت شما رو هم می گیرم :redface:

          اما متاسفانه باز نتونستم جواب بگیرم :sad:

          دیدگاه


            #6
            پاسخ : برنامه کیپد و دستور AND

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

            دیدگاه


              #7
              پاسخ : برنامه کیپد و دستور AND

              فکر کنم منظورتون "یا" باشه

              به جای AND ها از OR استفاده کن

              دیدگاه


                #8
                پاسخ : برنامه کیپد و دستور AND

                آقا منو شرمنده میکنین :redface:

                از or نمیخوام استفاده کنم!!

                راستش هدفم اینه که بتونم توسط کیپد یه خروجی رو مثلا روشن یا خاموش کنم یا روی lcd یه چیزی رو نمایش بدم ...

                اما میخوام اینکار رو توسط چند تا کلید انجام بدم!!

                یعنی مثلا کلیدهای 1و2و3و4 رو به ترتیب فشار بدم و رها کنم بعدش یه خروجی فعال بشه ( درست مثل قفل رمزی اما خیلی خیلی ساده تر از اون)

                دیدگاه


                  #9
                  پاسخ : برنامه کیپد و دستور AND

                  خودتون هم میگید به ترتیب. ولی اگه از AND استفاده کنید یعنی همزمان که با توجه به ساختار ماتریسی کیپد امکان پذیر نیست

                  شما باید مرحله به مرحله این کار رو انجام بدی
                  مثلا به این صورت:

                  A = Getkbd()
                  If A = 0 then
                  A = Getkbd()
                  if A=1 then
                  A = Getkbd()
                  if a= 3 then
                  و الی آخر

                  یعنی اول شرط صفر بودن کیپد رو چک میآ‌کنی اگه درست بود شرط یک بودن و الی آخر.
                  البته برای دریافت ورودی به عنوان رمز میآ‌تونی از روشآ‌های بهتری مثل حلقه FOR و آرایهآ‌ها استفاده کنی

                  دیدگاه


                    #10
                    پاسخ : برنامه کیپد و دستور AND

                    با عرض سلام و ادب خدمت استاد گرانقدر اقای رضایی

                    با اجازه اقای رضایی من یه راه حل دیگه تو ذهنم هست که فکر کنم بهتر باشه :
                    دوست من یه راه دیگه و البته فکر کنم عملی اون اینکه شما بعد گرفتن عدد صفر از کیپد بیاین مقدار یک متغیر رو یک واحد اضافه کنید سپس در دوره بعد که کیپد اسکن میشه و عدد یک رو گرفتین باز مقدار اون متغیر یک واحد دیگه اضافه بشه که تا الان شد 2. بعد از چک کردن بار سوم در برنامه که عدد 2 از کی پد گرفته میشه در شرطی که می نویسی اون رو با مقدار 2 اون متغییر AND کن.
                    اینطوری فکر کنم مشکلت حل بشه.
                    چرا ناراحتی پاتریک!
                    + امروز ی بچه دیدم سرچهارراه گل میفروخت
                    - از دیدنش ناراحت شدی؟
                    + نه
                    پس چی ناراحتت کرده
                    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                    ------------------------------------------------------------------------------------------------------
                    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                    ------------------------------------------------------------------------------------------------------
                    محصولات

                    دیدگاه


                      #11
                      پاسخ : برنامه کیپد و دستور AND

                      فکر کنم منظورتون این باشه
                      کد:
                      Enter:
                      Waitms 100
                      Ap(x) = Getkbd()
                      If Ap(x) > 15 Or Ap(x) = 12 Or Ap(x) = 14 Or Ap(x) = 15 Or Ap(x) = 3 Or Ap(x) = 7 Or Ap(x) = 11 Then Goto Enter
                      S(x) = Lookup(ap(x) , Keypad
                      Incr X
                      Waitms 200
                      If X = 6 Then Goto Ch_comp 
                      Goto Enter

                      برای چک کردنش با رمزی که در نظر گرفتین:
                      ابتدا رمز اصلی به صورت تک تک در آرایه P میآ‌ریزید و بعد با آرایه S که از کیپد به دست اومده مقایسه میآ‌کنید
                      کد:
                      Ch_comp:
                      Print "Pass compare"
                      For X = 1 To 5
                      If P(x) <> S(x) Then Goto pass_not_same
                      Next
                      Print "Pass ok"
                      Goto edame_barname

                      دیدگاه


                        #12
                        پاسخ : برنامه کیپد و دستور AND

                        منظور من این هستش:

                        کد:
                        $regfile = "m32def.dat"
                        $crystal = 8000000
                        Config Kbd = Portd , Debounce = 20
                        Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
                        
                        Dim A As Byte
                        Dim B As Byte
                        
                        Do
                        Q:
                        A = Getkbd()
                        
                        If A > 15 Then Goto Q
                        
                        If A = 0 Then
                        Incr B
                        Waitms 250
                        End If
                        If A = 1 Then
                        Incr B
                        Waitms 250
                        End If
                        If A = 2 And B = 2 Then
                        Locate 1 , 1 : Lcd "a" : B = 0
                        End If
                        
                        
                        If A = 4 Then : Locate 1 , 1 : Lcd "E" : End If
                        
                        If A = 5 Then : Locate 1 , 1 : Lcd "F" : End If
                        
                        If A = 6 Then : Locate 1 , 1 : Lcd "G" : End If
                        
                        If A = 7 Then : Locate 1 , 1 : Lcd "H" : End If
                        
                        If A = 8 Then : Locate 1 , 1 : Lcd "Y" : End If
                        
                        If A = 9 Then : Locate 1 , 1 : Lcd "P" : End If
                        
                        If A = 10 Then : Locate 1 , 1 : Lcd "X" : End If
                        
                        If A = 11 Then : Locate 1 , 1 : Lcd "W" : End If
                        
                        If A = 12 Then : Locate 1 , 1 : Lcd "T" : End If
                        
                        If A = 13 Then : Locate 1 , 1 : Lcd "V" : End If
                        
                        If A = 14 Then : Locate 1 , 1 : Lcd "L" : End If
                        
                        If A = 15 Then : Locate 1 , 1 : Lcd "M" : End If
                        
                        Locate 2 , 1 : Lcd A : Lcd "" : Lcd B : Goto Q
                        Loop
                        
                        End


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

                        دیدگاه


                          #13
                          پاسخ : برنامه کیپد و دستور AND

                          به تعداد آدم های روی زمین راه هست برای برنامه نویسی!

                          دیدگاه


                            #14
                            پاسخ : برنامه کیپد و دستور AND

                            سلام

                            ممنون از دوستان عزیز

                            آخرش تونستم از برنامه آقای آراسته جواب بگیرم


                            یه سوال دیگه هم دارم:

                            اگه بخوام اینو برای ورودی معمولی که میتونه چند تا کلید فشاری معمولی باشه استفاده کنم چه تغییری توی برنامش بدم؟؟

                            یعنی می خوام به جای کیپد چند تا کلید(تک سویچ گرد 2 پایه ) معمولی بذارم ...

                            همین برنامه رو چطوری تغییر بدم؟؟


                            کد:
                            Dim A As Byte
                            Dim B As Byte
                            
                            Do
                            Q:
                            A = Getkbd()
                            
                            If A > 15 Then Goto Q
                            
                            If A = 0 Then
                            Incr B
                            Waitms 250
                            End If
                            If A = 1 Then
                            Incr B
                            Waitms 250
                            End If
                            If A = 2 And B = 2 Then
                            Locate 1 , 1 : Lcd "a" : B = 0
                            End If


                            فقط نمیدونم به جای A = Getkbd() چی باید بذارم!!!

                            دیدگاه


                              #15
                              پاسخ : برنامه کیپد و دستور AND

                              ببین در این صورت دیگه شما کلیدات ماتریسی نیست و از کیپد استفاده نکردی تا دستور getkbd رو مورد استفاده قرار بدی.
                              در این صورت با شرط if پین های مورد نظر رو چک می کنی و باز به ازای یک یا صفر شدن(بسته به شماتیک) مقدار متغییر رو افزایش میدی. و از اون تو قسمت های مختلف استفاده می کنی.

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

                              دیدگاه

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