اطلاعیه

Collapse
No announcement yet.

سوال: کمک فوری کمک در باره ی kbd (کیبرد) در ← BASCOM-AVR

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

    سوال: کمک فوری کمک در باره ی kbd (کیبرد) در ← BASCOM-AVR

    سلام
    خسته نباشید ، یه سوال در مورد kbd داشتم میخام یه کیبرد مثل کیبرد موبایل بسازم که با دوبار فشار دادن آن در یک ثانیه حرف دیگه ای رو نشون بده از دوستان میخام که دستور کاملشو برام بنویسن :cry:
    با تشکر

    #2
    پاسخ : سوال:در باره ی kbd (کیبرد)

    سلام

    کاش می فرمودین که از کدوم زبان برنامه نویسی استفاده می کنین؟

    اما به هر حال ؛ همونطوری که می دونین وقتی کلیدی روی kbd زده میشه ؛ یه کدی به میکرو ارسال میشه حالا شما بعد از اینکه این کد رو دریافت کردی (حالا مربوط به هر کدوم از کلید ها بود) برنامتو بنداز تو loop و مثلا 500ms زمان بگیر اگه تو این زمان همون کلید قبلی زده شد حرف مورد نظرتو نشون بده و اگه کلیدی زده نشد حرف اولی رو نشون بده ؛ به همین راحتی!

    امیدوارم منظورم رو درست رسونده باشم؛ اگه نه که به بزرگواری خودتون ببخشید.

    موفق باشید

    دیدگاه


      #3
      پاسخ : سوال:در باره ی kbd (کیبرد)

      در BASCOM-AVR اکه میشه یکم بیشتر توصیح بدید خیلی خوب حالیم نشد

      دیدگاه


        #4
        پاسخ : سوال:در باره ی kbd (کیبرد) در BASCOM-AVR

        فکر کنم اینطوری که می نویسم بشه
        مثلا
        کد:
        main:
        do
        if portb.0=1 then
        b=10
         incr b
        _timer=0
        endif
        incr _timer
        waitms 2
        cls
        lcd b
        loop until timer<500
        _timer=0
        t1=b
        lcd T1
        goto main
        ببینید شما اینجا می تونید برای هر کلید مثلا B رو تو یه محدوده ده تایی قرار بدید. و اونجایی که نوشته T1 تو یه شرط بزارید و برای هر عددی کاراکتر خاصی در نظر بگیرید. البته این رو بگم خیلی کوتاه نوشتم و برای کیبرد ماتریسی هم نیست. فقط برای مثال روی یه پرت نوشتم. خلاصه می تونی ساختاری مثل این رو براش درست کنی. البته این چیزا مثل کتابخونه درست می کردی راحتتر بودی. این رو هم بگم این برنامه رو آزمایش نکردم و بی نقص نیست و از ساده ترین راه نوشتم و از تایمر استفاده نشده.در صورتی که استفاده می شد بهتر بود.
        دوستان دیگه هم بیان و راهنمایی کنن. ما شاگردیم و باید یاد بگیریم.
        موفق باشید.
        کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

        دیدگاه


          #5
          پاسخ : سوال:در باره ی kbd (کیبرد) در BASCOM-AVR

          کسی نیست جواب بده :angry: :angry: :angry: :angry:

          دیدگاه


            #6
            پاسخ : سوال:در باره ی kbd (کیبرد) در BASCOM-AVR

            من که جواب شما رو دادم. چاره ساز نبود؟ اگه نه، بگید تا بهتر توضیح بدم.
            کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

            دیدگاه


              #7
              پاسخ : سوال:در باره ی kbd (کیبرد) در BASCOM-AVR

              نه خوب هالیم نشد اگه میشه یکم بیشتر در مورد تایمرشم توضیح بدی اگرم زحمت نیست پروژرو تو BASCOM-AVR واسم بنویسید پلود کنید یا اول خودتون امتحان کنید بعد تو کد واسم بزارید ممنون

              دیدگاه


                #8
                پاسخ : سوال: کمک فوری کمک در باره ی kbd (کیبرد) در ← BASCOM-AVR

                یکم دارید عجله می کنید . شما پیغام دادین که همین الان بنویسم :eek: :eek: :eek:
                منم تا حالا ننوشتم به همین خاطر مطمئنا دفعه اول نمی تونه برنامه خوبی از آب در بیاد. یکی نوشتم ، ولی مشکل داشت. هر چی فکر کردم نفهمیدم مشکلش از چیه. البته چند تا دستور نوشتم که اگه کاراکترهای یک کلید تموم شد، دور بزنه و... اما چون مشکل بازم سر جاش بود، گفتم اول این رو باید حل بکنیم، بعد بریم بهینه سازیش کنیم.
                دوستان لطفا نگاه کنن مشکل از کجاست. چون نمی دونم از کمبود خوابه، یا هر چیز دیگه ای که من متوجه نمی شم کجای برنامه ای که نوشتم مشکل داره. اول رو پروتئوس اجراش کنید، بعد خودتون متوجه می شید. مشکل اینجاست که پس از گذشت مدت مقرر ، باید کاراکتر جدید تو fulltext ذخیره بشه و کاراکتر بعدی، بعد از اون بیاد. مشکل اینجاست که کاراکتر ها از یکی تجاوز نمی کنه. :angry:
                اینم برنامه اش :
                کد:
                $regfile = "m8def.dat"
                $crystal = 4000000
                Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
                Config Lcd = 16 * 2
                Config Kbd = Portd , Debounce = 250 , Delay = 150
                '--------------------------------------------------
                Dim A As Byte
                Dim B As Byte
                Dim B2 As Byte
                Dim C As Byte
                Dim T As Word
                Dim Text As String * 3
                Dim Fulltext As String * 10
                '--------------------------------------------------
                Main:
                Fulltext = ""
                T = 0
                C = 0
                Do
                M1:
                Incr T
                A = Getkbd()
                If A > 15 Then
                B = ""
                Waitms 2
                Goto M1
                End If
                If A =< 15 Then
                T = 0
                B = Lookup(a , Dat1)
                Incr C
                Waitms 2
                Goto M2
                End If
                Loop
                M2:
                If B = 1 Then
                Select Case C
                Case 1:
                Text = "A"
                Case 2:
                Text = "B"
                Case 3:
                Text = "C"
                end select
                End If
                If B = 2 Then
                Select Case C
                Case 1:
                Text = "D"
                Case 2:
                Text = "E"
                Case 3:
                Text = "F"
                End Select
                End If
                If B = 3 Then
                Select Case C
                Case 1:
                Text = "G"
                Case 2:
                Text = "H"
                Case 3:
                Text = "I"
                End Select
                End If
                '--------------
                If T <= 20 Then
                Cls
                Lcd Fulltext
                Lcd Text
                End If
                If T > 20 Then
                T = 0
                C = 0
                Fulltext = Fulltext + Text
                Cls
                Lcd Fulltext ; ">"
                End If
                Goto M1
                '------------------------------------------------------------------------
                Dat1:
                Data 1 , 2 , 3 , 21 , 4 , 5 , 6 , 22 , 7 , 8 , 9 , 23 , 24 , 0 , 25 , 26
                کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

                دیدگاه


                  #9
                  پاسخ : سوال: کمک فوری کمک در باره ی kbd (کیبرد) در ← BASCOM-AVR

                  خیلی ممنون من خودم روش کار میکنم ممنون میشم شمام یکم دیکه روش کار کنید امید وارم بتونم جبران کنم :bye :nice:

                  دیدگاه


                    #10
                    پاسخ : سوال: کمک فوری کمک در باره ی kbd (کیبرد) در ← BASCOM-AVR

                    کد:
                    این یکی رو نوشتم، از قبلی بهتره، ولی باز هم بدون مشکل نیست. راستش من دیگه عقلم جایی قد نمی ده. خودتون ببینید می تونید این یکی دو تا مشکلش رو هم حل کنید. 
                    
                    $regfile = "m8def.dat"
                    $crystal = 4000000
                    Config Kbd = Portd , Debounce = 250 , Delay = 150
                    Config Lcd = 16 * 2
                    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.5 , E = Portb.4
                    
                    '------------------------------------------------
                    Dim Key As Byte
                    Dim B As Bit                     
                    Dim Num As Byte                  
                    Dim Kpn As Byte                  
                    Dim T As Byte                    
                    Dim Lastkey As Byte                 
                    Dim Char As String * 2                  
                    Dim Ftxt As String * 10            
                    '------------------------------------------------
                    Waitms 1000
                    Main:
                    T = 0
                    Kpn = 0
                    Key = 0
                    Num = 0
                    Lastkey = 30
                    Char = ""
                    Ftxt = ""
                    M1:
                    Kpn = 0
                    M2:
                    T = 0
                    Do
                    M3:
                    Waitms 2
                    Incr T
                    Key = Getkbd()
                    If Key < 15 Then
                    Num = Lookup(key , Dat)
                    Incr Kpn
                    T = 0
                    Goto Show
                    End If
                    If T > 10 Then
                    Goto Ftxtshow
                    End If
                    Loop
                    Show:
                    If Kpn > 3 Then Kpn = 1
                    If Num = 1 Then
                    Select Case Kpn
                    Case 1:
                    Char = "A"
                    Case 2:
                    Char = "B"
                    Case 3:
                    Char = "C"
                    End Select
                    End If
                    If Num = 2 Then
                    Select Case Kpn
                    Case 1:
                    Char = "D"
                    Case 2:
                    Char = "E"
                    Case 3:
                    Char = "F"
                    End Select
                    End If
                    If Num = 3 Then
                    Select Case Kpn
                    Case 1:
                    Char = "G"
                    Case 2:
                    Char = "H"
                    Case 3:
                    Char = "I"
                    End Select
                    End If
                    Cls
                    Lcd Ftxt ; Char
                    If B = 0 Then
                    Lastkey = Num
                    B = 1
                    Goto M3
                    Elseif Lastkey = Num Then
                    Goto M3
                    Else
                    Lastkey = Num
                    Goto Ftxtshow
                    End If
                    Ftxtshow:
                    T = 0
                    Kpn = 0
                    Ftxt = Ftxt + Char
                    Cls
                    char=""
                    Lcd Ftxt
                    Goto M3
                    Dat:
                    Data 1 , 2 , 3 , 21 , 4 , 5 , 6 , 22 , 7 , 8 , 9 , 23 , 24 , 0 , 25 , 26
                    کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

                    دیدگاه

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