اطلاعیه

Collapse
No announcement yet.

چراغ راهنمایی قابل تنظیم

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

    چراغ راهنمایی قابل تنظیم

    با سلام خدمت همه دوستان
    من یه برنامه چراغ راهنمایی دارم که چراغ سبز و قرمز 30 ثانیه وبه صورت معکوس شمار است.(30 ثانیه سبز 3 ثانیه زرد و 30 ثانیه قرمز)
    میخواستم یه حالتی به مدار اضافه کنم که مدت زمان چراغ ها قابل تنظیم با کیپد باشند به طوریکه هنگام شروع عددی را با کیپد وارد کنیم و شمارش از این عدد تا 0 باشه بعد 3 ثانیه زرد و دوباره به همان مقدار وارد شده قرمز.
    $regfile = "m32def.dat"
    $crystal = 8000000
    Ddrb = &HFF
    Portb = 0
    Ddrc = &H07
    Portc = 0
    Dim I As Byte
    Do
    Set Portc.0
    For I = 30 To 0 Step -1
    Portb = Makebcd(i)
    Waitms 1000
    Next I
    Reset Portc.0
    Set Portc.1
    Portb = 0
    Waitms 2000
    Reset Portc.1
    Set Portc.2
    For I = 25 To 0 Step -1
    Portb = Makebcd(i)
    Waitms 1000
    Next I
    Reset Portc.2
    Loop
    End
    برنامه را به صورت زیر تغییر دادم و کار میکنه یعنی وقتی مثلا عدد اول را 1و عدد دوم را 2 وارد میکنم بعد از زدن *شروع به شمردن میکنه از 12 تا 0 ولی مشکلی که دارم اینه که اعداد را درست نشون نمیده و یه چیزای دری وری رو سگمنت میده البته برا مدار از سگمنت مالتی پلکس استفاده میکنم
    ممنون میشم اشکال برنامه را بگین و تصحیحش کنید

    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Portb = Output
    Config Kbd = Portd , Debounce = 100 , Delay = 1
    Dim A As Byte
    Dim B1 As Byte
    Dim B2 As Byte
    Dim Num As Byte
    Dim B As Byte
    Dim C As Byte

    Dim I As Byte


    Ddrb = &HFF
    Portb = 0

    Ddrc = &H07
    Portc = 0

    Goto Adad1

    Adad1:

    A = Getkbd()
    If A > 15 Then
    Goto Adad1
    End If
    B = Lookup(a , W)
    Waitms 300
    Goto Adad2
    Adad2:
    A = Getkbd()
    If A > 15 Then
    Goto Adad2
    End If
    B1 = Lookup(a , W)
    Waitms 300

    '--------------------------
    B = B * 10
    B1 = B + B1
    '--------------------------
    Goto Sett
    Sett:
    A = Getkbd()
    If A > 15 Then
    Goto Sett
    End If

    Waitms 100
    If A = 12 Then
    Num = B1
    Goto Prog1
    Else
    Goto Sett
    End If

    Prog1:


    Do
    Set Portc.0
    For I = Num To 0 Step -1
    Portb = Makebcd(i)
    Waitms 1000
    Next I
    Reset Portc.0

    Set Portc.1
    Portb = 0
    Waitms 2000
    Reset Portc.1


    Set Portc.2
    For I = Num To 0 Step -1
    Portb = Makebcd(i)
    Waitms 1000
    Next I
    Reset Portc.2

    Loop

    End
    W:
    Data 1 , 2 , 3 , 99 , 4 , 5 , 6 , 99 , 7 , 8 , 9 , 99 , 99 , 0 , 99 , 99




    #2
    پاسخ : چراغ راهنمایی قابل تنظیم

    با سلام


    در قسمت B = Lookup(&B1111110 , Data) به جای فراخانی عدد باید معادل اون عددو از جدول رو برداری که به صورت باینری نوشتیم

    Data &B1111110

    اینم بستگی داره سون سگمنتت کاتد مشترکه یا آند چون اگه برعکس باشه باید دقت کنی اون یک هارو صفر وصفرهاتو یک کنی تا عددت درست نشون بده

    مشترک موفق باشی
    معلوليت محدوديت نيست

    آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

    دیدگاه


      #3
      پاسخ : چراغ راهنمایی قابل تنظیم

      ممنون از پاسخت این کار را کردم ولی باز جواب نداد ضمنا از سگمنت کاتد مشترک 2 تایی استفاده میکنم

      دیدگاه


        #4
        پاسخ : چراغ راهنمایی قابل تنظیم

        یه سوال سون سگمنتو راه اندازی کردی با یه برنامه ساده کار میکنه؟برا ی مطمعن شدن اتصالات میگم ببین درست اعداد رو تو یه برنامه کوچیک صحیح نشون میده یا بازم اون شکلی نشون میده؟
        معلوليت محدوديت نيست

        آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

        دیدگاه


          #5
          پاسخ : چراغ راهنمایی قابل تنظیم


          Do
          Set Portc.0
          For I = Num To 0 Step -1
          Portb = Makebcd(i)
          Waitms 1000
          Next I
          Reset Portc.0

          Set Portc.1
          Portb = 0
          Waitms 2000
          Reset Portc.1


          Set Portc.2
          For I = Num To 0 Step -1
          Portb = Makebcd(i)
          Waitms 1000
          Next I
          Reset Portc.2

          Loop

          تو چند جا خوندم مثل اینکه تو این قسمت باید از روش رفرش واسه نمایش اعداد استفاده کنم میشه راهنماییم کنید؟

          دیدگاه


            #6
            پاسخ : چراغ راهنمایی قابل تنظیم

            سلام

            بله باید با روش رفرش انجام بدید منم اینکارو تو کار با سون سگمنت انجام میدم
            شما گفتی از 7سگمنت دوتایی استفاده کردی که هر کدوم یه پایه داره که پایه فرمانه .
            حالا شما میای عددی رو میریزی روی پورت وصل شده به سون سگمنت وبعد فرمان روشن شدن اون سون سگمنت رو صادر میکنی ومیگی مثلا 500میلی ثانیه روشن باشه دنبال همین برنامه عدد دوم رو میریزی رو همون یورت وصل شده به سون سگمنت ولی این بار میگی پایه دومین سون سگمت روشن بشه واولی رو با دستور رست خاموش میکنی واینم 500میلی ثانیه روشن باشه
            الان شاید فکر کنی چطوری دوتا عدد جدا جدا نشون میده که
            ولی نه چون این کار با سرعت زیادی انجام میشه چشم قادر به تشخیصش نیست وهر دو عدد رو کنار هم نشون میده مثلا 80 یه مثلا میزنم بهتر بفهمی
            do
            reset portb.1
            set portb.0
            porta=b&0000001
            waitms 500
            reset portb.0
            set portb.1
            porta=b&11111111
            waitms 500
            loop
            در اینجا پورت b مسئول کنترل پایه فرمان سون سگمنتهاست وپورت a هم به پایه های سگمنتها مختلف a b c d e f g و صل میشن وهر عددی مساوی پورت بکنی(رو پورت بریزی) همون عدد با اجازه پایه فرمانش نشون داده میشه
            حالا ما یه سون سگمنت داریم که هفت پایه برای اعداد و1 پایه برای فرمان ذاریم که هفت پایه به پورت a واون یه پایه به پین پورت b.0 وصل میشه حالا اگه اومدیم عدد ما از یه رقم بیشتر شد ؟ چیکار باید بکنیم ؟
            اینجا روش رفرش به کمکمون میاد .مثلا عدد ما 888 یعنی سه رقمی شد
            ما هفت پایه 7سگمنت اول رو به پورت a وصل میکنیم برای 7سگمنت دوم هم مثل اولی به همون پورت وصل میکنیم و7 سگمنت سوم رو هم مثل دومی واولی رو همون پورت به پین هاش وصل میکنیم
            درسته که هر سه 7سگمنت رو به پورت واحد وصل کردیم ولی پایه هشتمی هم برای هر 7سگمنت وجودداره که دستور روشن وخاموش بودن سون سگمنت رو
            میده حالا با توجه به این برنامه هر یک از سون سگمنت ها به ترتیب روشن میشن وعدد اون لحظه رو که روی پورت هست نشون میدن
            این کار با سرعت زیادی انجام میشه که ماا متوجه نمیشیم که اول عدد سون سگمت اول روشن شد بعد دومین عدد رو دیدیم بعد سومی رو دیدم نه خیر به صورت یه عدد 3 رقمی ثابت مشاهده میکنیم اگر هم روشن خاموش شدنشون رو دیدیم باید اون زمان 500ملی ثانیه رو کم کنیم اگه خیلی سوسو زد زیادش میکنیم
            یه مثلا بگم فرکانس برق شهر چنده؟50 یعنی لامپ خونه 50 بار روشن خاموش میشه در یه ثانیه ولی ما چرا نمیبینیم؟ چون چشم ما قادر به تشخیص این سرعت نیست ولی اگه این فرکانس رو بیاریم پایین میبینی که بله لامپ چشمک میزنه

            do
            reset portb.2
            reset portb.1
            set portb.0
            porta=b&1111111
            waitms 500
            reset portb.2
            reset portb.0
            set portb.1
            porta=b&1111111
            waitms 500
            reset portb.0
            reset portb.1
            set portb.2
            porta=b&1111111
            waitms 500
            loop

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

            آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

            دیدگاه

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