اطلاعیه

Collapse
No announcement yet.

خروج از حلقه

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

    خروج از حلقه

    سلام

    من تو این برنامه وقتی با کیپد کلید 12 را میزنم شروع میکنه به چشمک زدن تا اینجا درسته ولی بعده این میخوام وقتی کلید 8ام را میزنم دو تای چشمک زن خاموش بشن
    و led سوم روشن بشه و دوباره با زدن 12 این led خاموش و برگرده به حالت چشمک زن ولی وقتی مثلا 12 را میزنم تا آخر میمونه تو این حلفه و زدن کلید هیچ تاثیری نداره یا گه اول 7 را بزنم میمونه تو دستور مربوط بهش و با زدن 12 کار نمیکنه
    در وافع بعد از loop چی بنویسم که با زدن کلید جدید بره به دستور جدید
    اینم برنامش

    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Kbd = Portd , Debounce = 50 , Delay = 1
    Config Porta = Output
    Config Portb = Output
    Dim I As Byte
    Do
    I = Getkbd()
    If I = 11 Then
    Do
    Set Porta.2
    Set Porta.6
    Waitms 700
    Reset Porta.2
    Reset Porta.6
    Waitms 700
    Loop
    End
    End If


    If I = 7 Then

    Do
    Set Porta.3
    Waitms 1000

    Loop
    End
    End If
    Loop
    End

    #2
    پاسخ : خروج از حلقه

    ببین دوست عزیز
    سعی کن تو برنامه هات فقط از یه لپ استفاده کنی
    بقه رو از IF یا بقه دستورات شرطی استفاده کنی
    اینی که نوشتی دستور میره تو یه حلقه گیر می کنه

    regfile = "m16def.dat"
    $crystal = 8000000
    Config Kbd = Portd , Debounce = 50 , Delay = 1
    Config Porta = Output
    Config Portb = Output
    Dim I As Byte
    Do
    I = Getkbd()
    If I = 11 Then

    Do
    Set Porta.2
    Set Porta.6
    Waitms 700
    Reset Porta.2
    Reset Porta.6
    Waitms 700
    Loop Until I = 12
    End
    End If


    If I = 7 Then

    Do
    Set Porta.3
    Waitms 1000

    Loop
    End
    End If
    Loop Until I = 12

    End

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

    دیدگاه


      #3
      پاسخ : خروج از حلقه

      ممنون از پاسخت
      این برنامه را امتحان کردم باز با زدن یکی از کلید ها تو همون برنامه میمونه و با زدن 12 (همون *) تغییر نمیکنه
      در عمل باید این جوری باشه که بازدن هر کلید یه کار خاص را داشته باشیم منتها وقتی به کلید دیگه را میزنیم برنامه قبلی دیگه کار نکنه و برنامه جدید شروع بشه
      مثلا با زدن 11، led قرمز شروع به چشمک زدن کنه و با زدن 7 ،led سبز چشمک بزنه و دیگه قرمز چشمک نزنه با این برنامه بار اول هر کدوم را بزنی تا آخر فقط برنامه مربوط به اون کلید کار میکنه

      بازم ممنون میشم کمکم کنی

      دیدگاه


        #4
        پاسخ : خروج از حلقه

        از این فرم استفاده کن برای کی پد جواب میده قسمت lcd و جدول lookup طبق نیازت درست کن.دستورات رو هم می تونی در case ها بنویسی تا بازدن هر کلید اونها اجرا بشن.

        $regfile = "M8DEF.DAT"
        $crystal = 1000000
        Config Kbd = Portd , Debounce = 100 , Delay = 10


        Dim A As Byte , D As Byte , B As Byte , C As Long , E As Byte , F As Long , G As Long , H As Word , I As Single


        Main:

        A = Getkbd()
        If A = 16 Then Goto Main
        Loop1:
        D = Getkbd()
        If D <> 16 Then Goto Loop1
        B = Lookup(a , Keydata)

        Select Case B

        Case 0 To 9:

        Goto Main

        Case 10:

        Goto Main


        Case 11 :

        Goto Main


        Case 12 :

        Goto Main


        Case 13 :

        Goto Main

        Case 14:

        Goto Main

        Case 15 :

        Goto Main

        End Select

        Goto Main

        End
        Keydata:
        Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15
        انا لله و انا اليه الراجعون

        دیدگاه


          #5
          پاسخ : خروج از حلقه

          این کار را کردم وقتی اجراش میکنم Porta.3 را ست میکنه (led را روشن میکنه)بدون اینکه من کلیدی بزنم و بعدش بازم هیچ کلیدی کار نمیکنه
          $regfile = "m16def.dat"
          $crystal = 8000000
          Config Kbd = Portd , Debounce = 50 , Delay = 1
          Config Porta = Output
          Config Portb = Output
          Dim I As Byte



          Dim A As Byte , D As Byte , B As Byte , C As Long , E As Byte , F As Long , G As Long , H As Word ,

          Main:

          A = Getkbd()
          If A = 16 Then Goto Main
          Loop1:
          D = Getkbd()
          If D <> 16 Then Goto Loop1
          B = Lookup(a , Keydata)


          Select Case B

          Case 0 To 9:

          Goto Main

          Case 10:

          Goto Main


          Case 11 :
          Do
          Set Porta.2
          Set Porta.6
          Waitms 700
          Reset Porta.2
          Reset Porta.6
          Waitms 700

          Loop
          End



          Case 12 :

          Goto Main


          Case 13 :


          Do
          Set Porta.3
          Waitms 1000

          Loop
          End


          Case 14:

          Goto Main

          Case 15 :

          Goto Main

          End Select

          Goto Main

          End
          Keydata:
          Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15

          دیدگاه


            #6
            پاسخ : خروج از حلقه

            سلام
            اگر خوب متوجه شده باشم ببینین این چیزی هست که می خواین؟

            $regfile = "m16def.dat"
            $crystal = 8000000
            '==============
            Config Kbd = Portd , Debounce = 50 , Delay = 1
            Config Porta = Output
            Config Portb = Output
            '==========
            Dim A As Byte , B As Byte , C As Byte
            '==============
            C = 16
            Do

            A = Getkbd()
            If A = 16 Then
            A = C
            Else
            C = A
            End If

            B = Lookup(a , Keydata)
            Select Case B
            Case 11:

            Set Porta.2
            Set Porta.6
            Waitms 700
            Reset Porta.2
            Reset Porta.6
            Waitms 700

            Case 13:
            Set Porta.3
            Waitms 1000
            End Select
            Loop
            End
            '===============
            Keydata:
            Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15 , 16
            هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

            دیدگاه


              #7
              پاسخ : خروج از حلقه

              آره این برنامه خوبه.توی برنامه خودتم لازم نیس برای عملکرد ledها از do-loop استفاده کنی.طبق شرط وقتی متغیر جدول لوک پ عدد کلید رو داره برنامه مربوطه اجرا میشه
              انا لله و انا اليه الراجعون

              دیدگاه


                #8
                پاسخ : خروج از حلقه

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

                دیدگاه


                  #9
                  پاسخ : خروج از حلقه

                  ممنون که کمکم میکنید ولی بازم کار نکرد من یه تصویر گذاشتم ببنین با کلید b باید 2 تا led زرد شروع به چشمک زدن کنند و وقتی کلید *را میزنیم 2 تای زرد باید خاموش شده و این بار led قرمز چشمک بزنه دوباره با زدن b قرمزه خاموش و زرد ها چشمک بزنن و این کار با هر بار فشردن کلید مربوطه تکرار بشه

                  اگه میشه یه بار خودتون امتحان کنید

                  دیدگاه

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