اطلاعیه

Collapse
No announcement yet.

کنترل led

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

    کنترل led

    سلام به همه ی بچه های انجمن امیدوارم حالتون خوب باشه
    میخوام با بسکام یه برنامه بنویسم که 4 تا ال ی دی را کنترل کنم به این صورت که با کیبرد بهش عدد بدی که مثلا ال ی دی شماره 3 به مدت 4 ثانیه روشن شود و بعد ال ی دی شماره 1 به مدت 1 ثانیه و .... و دکمه ی استارت رو که بزنی میکرو شروع به کار شود.
    من برنامه را نوشتم فقط یه مشکل داره اونم این که بر طبق دستور پیش نمیره مثلا باید اول ال ی دی شماره 3 روشن بشه و بعد ال ی دی شماره یک میکرو اول ال ی دی شماره 1 رو روشن میکنه و بعد شماره 3 را :sad:
    برنامه ی که نوشتم را میذارم اینجا (فقط باید قول بدید که نخندید ها :mrgreen: :redface
    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Kbd = Porta
    Config Portb = Output
    Dim A As Byte , F As Byte , E As Byte , L As Byte , R As Byte , I As Byte
    Dim B As Long
    Main:
    B = 0
    Do
    A = Getkbd()
    If A = 10 Then Goto Led1
    If A = 11 Then Goto Led2
    If A = 12 Then Goto Led3
    If A = 13 Then Goto Led4
    If A = 15 Then Goto Start1
    If A < 10 Then
    B = B * 10
    B = B + A
    Lcd A
    Waitms 400
    End If
    Loop
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Led1:
    Lcd "led1 "
    Waitms 400
    F = B
    Goto Main
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Led2:
    Lcd "led2 "
    Waitms 400
    E = B
    Goto Main
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Led3:
    Lcd "led3 "
    Waitms 400
    R = B
    Goto Main
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Led4:
    Lcd "led4 "
    Waitms 400
    L = B
    Goto Main
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Start1:
    If F > 0 Then
    Set Portb.0
    Wait F
    Reset Portb.0
    F = 0
    End If
    If E > 0 Then
    Set Portb.1
    Wait E
    Reset Portb.1
    E = 0
    End If
    If R > 0 Then
    Set Portb.2
    Wait R
    Reset Portb.2
    R = 0
    End If
    If L > 0 Then
    Set Portb.3
    Wait L
    Reset Portb.3
    L = 0
    End If
    If F = 0 And E = 0 And R = 0 And L = 0 Then
    Cls
    Goto Main
    End If
    End

    ال ی دی ها رو هم به این صورت وصل کردم:
    portb.0=led1
    portb.1=led2
    portb.2=lod3
    portb.3=led4
    کلا هر ترتیبی که بدیم باز اول ال ی دی شماره یک روشن میشه(اگه مقدار داشته باشه) بعد شماره 2 بعد 3 و بعد 4 :sad: چیکار باید بکنم که بر طبق ترتبیبی که دادم عمل کنه؟ :question:
    از دوستان خواهش میکنم که کمکم کنند مرسی :rolleyes: :redface:
    The harder I work, the luckier I get

    #2
    پاسخ : کنترل led

    سلام دوست خوبم
    من بیسیک بلد نیستم اما برنامه نویسی ترتیبی روشهای استانداردی داره. یه روش ساده استفاده از مرحله است. شما یک متغیر به نام Stateآ‌ تعریف می کنی و در شروع اونو صفر قرار می دید. هر وقت برنامه خواست ترتیب ها را شروع کنه Stateآ‌ یک میشه. هر مرحله که انجام میشه یکی به مقدار State اضافه میشه. تا در آخر به مرحله نهایی برسیم.

    ما با این روش می تونیم برنامه های بسیار بزرگ را کنترل کنیم. امیدوارم منظور منو متوجه شده باشید تا مزایای این روش بهره ی کافی را ببرید
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

    دیدگاه


      #3
      پاسخ : کنترل led

      نوشته اصلی توسط ahmadmn
      سلام دوست خوبم
      من بیسیک بلد نیستم اما برنامه نویسی ترتیبی روشهای استانداردی داره. یه روش ساده استفاده از مرحله است. شما یک متغیر به نام Stateآ‌ تعریف می کنی و در شروع اونو صفر قرار می دید. هر وقت برنامه خواست ترتیب ها را شروع کنه Stateآ‌ یک میشه. هر مرحله که انجام میشه یکی به مقدار State اضافه میشه. تا در آخر به مرحله نهایی برسیم.

      ما با این روش می تونیم برنامه های بسیار بزرگ را کنترل کنیم. امیدوارم منظور منو متوجه شده باشید تا مزایای این روش بهره ی کافی را ببرید
      سلام آقا احمد
      متسفانه زیاد متوجه منظورتون نشدم :cry: (هنوز مبتدیم آخه و میکرو پاس نکردم و هر چی یاد گرفتم از این سایت عالیتون بوده :nerd::job
      منظورتون اینه که باید در هر مرحله state رو بریزیم تو یه متغیر و ببنیم آخر سر کدام متغیر از همه کمتر است اول اون اجرا بشه درسته؟ :redface:
      The harder I work, the luckier I get

      دیدگاه


        #4
        پاسخ : کنترل led

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

        مثلا

        1- به بانک برم. وقتی رسیدم نوبت مرحله ی بعد است.
        2- اگه حسابم پول کافی داشت 10 تومن بردارم. اگه بانک پول را داد نوبت مرحله ی بعد است و اگر پول نداشت نوبت مرحله آخر است.
        3- به بازار برم. وقتی رسیدم نوبت مرحله ی بعد است.
        4- قیمت قطعه ای را بپرسم. اگه کمتر از 10 تومن بود نوبت مرحله ی بعد است و اگر بیشتر بود نوبت مرحله آخر است.
        5- قطعه را میخرم و به ایستگاه اتوبوس می روم .وقتی رسیدم نوبت مرحله ی بعد است.
        6- 5 دقیقه منتظر می مانم و اگر اتوبوس نیامد نوبت مرحله ی بعد است.
        7- یک تاکسی میگیرم و به خانه برمی گردم ...

        اگر دقت کنید شما تونستید یک پروسه را به چند مرحله تقسیم کنید. به این نوع تقسیم مراحل "ماشین حالت" (State machine) هم میگن.
        متغیر Stateآ‌ شماره مرحله را تعیین می کند.
        در این روش بجای استفاده از gotoآ‌ باید از دستور Case استفاده کرد. با این دستور در هر سیکل برنامه متغیر Stateآ‌ چک می شود و هر مقداری که داشت همان مرحله اجرا می شود.

        امیدوارم تونسته باشم این روش بسیار سودمند را درست بیان کرده باشم
        با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

        دیدگاه


          #5
          پاسخ : کنترل led

          دوست عزیز من کاری به غیر استاندارد بودن برنامت(چون خودم هم هس وحال ندارم این جور که استادahmadmn میگن برنامه بنویسک(معمولا))

          ولی تنها مشکل برنامت یه چیزه

          lookup
          ببین وقتی که یه عدد رو کیبرد رو میزنی اون عددی که رو کیبرده نوشته وارد میکرو نمیشه بلکه یه عدد بین 0 نا 15 هست و تو باید خودت مشخص کنی که به چه عددی تبدیل بشه
          تو help bascom همین کلمه رو سرچ کن کامل نوضیح داده اگر نفهمیدی بگو تا بیشتر توضیح بدم :biggrin:
          علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

          دیدگاه


            #6
            پاسخ : کنترل led

            سلام دوست عزیز
            همون طور که امید گفتن باید از lookup استفاده کنی.در ضمن زیر برنامه start1 هم به صورت کلی نوشنه شده و تقسیم بندی نشده و چون مقدار B>0 هستش و تو متغیر های دیگه ریخته میشه تمام شرط ها درست در میاد و برنامه پشت سرهم تمامشون رو چک میکنه و دستورات مربوط به همون رو اجرا میکنه برا همین اول LED1 روشن میشه و برنامه طبق نظرتون پیش نمیره.شما متونید از select case استفاده کنید .مثل :
            select case b :
            case 10:
            set portb.0
            case 11:
            set portb.1
            .
            .
            .
            .
            end select

            موفق باشی
            سه توصیه دارم:
            1.کار 2.کار 3.کار
            ادیسون

            دیدگاه


              #7
              پاسخ : کنترل led

              درسته که من lookup نذاشتم و عددها طبق اون چیزی که روی کیبرد نوشته وارد نمیشه ولی دکمه های کیبرد را بلدم که چه دکمه ای چه عددی را وارد میکنه از اون بابت ایرادی نداره. :nerd:
              مشکل من اینه که اولویتهای روشن شدن ال ی دی ها درست عمل نمیکنه
              پدرم در اومد از دیشب تا حالا همه ی این روشها را امتحان کردم ولی بازم نشد که نشد :angry: :angry:
              اگه میشه یکم بیشتر راهنماییم کنید
              متشکر :rolleyes:
              The harder I work, the luckier I get

              دیدگاه


                #8
                پاسخ : کنترل led

                عزیز من بهت گفتم که start1 رو تقسیم بندی کن و اون قسمت B=B*10 رو حذف کن چون همواره مقدارش 0 هست.
                اوکی.یبار برنامه رو پیش خودت اجرا کن ببین چه بلایی سر متغیرهاش میاد.اگه نمیتونی رو کاغذ پیادش کن خط به خط.
                سه توصیه دارم:
                1.کار 2.کار 3.کار
                ادیسون

                دیدگاه


                  #9
                  پاسخ : کنترل led

                  نوشته اصلی توسط حسین.م
                  عزیز من بهت گفتم که start1 رو تقسیم بندی کن و اون قسمت B=B*10 رو حذف کن چون همواره مقدارش 0 هست.
                  اوکی.یبار برنامه رو پیش خودت اجرا کن ببین چه بلایی سر متغیرهاش میاد.اگه نمیتونی رو کاغذ پیادش کن خط به خط.
                  B=B*10 فقط در مرحله ی اول که هنوز عددی را وارد نکردیم مقدارش صفر است وقتی که عددی را وارد کردیم B=B+A میشود کلا این برنامه را برای این نوشتم که بتونه اعداد چند رقمی را ذخیره کنه مثلا میخاهیم 24 را ذخیره کنیم اول باید 2 را بگیره * 10 کنه و بعد + 4
                  4+(10*2)=24 یکم به برنامه دقت کنید متوجه میشوی که منظورم چیست و برای چی این دستورو نوشتم
                  The harder I work, the luckier I get

                  دیدگاه


                    #10
                    پاسخ : کنترل led

                    B=B*10 فقط در مرحله ی اول که هنوز عددی را وارد نکردیم مقدارش صفر است وقتی که عددی را وارد کردیم B=B+A میشود کلا این برنامه را برای این نوشتم که بتونه اعداد چند رقمی را ذخیره کنه مثلا میخاهیم 24 را ذخیره کنیم اول باید 2 را بگیره * 10 کنه و بعد + 4
                    4+(10*2)=24 یکم به برنامه دقت کنید متوجه میشوی که منظورم چیست و برای چی این دستورو نوشتم



                    سلام .
                    واسه این کار این یه نمونه برنامه:

                    Call Getkey
                    If Keynum < 10 Then
                    A = Keynum * 10
                    end IF
                    Call Getkey
                    If Keynum < 10 Then
                    B = Keynum + A
                    end IF
                    ************************************************** *****************************
                    Getkey:
                    A = Getkbd()
                    Keynum = Lookup(a , Key_read)
                    Return
                    '******************************************** ***********************************
                    Key_read:
                    Data 13 , 14 , 0 , 15 , 12 , 9 , 8 , 7 , 11 , 6 , 5 , 4 , 10 , 3 , 2 , 1
                    '******************************************** ***********************************

                    دیدگاه


                      #11
                      پاسخ : کنترل led

                      از موضوع اصلی خیلی خارج شدیم دیگه
                      کسی نمیتونه یه راهنمایی بکنه :cry: :cry: :cry: :cry: :sad:
                      The harder I work, the luckier I get

                      دیدگاه


                        #12
                        پاسخ : کنترل led

                        دوست عزیز برنامه ای که من گفتم رو به برنامت اضاف کن فکتم جواب بده

                        دیدگاه


                          #13
                          پاسخ : کنترل led

                          بابا من دردم یه چی دیگس با کیبرد مشکلی ندارم
                          فقط میخوام ال ی دی ها به ترتیبی که گفتم روشن شوند همین
                          یعنی کسی نیست تو این انجمن که بیسیک بلد باشه بتونه راهنمایی بکنه منو
                          هیشکی منو دوست ندارهههههههه :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2: :cry2:
                          The harder I work, the luckier I get

                          دیدگاه


                            #14
                            پاسخ : کنترل led

                            حداقل الگوریتمشو بگید چجوری باید بنویسم :cry:
                            The harder I work, the luckier I get

                            دیدگاه


                              #15
                              پاسخ : کنترل led

                              نوشته اصلی توسط narek
                              حداقل الگوریتمشو بگید چجوری باید بنویسم :cry:
                              زبان C آ‌متوجه میشی برات بزارم؟
                              با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                              دیدگاه

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