اطلاعیه

Collapse
No announcement yet.

راهنمایی کنید در مورد اتصال 10کلید به یک پورت

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

    راهنمایی کنید در مورد اتصال 10کلید به یک پورت

    با سلام به دوستان
    با راهنمایی شما میخام یه 10 کلیدو به یک پورت یا دو سه تا از پین های میکرو بدم
    در بعضی مواقع ممکنه که 4 کلید با هم زده بشه (یعنی هر کلیدی که زده شده مشخص بشه)
    یه چیزی خودم پیدا کردم :NO: .آیا این به کار من میاد؟

    نمیدونم منظورمو واضح گفتم یا نه :sad:
    لطفا کامل توضیح بدید (اگه یک مثال هم باشه ممنون میشم)
    منتظر جوابتون هستم
    شاد بودن تنها انتقامی است که انسان میتواند از زندگی بگیرد"چگوارا"

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

    سلام دوست من
    شما میتونی تا 16 تا کلید رو به یک پورت وصل کنی(چهار تا سطر وچهار تا ستون)بدون نیاز به هیچ ای سی جداگانه ای!
    شما این کارو بکنی به نظرم بهتره ومشکلی هم نیست.
    [img width=271 height=100]http://upload7.ir/imgs/2014-05/42296300898709327115.jpg[/img]

    خداروشکر! نمردیمو معنی تدبیر رو هم فهمیدیم.دی:

    دیدگاه


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

      نوشته اصلی توسط ah rad
      سلام دوست من
      شما میتونی تا 16 تا کلید رو به یک پورت وصل کنی(چهار تا سطر وچهار تا ستون)بدون نیاز به هیچ ای سی جداگانه ای!
      شما این کارو بکنی به نظرم بهتره ومشکلی هم نیست.
      دوست عزیز کاش یشتر توضیح میدادی
      ولی فکر کنم منظور شما راه اندازی کیبرد باشهconfig kbd
      این کارو کردم ولی همیشه بیشترین مقدارو نشون میده(یعنی اگر کلید 1 رو بزنی و بعد با کلید 1 مثلا 5 رو بزنی فقط 5 رو نشون میده.من میخام هر چندتا کلید که زده شده رو بفهمم)
      با تشکر
      شاد بودن تنها انتقامی است که انسان میتواند از زندگی بگیرد"چگوارا"

      دیدگاه


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

        نوشته اصلی توسط a302866a
        دوست عزیز کاش یشتر توضیح میدادی
        ولی فکر کنم منظور شما راه اندازی کیبرد باشهconfig kbd
        این کارو کردم ولی همیشه بیشترین مقدارو نشون میده(یعنی اگر کلید 1 رو بزنی و بعد با کلید 1 مثلا 5 رو بزنی فقط 5 رو نشون میده.من میخام هر چندتا کلید که زده شده رو بفهمم)
        با تشکر
        کاری نداره البته چندین راه نیز دارد
        یکی از راه ها این است که شما یک جدول از حالت های ممکن درست کنی (البته بعد از تهیه ی تابع اسکن صفحه کلید به صورت ماتریس ) و بعد عمل مقایسه را انجام بدید شبیه این کار را آقای سپاس یار تو همین انجمن انجام داده فایل آموزش avr توسط آقای سپاس یار
        فایل pdf
        دکتر چمران در 1311 در تهران متولد شد
        وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
        او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

        دیدگاه


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

          دوستان یه کدی پیدا کردم ولی گیجم کرد کسی هست خط به خط واسم توضیح بده
          آیا این میتونه دو کلید همزمان نشون بده
          کد:
          $regfile = "m16def.dat"
          $crystal = 1000000
          Config Porta = Input
          Config Portc = Output
          Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
          Config Lcd = 16 * 2
          Dim Key As Byte
          Dim X As Byte , Y As Byte , A As Byte
          Cursor Off
          Cls
          Do
          Locate 1 , 1
          Lcd Key ; "  "
          
          Waitms 50
          Gosub Getkey
          
          Loop
          
          Getkey:
          X = 0
          For Y = 0 To 2
          Portc = 2 ^ Y
          A = Pinc
          Shift A , Right , 3
          A = A And 7
          While A > 0
          A = A / 2
          Incr X
          Wend
          If X <> 0 Then Exit For
          Next
          
          While A > 0
          A = Pinc
          Shift A , Right , 3
          A = A And 7
          Wend
          
          If X = 0 Then Key = 16
          A = X - 1
          A = A * 4
          A = A + Y
          If X <> 0 Then Key = Lookup(a , Da)
          Return
          
          Da:
          Data 10 , 0 , 11 , 12 , 1 , 2 , 3 , 13 , 4 , 5 , 6 , 14 , 7 , 8 , 9 , 15
          شاد بودن تنها انتقامی است که انسان میتواند از زندگی بگیرد"چگوارا"

          دیدگاه


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

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

            شما میتونی تا 16 تا کلید رو به یک پورت وصل کنی(چهار تا سطر وچهار تا ستون)بدون نیاز به هیچ ای سی جداگانه ای!
            شما این کارو بکنی به نظرم بهتره ومشکلی هم نیست.
            دقیقاً همینطوره منتها نه به صورت ماتریس معمولی بلکه با کمک دیود (برای جلوگیری از اتصال پایه ها موقع فشردن 3 کلید به بالا)

            دوست عزیز کاش یشتر توضیح میدادی
            ولی فکر کنم منظور شما راه اندازی کیبرد باشهconfig kbd
            این کارو کردم ولی همیشه بیشترین مقدارو نشون میده(یعنی اگر کلید 1 رو بزنی و بعد با کلید 1 مثلا 5 رو بزنی فقط 5 رو نشون میده.من میخام هر چندتا کلید که زده شده رو بفهمم)
            با تشکر
            نه دیگه با config kbd نمیشه چند تا کلید رو همزمان خوند باید یه کد اسکن خاص برای ماتریس بنویسیم یعنی در واقع باید کلیدها رو به صورت ماتریسی به یکی از

            پورت های میکرو بزنیم و یه تابع ساده براش بنویسیم که ستون ها رو به ترتیب 0 کنه و سطر ها رو چک کنه، اینطوری

            اگه به فرض چند تا کلید هم با هم فشرده بشن راحت میشه تشخیص داد. البته هر کلید باید مثل شماتیک زیر با یه دیود

            به ماتریس وصل بشه تا اگه همزمان چند تا کلید توی سطر ها و ستون های مجاور فشرده شده بودن همه رو به هم

            وصل نکنه...



            نمونه کد:

            توی این کد پورت D کلاً به صفحه کلید میره. 4 بیت کم ارزش یعنی 0 تا 3 خروجی هستن و 4 تا 7 هم ورودی که مقاومت

            پول پشون هم ست شده. برنامه یه حلقه Do رو همیشه اجرا میکنه و For رو 4 بار؛ حلقه for هر بار یکی از ستون ها

            رو 0 میکنه و کل پورت رو میخونه. مقدار رو با دستور toggle برعکس میکنه (معادل علامت "!" در C). بعدش با 11110000 اند میکنه تا فقط بخش ورودی یعنی پایه های پر ارزش تر 4 تا 7 خونده بشن و مقدار نهایی رو میریزه توی اعضای آرایه. پس عضو 0 آرایه میشه معادل وضعیت کلید های ستون 0 (اولین ستون از سمت راست). مثلاً اگه توی ستون 0 هیچ کلیدی رو نزنده باشیم مقدار عضور شماره 0 آرایه arr میشه: 00000000 و اگه کلید اول و آخر رو زده باشیم میشه: 10010000 یعنی فقط با 4 تا بیت پر ارزش هر عضو آرایه کار داریم. میشه یه ماتریس 4 در 4 رو تصور کرد که هر عضوش وضعیت یکی از کلید هاست...

            البته بهتر بود که 4 بیت پر ارزش هر عضو آرایه رو جدا می کردیم و یه متغیر 16 بیتی مثل

            long یا اصلاً یه رشته می ساختیم که هر مولفش برابر وضعیت کلید فشرده شده باشه.

            گفتم شاید راه ساده تری هم باشه واسه همین زیاد رو سورسش وقت نزاشتم، تاببینیم اساتید چه نظری دارن...

            راستی اون دستور config base=0 باعث میشه آرایه های بیسیک عین زبان C بر مبنای 0 قرار بگیرن و اولین عضوشون

            شماره صفر بشه، واسه راحتی کار تو حلقه ها بهتره مثل C کار کنیم... اصلاً با gcc راحت تر از بسکام میشه کار کرد، تو

            بسکام محدودیت داریم که تو هر محاسبه فقط دو تا متغیر بزاریم ولی c محدودیتش کمتره.. :angry:

            کد:
            'multiple keys by Behnam Zakizadeh (2013) http://avr64.com
            $regfile="m8def.dat"
            $crystal=1000000
            config lcdpin=pin, rs=pinb.0, e=pinb.1, db4=pinb.2, db5=pinb.3, db6=pinb.4, db7=pinb.5
            config lcd=16*2
            
            DDRd = &B00001111 'I/O
            PORTd = &B11110000 'active pullups
            
            config base = 0
            dim i as byte, tmp as byte, arr(3) as byte
            cls:cursor off
            
            'scan
            do
             for i = 0 to 3
             cls
             tmp = 2 ^ i
             toggle tmp
             portd=tmp
             tmp = pind
             toggle tmp
             tmp = tmp and &B11110000 'no read pin0-3(outs)
             arr(i) = tmp
             next i
            
             cls
             lcd "0> ";bin(arr(0))
             lowerline
             lcd "1> ";bin(arr(1))
             wait 1
             cls
             lcd "2> ";bin(arr(2))
             lowerline
             lcd "3> ";bin(arr(3))
             wait 1
            loop
            end

            دیدگاه


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

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

              دیدگاه


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

                دوستان میشه از این کد استفاده کرد؟
                شما هی راهی سراق ندارید؟ :sad:
                شاد بودن تنها انتقامی است که انسان میتواند از زندگی بگیرد"چگوارا"

                دیدگاه


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

                  [آموزشی] صفحه کلید نردبانی مقاومتی (R2R Button Resistor Ladder)

                  دیدگاه

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