Thông báo

Collapse
No announcement yet.

keyboard ps2 -lcd

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    to otacon:
    Bác làm được với ps2 để chạy chữ rồi ah?Có thể post lên cho mọi người tham khảo được không?Em có nhiều thắc mắc về phần này,bác có thể cho em nick name hoặc hòm thư liên lạc ko?hòm thư của em là [email]sutumo128@yahoo.com .Mong gặp bác sớm!
    Last edited by digital; 09-11-2008, 11:59.

    mobile:01692500603

    Comment


    • #17
      Nguyên văn bởi anh_tran Xem bài viết
      như đã hứa
      đề tài mình chưa hoàn chỉnh lắm do thời gian làm đề tài quá gấp bạn hoàn chỉnh lại rồi có gì share lại cho mình nha.
      có gì thắc mắc thì cứ hỏi
      cha cha , làm cái này , ngầm gắn vô PC thì tha hồ lấy pass chơi game nhá

      Comment


      • #18
        Nguyên văn bởi ngoctri73 Xem bài viết
        Bạn nào cần có thể vào đây để tham khảo :
        http://www.8051projects.net/forum-t6557.html
        Hoặc vào đây để kiểm chứng
        http://www.keelog.com/diy.html

        ;---------------------------
        ; AT Keyboard Routines
        ;***************************

        ;----------------
        ; RAM Usage:
        ;----------------
        ; Keyboard vars
        .equ KB_OK, 0x45
        .equ KB_DATA, 0x46
        .equ KB_STATS, 0x47
        .equ KB_SCAN, 0x48
        .equ KB_TEMP, 0x49 ; For the da*n pause key

        ;------------------
        ; Defines
        ;------------------
        ;XXXXXX KeyBoard XXXXXXXXXX
        .flag KEYB_DATA, P1.5 ; AT Keyboard data (change this for your hardware)
        .flag KEYB_CLOCK, P3.2 ; AT Keyboard Clock (change this for your hardware)
        ; This 2 pins should be connected to the keyboard crresponded pins with an 4K7 Pullup.
        ; The keyboard also needs GND and +5V.

        .equ KB_LSHIFT, 0x12
        .equ KB_RSHIFT, 0x59
        .equ KB_CTRL, 0x14
        .equ KB_ALT, 0x11
        .equ KB_CAPS, 0x58
        .equ KB_SCROLL, 0x7E
        .equ KB_NUML, 0x77
        .equ KB_TAB, 0x0D
        .equ KB_REL, 0xF0
        .equ KB_EXT, 0xE0
        .equ KB_PAUSE, 0xE1

        ; For the stauts flags (KB_STATS)
        .equ CAPS, 0x01
        .equ NUML, 0x02
        .equ SCROLL, 0x04
        .equ SHIFT, 0x08
        .equ ACK, 0x10
        .equ CTRL, 0x20
        .equ ALT, 0x40
        .equ RELEASE, 0x80
        ; For the stauts flags 2 (KB_OK)
        .equ PAUSED, 0x40
        .equ EXTENDED, 0x80
        ;XXXXXXXXXXXXXXXXXXXXXXXXXXXX

        ;---------------------
        ; Keyboard Routines:
        ;---------------------
        ;*************************************
        ; WaitKB: Wait for keypress
        ;*************************************
        WaitKB:
        acall Check_Keyb
        jnc WaitKB
        ret
        ;*************************************
        ; InitKeyb: c=1 if ACK OK
        ;*************************************
        CheckACK:
        mov a, KB_STATS
        mov c, acc.4
        clr acc.4
        mov KB_STATS, a
        ret
        ;*************************************
        ; InitKeyb:
        ;*************************************
        InitKeyb:
        mov KB_TEMP, #0
        mov KB_OK, #0
        mov r1, #0xFF
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        jnc InitKeyb

        mov r1, #0xF4 ; Enable
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        jnc KeybErr

        mov r1, #0xF3 ; Set Typematic
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        jnc KeybErr
        mov r1, #0x00 ; Typematic = 250 ms / 30 cps
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        jnc KeybErr

        mov KB_OK, #1
        mov KB_STATS, #2 ; Num Lock ON

        ;*************************************
        ; Keyb_Leds: Set KB_STATS as leds
        ;*************************************
        Keyb_Leds:
        mov r1, #0xED ; Set Leds
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        jnc KeybErr
        mov r1, KB_STATS
        acall Write_Keyb
        acall Check_Keyb
        acall CheckACK
        KeybErr:
        ret

        ;*************************************
        ; Zero2One: Wait for 0 to 1 on kb
        ; clock line, read the kb data line
        ; and shift right the bit to acc.7
        ;*************************************
        Zero2One:
        jnb KEYB_CLOCK, *
        jb KEYB_CLOCK, *
        mov c, KEYB_DATA
        rrc a
        ret

        ;*************************************
        ; Check_Keyb: Check to see if any key
        ; are pressed or release, returns
        ; ASCII codes on KB_DATA, or 1 for
        ; special keys, 2 for same special
        ; with shift. Return also the scan
        ; code on KB_SCAN.
        ; Special Keys are basicaly all non
        ; printable keys. See the table below
        ; all 1 and 2 returned are special keys
        ;*************************************
        Check_Keyb:
        setb KEYB_DATA
        setb KEYB_CLOCK ; CLOCK & DATA high = Idle Pos
        mov r0, #50
        CheckAgain:
        jnb KEYB_CLOCK, KeyHit
        djnz r0, CheckAgain ; check r0 times
        sjmp KeyEnd
        KeyHit:
        jnb KEYB_DATA, KeyHit2 ; Start bit must be 0
        KeyEnd:
        clr KEYB_CLOCK ; disable keyb
        clr c ; c=0 = no keypress
        ret
        KeyHit2:
        mov r0, #8 ; 8 bits
        clr a
        KeyHit3:
        acall Zero2One
        djnz r0, KeyHit3
        mov r1, a

        clr a
        acall Zero2One ; Parity bit
        acall Zero2One ; Stop bit
        ; acc.7 = stop, acc.6 = parity
        clr KEYB_CLOCK

        mov a, KB_TEMP
        jz NoIgnore
        dec KB_TEMP ; Igonre pause scans
        sjmp ChkKbEndNC

        NoIgnore:
        mov KB_SCAN, r1

        cjne r1, #0xFA, NoKbACK
        orl KB_STATS, #ACK
        sjmp ChkKbEndNC

        NoKbACK:
        cjne r1, #KB_PAUSE, NoKbPause
        mov KB_TEMP, #7 ; Ignore next 7 scans
        mov a, KB_OK
        cpl acc.6
        mov KB_OK, a
        sjmp ChkKbEndNC

        NoKbPause:
        cjne r1, #KB_EXT, NoKbExt
        orl KB_OK, #EXTENDED
        sjmp ChkKbEndNC

        NoKbExt:
        cjne r1, #KB_REL, NoRelease
        orl KB_STATS, #RELEASE
        sjmp ChkKbEndNC

        NoRelease:
        ; Test Num lock, if pressed toggle led
        cjne r1, #KB_NUML, NoNumLock
        mov a, KB_STATS
        jnb acc.7, ChkKbEndNC
        cpl acc.1
        clr acc.7
        mov KB_STATS, a
        acall Keyb_Leds
        sjmp ChkKbEndNC

        NoNumLock:
        ; Test Caps lock, if pressed toggle led
        cjne r1, #KB_CAPS, NoCapsLock
        mov a, KB_STATS
        jnb acc.7, ChkKbEndNC
        cpl acc.2
        clr acc.7
        mov KB_STATS, a
        acall Keyb_Leds
        sjmp ChkKbEndNC

        NoCapsLock:
        ; Test Scroll lock, if pressed toggle led
        cjne r1, #KB_SCROLL, NoScrollLock
        mov a, KB_STATS
        jnb acc.7, ChkKbEndNC
        cpl acc.0
        clr acc.7
        mov KB_STATS, a
        acall Keyb_Leds
        ChkKbEndNC:
        clr c
        ret

        NoScrollLock:
        ; Test L & R shifts, set bit if pressed, clear on release
        cjne r1, #KB_LSHIFT, NoShift1
        ShiftOK:
        mov a, KB_STATS
        jbc acc.7, ShiftRel
        setb acc.3 ; not releasing, so Set SHIFT bit
        sjmp ShiftEnd
        ShiftRel:
        clr acc.3 ; releasing, so Clear SHIFT bit
        ShiftEnd:
        mov KB_STATS, a
        sjmp ChkKbEndNC
        NoShift1:
        cjne r1, #KB_RSHIFT, NoShift
        sjmp ShiftOK

        NoShift:
        cjne r1, #KB_CTRL, NoCtrl
        mov a, KB_STATS
        jbc acc.7, CtrlRel
        setb acc.5 ; not releasing, so Set CTRL bit
        sjmp CtrlEnd
        CtrlRel:
        clr acc.5 ; releasing, so Clear SHIFT bit
        CtrlEnd:
        mov KB_STATS, a
        sjmp ChkKbEndNC

        NoCtrl:
        cjne r1, #KB_ALT, NoAlt
        mov a, KB_STATS
        jbc acc.7, AltRel
        setb acc.6 ; not releasing, so Set ALT bit
        sjmp AltEnd
        AltRel:
        clr acc.6 ; releasing, so Clear ALT bit
        AltEnd:
        mov KB_STATS, a
        sjmp ChkKbEndNC

        NoAlt:
        mov a, KB_STATS ; Releasing key test
        jnb acc.7, NoRel2
        clr acc.7 ; if releasing > clear
        mov KB_STATS, a ; rel bit on KB_STATS
        clr c ; and do nothing
        ret
        NoRel2:
        mov a, KB_OK ; Extended key test
        jnb acc.7, KbChars
        clr acc.7 ; if Extended > clear
        mov KB_OK, a ; EXT bit on KB_OK
        clr c ; and do nothing
        ret
        KbChars:
        mov dptr, #KbScanCodes
        mov a, KB_STATS
        jnb acc.2, TestShift
        jb acc.3, KbChkOK
        mov a, r1
        movc a, @a+dptr
        mov r0, a
        subb a, #97
        jc KbChkOK
        mov a, r0
        subb a, #123
        jnc KbChkOK
        mov dptr, #KbScanCodes2 ; if (a to z) & Caps > table 2
        sjmp KbChkOK
        TestShift:
        jnb acc.3, KbChkOK
        mov dptr, #KbScanCodes2 ; with shift table 2
        KbChkOK:
        mov a, r1
        movc a, @a+dptr
        mov KB_DATA, a
        setb c
        ret

        ;*************************************
        ; Zero2One2: Wait for high to low in
        ; kb clock line
        ;*************************************
        Zero2One2:
        jnb KEYB_CLOCK, *
        jb KEYB_CLOCK, *
        ret
        ;*************************************
        ; Write_Keyb: Send r1 to the kb
        ;*************************************
        Write_Keyb:
        mov r0, #8 ; 8 bits to receive
        clr KEYB_CLOCK ; break the Keyboard
        mov r7, #0x00 ; some delay (safety reasons)
        _WKwait:djnz r7, _WKwait
        clr KEYB_DATA ; request to send
        setb KEYB_CLOCK ; enable the Keyboard
        acall Zero2One2 ; Start Bit
        mov a, r1 ; Data Bits
        TxData:
        rrc a
        mov KEYB_DATA, c
        acall Zero2One2
        djnz r0, TxData

        mov a, r1 ; calculate parity bit
        mov c, psw.0 ; this is Even parity
        cpl c ; and Keyboard needs Odd parity
        mov KEYB_DATA, c ; send parity bit
        acall Zero2One2

        setb KEYB_DATA ; send stop bit
        acall Zero2One2

        acall Zero2One2
        mov c, KEYB_DATA ; get ACK bit
        clr KEYB_CLOCK ; stop the keyboard
        ret


        ;*****************************
        ; Main Routine: Example of kb usage
        ;*****************************
        Start:
        acall InitKeyb

        mov a, KB_OK
        jz KBNotOK

        Loop:
        acall Check_Keyb
        jnc Loop

        mov a, KB_SCAN
        cjne a, #0x71, NoCtrlAltDel ; Check for extended Del
        mov a, KB_STATS
        jnb acc.5, NoCtrlAltDel ; Check for Ctrl
        jnb acc.6, NoCtrlAltDel ; Check for Alt
        ljmp Start ; If Ctrl+Alt+Del Reset

        NoCtrlAltDel:
        mov a, KB_DATA
        cjne a, #1, ChkEsp2
        ; Here handle Especial Keys
        mov a, KB_SCAN
        cjne a, #5, NoF1Key

        ; Do something here for F1

        NoF1Key:
        cjne a, #6, NoF2Key

        ; Do something here for F2

        NoF2Key:
        cjne a, #4, NoF3Key

        ; Do something here for F1

        NoF3Key:
        sjmp Loop
        ChkEsp2:
        cjne a, #2, NoEsp
        ; Here handle Shift + Especial Keys
        mov a, KB_SCAN
        cjne a, #5, NoShfF1Key

        ; Do something here for Shift + F1

        NoShfF1Key:
        sjmp Loop
        NoEsp:

        ; Rest of prgram

        sjmp Loop




        ; last 262 addr of code mem with scan codes tables
        .org 0x1EF8
        KbScanCodes:
        ; Keyboard Scancodes
        ; ?, F9, ?, F5, F4, F1, F2, F12, ?, F10, F8, F6, F4, TAB, ~
        .db 0, 1 , 0, 1 , 1 , 1 , 1 , 1 , 0, 1 , 1 , 1 , 1 , 1 , '~'
        ; ?, ?,Lalt,Lshf, ?,Lctr, Q , ! , ?, ?, ?, Z , S , A , W , @
        .db 0, 0, 0 , 0 , 0, 0 , 'q', '1', 0, 0, 0, 'z', 's', 'a', 'w', '2'
        ; ?, ?, C , X , D , E , $ , # , ?, ?, " ", V , F , T , R
        .db 0, 0, 'c', 'x', 'd', 'e', '4', '3', 0, 0, ' ', 'v', 'f', 't', 'r'
        ; % , ?, ?, N , B , H , G , Y , ^ , ?, ?, ?, M , J , U , &
        .db '5', 0, 0, 'n', 'b', 'h', 'g', 'y', '6', 0, 0, 0, 'm', 'j', 'u', '7'
        ; * , ?, ?, < , K , I , O , ) , ( , ?, ?, > , ? , L , : , P
        .db '8', 0, 0, ',', 'k', 'i', 'o', '0', '9', 0, 0, '.', '/', 'l', ';', 'p'
        ; _ , ?, ?, ?, " , ?, { , + , ?, ?,Caps,Rshf,Entr, } , ?, |
        .db '-', 0, 0, 0, ''', 0, '[', '=', 0, 0, 0 , 0 , 1 , ']', 0, 92
        ; ?, ?, ?, ?, ?, ?, ?, ?,BkSp, ?, ?, 1 , ?, 4 , 7 , ?, ?, ?, 0
        .db 0, 0, 0, 0, 0, 0, 0, 0, 1 , 0, 0, '1', 0, '4', '7', 0, 0, 0, '0'
        ; . , 2 , 5 , 6 , 8 , ESC,Numl, F11, + , 3 , - , * , 9 ,Scrl
        .db '.', '2', '5', '6', '8', 1 , 0 , 1 , '+', '3', '-', '*', '9', 0
        ; ?, ?, ?, ?, F7
        .db 0, 0, 0, 0, 1

        KbScanCodes2:
        ; Keyboard Scancodes with shift
        ; ?, F9, ?, F5, F4, F1, F2, F12, ?, F10, F8, F6, F4, TAB, ~
        .db 0, 2 , 0, 2 , 2 , 2 , 2 , 2 , 0, 2 , 2 , 2 , 2 , 2 , '`'
        ; ?, ?,Lalt,Lshf, ?,Lctr, Q , ! , ?, ?, ?, Z , S , A , W , @
        .db 0, 0, 0 , 0 , 0, 0 , 'Q', '!', 0, 0, 0, 'Z', 'S', 'A', 'W', '@'
        ; ?, ?, C , X , D , E , $ , # , ?, ?, " ", V , F , T , R
        .db 0, 0, 'C', 'X', 'D', 'E', '$', '#', 0, 0, ' ', 'V', 'F', 'T', 'R'
        ; % , ?, ?, N , B , H , G , Y , ^ , ?, ?, ?, M , J , U , &
        .db '%', 0, 0, 'N', 'B', 'H', 'G', 'Y', '^', 0, 0, 0, 'M', 'J', 'U', '&'
        ; * , ?, ?, < , K , I , O , ) , ( , ?, ?, > , ? , L , : , P
        .db '*', 0, 0, '<', 'K', 'I', 'O', ')', '(', 0, 0, '>', '?', 'L', ':', 'P'
        ; _ , ?, ?, ?, " , ?, { , + , ?, ?,Caps,Rshf,Entr, } , ?, |
        .db '_', 0, 0, 0, '"', 0, '{', '+', 0, 0, 0 , 0 , 2 , '}', 0, '|'
        ; ?, ?, ?, ?, ?, ?, ?, ?,BkSp, ?, ?, 1 , ?, 4 , 7 , ?, ?, ?, 0
        .db 0, 0, 0, 0, 0, 0, 0, 0, 2 , 0, 0, '1', 0, '4', '7', 0, 0, 0, '0'
        ; . , 2 , 5 , 6 , 8 , ESC,Numl, F11, + , 3 , - , * , 9 ,Scrl
        .db '.', '2', '5', '6', '8', 2 , 0 , 2 , '+', '3', '-', '*', '9', 0
        ; ?, ?, ?, ?, F7
        .db 0, 0, 0, 0, 2

        u chỉ cần post sơ đồ thuật toán là đủ ae hỉu oy . Đọc ASM đau đầu lám

        Comment


        • #19
          Tiếp đi mấy bác????
          Quang Nhat
          ---------------------------------------
          Yahoo :quangnhat85ls
          Mail :
          Nhận thiết kế và ép nhựa cho đồ điện tử

          Comment


          • #20
            Cứ theo giản đồ xung mà làm thôi. Cứ chờ xung clock xuống rồi đọc data, sau đó chờ clock lên..... Tiếp tục như vậy. Có thể dùng cho hiển thị giá trị các bít để kiểm tra kết quả xem có chính xác không. Cái này mình củng đã thử cách đây 1 tháng trên KIT PICDEM2 PLUS. Mình dùng thạch anh 20M, thạch anh 4M không nhận đúng dữ liệu.
            Đăng ký Dropbox có ngay 2GB lưu trữ online miễn phí:

            Comment


            • #21
              có ai giao tiếp avr với bàn phím sp2 chưa giup cho với

              Comment


              • #22
                bạn "anh_tran" hay gửi cho mình theo địa chỉ cdt.072012@gmail.com nhé mình rất muốn tìm hiểu về đề tài này đấy, cảm ơn bạn trước

                Comment


                • #23
                  Bác thientran ơi, em cũng đang cần code PS2 dùng VHDL , pa'k gửi cho em với nha.mail của em nỳ: dinhdong_2009@yahoo.com : Tks pa'k trứoc.

                  Comment


                  • #24
                    Bạn Milano nữa, nếu có code VHDL thì gửi cho mình với nha': email:dinhdong_2009@yahoo.com. tks bạn

                    Comment


                    • #25
                      Em cũng vừa nhận đồ án môn học 1, giao tiếp PS/2 Keyboard với 8051 và hiển thị ở LCD 16x2 hoặc 16x4

                      Comment


                      • #26
                        bác còn cái sơ đồ mạch không? có thể gửi cho mình xin với được không?
                        Thanks !!!
                        mxhaidt@gmail.com

                        Comment


                        • #27
                          bạn đã có sơ đồ mạch chưa? có thể gửi cho mình được không! tìm hoài trên mạng mà ko có? hazz chán quá

                          Comment


                          • #28
                            các bác cho em hỏi giao tiếp này không dùng ngắt thì có giải quyết được không?
                            Đời không như mình nghĩ. phải tranh thủ thôi ***********

                            Comment


                            • #29
                              a

                              Nguyên văn bởi thientran Xem bài viết
                              Tôi là thành viên mới của diễn đàn. Mình đã thực hiện giao tiếp với bàn phím máy tính thực hiện việc đếm sản phẩm, hiện thị trên LCD, nhưng mình viết bằng ngôn ngữ VHDL vì vậy có lẽ không trùng với tìm kiếm của bạn. Tuy vậy mình vẫn Post lên đây phần thuật toán nói chung và bảng mã tuyến tính của bàn phím IBM để các bạn tham khảo.
                              · Phân tích và hướng thiết kế:- Đầu tiên là bảng mã hoá bàn phím PS2 do IBM cung cấp được đưa vào Rom nhằm mục đích giải mã 7 bít sang mã ASCII, bít địa chỉ thứ 7 dành cho phím Caplock, bits thứ 8 dành cho phím Shift. Dưới đây là bảng mã hoá bàn phím PS2 do IBM cung cấp.
                              x"00327761737a000000317100000000000060090000000000 0000000000000000", -- 1F - 00
                              x"003837756a6d00000036796768626e000035727466762000 0033346564786300", -- 3F - 20
                              x"00005c005d0d000000003d5b00270000002d703b6c2f2e00 0039306f696b2c00", -- 5F - 40
                              x"0000000000000000001b000000007f000000000000000000 0008000000000000", -- 7F - 60
                              x"00325741535a00000031510000000000007e090000000000 0000000000000000", -- 9F - 80
                              x"003837554a4d00000036594748424e000035525446562000 0033344544584300", -- BF - A0
                              x"00005c005d0d000000003d5b00270000002d503b4c2f2e00 0039304f494b2c00", -- DF - C0
                              x"0000000000000000001b000000007f000000000000000000 0008000000000000", -- FF - E0

                              x"00405741535a00000021510000000000007e090000000000 0000000000000000", -- 1F - 00
                              x"002a26554a4d0000005e594748424e000025525446562000 0023244544584300", -- 3F - 20
                              x"00007c007d0d000000002b7b00220000005f503a4c3f3e00 0028294f494b3c00", -- 5F - 40
                              x"0000000000000000001b000000007f000000000000000000 0008000000000000", -- 7F - 60
                              x"00407761737a000000217100000000000060090000000000 0000000000000000", -- 9F - 80
                              x"002a26756a6d0000005e796768626e000025727466762000 0023246564786300", -- BF - A0
                              x"00007c007d0d000000002b7b00220000005f703a6c3f3e00 0028296f696b3c00", -- DF - C0
                              x"0000000000000000001b000000007f000000000000000000 0008000000000000" -- FF - E0
                              Chúng ta không nhất thiết phải hiểu quá rõ vì sao họ lại mã hoá như vậy vì thực ra ta không có mục đích sẽ chế tạo ra bàn phím kiểu này. Ở đây nhiệm vụ chính của chúng ta là sử dụng nó để giải quyết bài toán mà chúng ta đặt ra. Các kí hiệu giải thích ở bên phải cùng là các mã hex tương ứng với các kí tự ASCII.
                              Các dữ liệu được truyền từ bàn phím theo phương pháp truyền nối tiếp vì vậy cũng giống như bất cứ cách thức thực hiện truyền tin nối tiếp nào, dữ liệu truyền đi đều phải đưa qua bộ đệm truyền, cũng tương tự như vậy, dữ liệu nhận từ bàn phím cũng phải thực hiện đọc lần lượt từ bộ đệm tương ứng.Chính vì vậy cần phải sử dụng một mô hình máy trạng thái để điều khiển thao tác chuyển đổi nối tiếp sang song song và từ song song sang nối tiếp. Quá trình chuyển đổi từ nối tiếp sang song song để đưa ra đệm truyền ở thao tác quét phím và quá trình ngược lại cho thao tác khôi phục mã ASCII.
                              Để tương xứng với bảng mã của IBM ở đây chúng ta có khai báo bít Parity để nhận dạng cạnh xung điều khiển và các lệnh khác nhau từ bàn phím, tuy nhiên do mục đích của chúng ta không cần quá chú trọng điều đó vì vậy ta đã không xử lý với bít này. Thay vào đó ta dùng hai bít "Extended" (0xE0) và "Released" (0xF0) để làm công việc đó.
                              Cũng giống như quá trình truyền thông tin nối tiếp khác, ở đây chúng ta cần phải xử dụng các cờ báo hiệu, loạt cờ chức năng bao gồm xác nhận phím ấn, cờ báo cho phép chuyển đổi song song, nối tiếp, cờ báo lỗi trạng thái bàn phím do có quá nhiều phím bị nhấn, cờ báo nhận….đều phải được khai báo để sử dụng.
                              Ở đây, cũng cần phải lưu ý rằng để tránh tình trạng các phím được ấn đồng loạt, ta xử lý đồng thời hai tín hiệu Ps2_clk và Ps2_data_line thỉnh thoảng được kéo xuống thấp và tương đương với các hàng điện trở đặt ở trạng thái trở kháng cao, đồng nghĩa với việc xác nhận không có dòng dữ liệu nào được phép truyền đi cả. Hơn nữa trong chương trình cũng đặt ra việc xử lý chống rung cho bàn phím bằng cách đưa ra khoảng thời gian hãm “debounce timer”.
                              Điều cần quan tấm cuối cùng là việc đồng bộ tốc độ quét là xung clock 60us được tạo ra bằng cách chia tần số. Cũng nhấn mạnh thêm rằng tần số chia ở đây sử dụng tần số 12.5Mhz. Chính vì vậy trong việc chia tần số tạo ra 60us chính là sử dụng tần số 12.5Mhz để chia chứ không phải dùng xung clock 50Mhz từ hệ thống( do vậy trong chương trình có hằng số 750, là hệ số tần số phải chia, vì 750/60us=12,5Mhz-đây là điều hết sức lưu ý khi các bạn đọc chương trình. Sở dĩ chúng ta làm công việc vòng vo này vì tần số chia 12.5 ở đây chúng ta sẽ phải sử dụng ở rất nhiều bài toán như bài toán truyền tin nối tiếp, bài toán giao tiếp với màn hình… Một tham số thứ hai nữa là xung clock 5us được sử dụng cho mục đích chống rung do hiện tượng nẩy phím.
                              bạn có thể chỉ cho mình cách vẽ mạch và mô phỏng ko , vì hình như trong Proteus mình dùng ko có cổng PS2 , thanks bạn

                              Comment


                              • #30
                                Mình đã làm đồ án về giao tiếp Keyboard PS2, LCD 16*2 dùng 89S52, bạn nào cần biết thêm chi tiết xin vui lòng liên hệ : kingtheworld99@yahoo.com

                                Comment

                                Về tác giả

                                Collapse

                                HPL Tìm hiểu thêm về HPL

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X