اطلاعیه

Collapse
No announcement yet.

اسکن صفحه کلید

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

    اسکن صفحه کلید

    سلام من کامپیوتر می خونم و از الکترونیک زیاد سر در نمیارم.پایان نامه ام درمورد ساخت قفل رمز دیجیتاله .الان یک کد اسکن صفحه کلید دارم برا کیپد 4*4 اما نمی دونم جدول lookup رو چطوری بنویسم که اعداد درست نمایش داده بشه میشه کمکم کنید.اساس جدول lookup رو نمی دونم

    7 8 9 ÷
    4 5 6 *

    1 2 3 -
    ON/C 0 = +

    کیپد به شکل بالاست اما با کد من به شکل زیر هست:
    0 1 2 3
    4 5 6 7
    8 9 10 11
    12 13 14 15

    اینم کد :
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 , E = Pinb.3
    Config Lcd = 16 * 2
    Config Portc = Input
    Config Portb = Output
    Dim Asd As Byte
    Dim A As Byte
    Waitms 1

    Enable Interrupts
    Enable Int0
    Config Int0 = Rising
    On Int0 Int11
    Do
    Loop
    End

    Int11:
    A = Pinc
    A = A And &B00001111
    Home
    Lcd A
    Return
    حالا جدول lookup رو کجاش بذارم و چطوری ؟ مرسی

    #2
    پاسخ : اسکن صفحه کلید

    سلام اگر زبان سی بلد هستی بگو کمکت کنم کارت زودتر راه می افده جیگر :agree: :agree: :agree: :agree:

    دیدگاه


      #3
      پاسخ : اسکن صفحه کلید

      زبان سی بلد نیستم پروژمو باید با بسکام بنویسم .بچه ها کمممممممممممممممممممممممممک عجله دارم.

      دیدگاه


        #4
        پاسخ : اسکن صفحه کلید

        نوشته اصلی توسط shadi_computer

        Int11:
        A = Pinc
        A = A And &B00001111
        Home
        Lcd A
        Return
        سلام،
        من نحوه برنامه نوشتنت رو متوجه نشدم.
        در این قسمت برنامه میخوای چیکار کنی..؟
        میخوای از کیپد عدد بگیری و با رمز مورد نظر چک کنی..؟
        تشكر لازم نيست. :^O
        اينها همش وظيفه ست. :^O

        دیدگاه


          #5
          پاسخ : اسکن صفحه کلید

          دوست عزیز این قسمت درواقع یک عدد رو از پورت سی که کیبورد بهش وصل هست میگیره و چون صفحه کیپد 4*4 هست و 16 کلید داره این تیکه نوشته شده . عدد از کیپد خونده می شه و روی نمایشگر نشون داده می شه .

          دیدگاه


            #6
            پاسخ : اسکن صفحه کلید


            کد:
            Config Kbd = Portc
            
            Dim Key As Byte
            
            Do
             Key = GetKbd()
             ' Process Key with values 0..15
            
            Loop
            End

            دیدگاه


              #7
              پاسخ : اسکن صفحه کلید

              نوشته اصلی توسط shadi_computer
              دوست عزیز این قسمت درواقع یک عدد رو از پورت سی که کیبورد بهش وصل هست میگیره و چون صفحه کیپد 4*4 هست و 16 کلید داره این تیکه نوشته شده . عدد از کیپد خونده می شه و روی نمایشگر نشون داده می شه .
              سلام
              بصورت زیر بنویس



              Dim A As Byte
              Dim B As Byte

              config kbd=portc

              cls
              Do
              D:
              Do
              A = Getkbd()
              B = Lookup(a , Table)
              Loop Until A <> 16
              Do
              A = Getkbd()
              Loop Until A = 16
              A = 0
              Lcd B
              Loop
              End
              Table:
              Data 1 , 4 , 7 , 10 , 2 , 5 , 8 , 0 , 3 , 6 , 9 , 11
              تشكر لازم نيست. :^O
              اينها همش وظيفه ست. :^O

              دیدگاه


                #8
                پاسخ : اسکن صفحه کلید

                دوباره سلام
                دوست عزیز ، اگه که نمیخوای از جدول lookup استفاده کنی ، دستورات رو مانند مانند زیر بنویس:


                Config Kbd = Portc , Debounce = 50 , Delay = 50

                Dim K As Byte
                Dim A1 As String * 1
                Dim B As Byte


                Do
                K = Getkbd()

                Select Case K
                Case 7 : B = 0
                Case 2 : B = 7
                Case 6 : B = 8
                Case 10 : B = 9
                Case 1 : B = 4
                Case 5 : B = 5
                Case 9 : B = 6
                Case 0 : B = 1
                Case 4 : B = 2
                Case 8 : B = 3
                Case 3 :
                A1 = "c"
                Case 11 :
                A1 = "="
                Case 12 :
                A1 = "/"
                Case 13 :
                A1 = "*"
                Case 14 :
                A1 = "-"
                Case 15 :
                A1 = "+"
                End Select
                Loop Until K <> 16

                Do
                K = Getkbd()
                Loop Until K = 16
                K = 0

                Return


                تشكر لازم نيست. :^O
                اينها همش وظيفه ست. :^O

                دیدگاه


                  #9
                  پاسخ : اسکن صفحه کلید

                  از راهنمایی همه دوستان ممنونم .می خوام از جدول lookup استفاده کنم .البته اون وقفه هم که تو برنامه اصلی خودم هست برام مهمه .

                  دوست عزیز as_6872 ممنونم از کمکتون اما وقتی برنامه رو توی پروتئوس اجرا می کنم اعداد بازم درست نیست حتی مثلا اعدادی مثل 168 به جای 0 نشون داده می شه دلیلش چیه ؟
                  اساس و منطق این عدد گذاری چیه ؟ Data 1 , 4 , 7 , 10 , 2 , 5 , 8 , 0 , 3 , 6 , 9 , 11

                  دیدگاه


                    #10
                    پاسخ : اسکن صفحه کلید

                    نوشته اصلی توسط shadi_computer
                    از راهنمایی همه دوستان ممنونم .می خوام از جدول lookup استفاده کنم .البته اون وقفه هم که تو برنامه اصلی خودم هست برام مهمه .

                    دوست عزیز as_6872 ممنونم از کمکتون اما وقتی برنامه رو توی پروتئوس اجرا می کنم اعداد بازم درست نیست حتی مثلا اعدادی مثل 168 به جای 0 نشون داده می شه دلیلش چیه ؟
                    اساس و منطق این عدد گذاری چیه ؟ Data 1 , 4 , 7 , 10 , 2 , 5 , 8 , 0 , 3 , 6 , 9 , 11
                    سلام
                    جدول lookup رو مانند زیر بنویس و مدار رو هم مانند شکل زیر رسم کن

                    کد:
                    Do
                    A = Getkbd()
                    B = Lookup(a , Table)
                    Loop Until A <> 16
                    Do
                    A = Getkbd()
                    Loop Until A = 16
                    A = 0
                    Lcd B
                    Loop
                    End
                    Table:
                    Data 1 , 4 , 7 , 10 , 2 , 5 , 8 , 0 , 3 , 6 , 9 , 11 , 12 , 13 , 14 ,15

                    شماتیک مدار

                    **توجه داشته باش که بجای ON/C و = و / و * و - و + به ترتیب اعداد 10 ، 11 ، 12 ، 13 ، 14 و 15 بر روی lcd نمایش میشود و باید با یه جمله شرطی یا از نمایش این اعداد را بر روی lcd جلوگیری کنی و یا اینکه به جای این اعداد مطلب مورد نظر بر روی lcd به نمایش در بیاید.

                    تشكر لازم نيست. :^O
                    اينها همش وظيفه ست. :^O

                    دیدگاه


                      #11
                      پاسخ : اسکن صفحه کلید

                      مرسسسسسسسسسسسسسسسسی .ممنون
                      حال یه سوال دیگه دارم ( :redface: ببخشیدا) اگه من بخوام به جای یکی از این کلیدها دستور enter و به جای دیگری backspace روجایگزین کنم باید چه طورعمل کنم ؟
                      دستوری که باید در بسکام بنویسم چیه ؟

                      دیدگاه


                        #12
                        پاسخ : اسکن صفحه کلید

                        نوشته اصلی توسط shadi_computer
                        مرسسسسسسسسسسسسسسسسی .ممنون
                        حال یه سوال دیگه دارم ( :redface: ببخشیدا) اگه من بخوام به جای یکی از این کلیدها دستور enter و به جای دیگری backspace روجایگزین کنم باید چه طورعمل کنم ؟
                        دستوری که باید در بسکام بنویسم چیه ؟
                        میتونی از لوک اپ رشته استفاده کنی

                        دیدگاه


                          #13
                          پاسخ : اسکن صفحه کلید

                          سلام ببخشید می دونم جای این سوال اینجا نیست :cry2:
                          اما واقعا عجله دارم . لطفا کمک کنید :cry2::
                          من می خوام یه برنامه بنویسم که وقتی بریزی رو میکرو ، میکرو منتظر بمونه که من یکی از سه تا کلیدی رو که روی پورت a قرار دادم رو فشار بدم و بعد شروع کنه به خوندن زیر برنامه های مربوط.
                          من برنامه زیر رو نوشتم ولی وقتی تست میکنم فرقی نمیکنه که کدوم کلید رو بزنم میکرو فقط دستور اولی رو اجرا میکنه "لطفا کمک کنید نمیدونم باید چیکار کنم واسه فردا هم حتما باید امادش کنم :angry: :angry:


                          $regfile = "m16def.dat"
                          $crystal = 1000000
                          Config Portb = Output
                          Config Pina.0 = Input
                          Config pina.1 = Input
                          Config Pina.2 = Input
                          Config Debounce = 25

                          Ahoora:
                          Do

                          Debounce Pina.0 , 1 , Jimi
                          Debounce Pina.1 , 1 , Jimi2
                          Debounce Pina.2 , 1 , Jimi3

                          Loop
                          End

                          Jimi:
                          Debounce Pina.1 , 1 , Jimi2
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Goto Ahoora


                          Jimi2:
                          Debounce Pina.2 , 1 , Jimi3
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Goto Ahoora

                          Jimi3:
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Portb.1 = 1
                          Waitms 500
                          Toggle Portb.1
                          Waitms 500
                          Goto Ahoora




                          لطفا کمک کنید :angry: :angry:
                          شکست اولین قدم پیروزیه /

                          دیدگاه


                            #14
                            پاسخ : اسکن صفحه کلید

                            سخت افزارت رو چطور بستی
                            باید اول با یک مقاومت هر پایه میکرو رو به زمین وصل کنی و از بین پایه و مقاوت به یه ظرف کلید بدی و طرف دیگه گلید رو به 5 ولت وصل کنی ویا به صورت نرم افزاری پایه ها رو هم مقدار صفر بده
                            pina.0=0
                            pina.1=0
                            pina.2=0

                            دیدگاه


                              #15
                              پاسخ : اسکن صفحه کلید

                              سلام
                              من یه صفحه کلید 4*3 رو میخوام راه اندازی کنم،تو پروتئوس جواب میده ولی الان که مدار رو بستم به هیج وجه اسکن روخ نمیده. کلی گیج شدم. صفحه کلید و پورت رو از لحاظ اتصالات چک کردم. راهنماییم کنین.



                              اینم کد اسکنم که داخل وقفه compare mach هست.
                              [pre]

                              nterrupt [TIM0_COMP] void TIMER0_COMPARE(void)
                              {
                              static unsigned char j=0;
                              static unsigned char x20=0;
                              unsigned char temp,i;
                              if(++x20==20) // 20 ms intrrup for reading keyboard
                              {
                              x20=0;
                              DDRD=(1<<DDD3)|(1<<DDD2)|(1<<DDD 1)|(1<<DDD0);
                              PORTD=(1<<PORTD6)|(1<<PORTD5)|(1<&l t;PORTD4);
                              temp=(PIND & 0x70);
                              delay_us(5);
                              DDRD=(1<<DDD6)|(1<<DDD5)|(1<<DDD 4);
                              PORTD=(1<<PORTD3)|(1<<PORTD2)|(1<&l t;PORTD1)|(1<<PORTD0);
                              delay_us(5);
                              temp|=(PIND & 0x0F);
                              for(i=0;i<12;i++)
                              {
                              if(temp==keyboard_codes[i])
                              {
                              key_code=i;
                              if(i==11)select++;
                              break;}
                              else key_code=nokey_code;
                              }
                              [/pre]

                              دیدگاه

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