Thông báo

Collapse
No announcement yet.

keyboard ps2 -lcd

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

  • keyboard ps2 -lcd

    Các anh ơi cho em hỏi , làm sao đề tếp ban phím PS2 với LCD 16*2 .

  • #2
    chao bac.
    giao tiep voi keyboard voi lcd rat de,nhung ban phai nam duoc cach giao tiep no nhu the nao?
    keyboard thi co 4 day ra:2 day nguon va dat
    1:xung clock
    1:data
    ban se noi voi 2 chan bat ky voi 8951(tot nhat dung noi den cac chan dac biet):1 xung clock va 1 cua data.
    va ban se xem tai lieu cua lcd khi nao no doc data(timer diagram)
    dong thoi ban nam duoc ma code cua keyboard
    ban viet chuong trinh doc va so sanh tu ky tu
    -----------
    chu ban thanh cong

    Comment


    • #3
      Cái này hay đó,nếu bọn mình tận dụng được bàn phím máy tính để thay thế các loại bàn phím tự chế thì sẽ tiết kiệm được rất nhiều công sức và tiền bạc.Hồi trước mình có làm đèn Matrận Led chạy chữ,làm cái bàn phím để nhập khí tự vào rất là cực và tốn tiến.Bạn nào có kinh nghiệm xin hảy Post lên thuật toán giải mã Keyboard để mọi người cùng học hỏi.Thank


      email:
      Giá mà mạch điện tử không có nhiễu (noise) thì mình bây giờ đã là ... đại gia

      Comment


      • #4
        CÁc bạn kiếm bảng mã scan ban phím của máy tính trong một số sách dạy lập trình căn bản c hay pascal nằm chung với bảng mả ascii

        Comment


        • #5
          Nếu bác chơi được AVR thì vào Atmel.com load cái ApNote về KeyBoard về mà đọc. Hướng dẫn chi tiết luôn. Nếu không tải được thì liên hệ với em: Thangktvta@Gmail.com
          Nỏ biết chữ mần răng ký được??!! Thôi nhé.

          Comment


          • #6
            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.

            Comment


            • #7
              Minh thay cái này bên diendandientu co noi qua roi: ban qua day coi thu nhe:
              http://www.diendandientu.com/diendan...ad?thread=8116

              :-B

              Comment


              • #8
                quên nữa: Trang nay có sơ đồ chân của cổng PS/2 ne:
                http://www.fiacopetti.it/mcu-rs232-ps2_en.htm
                :-B

                Comment


                • #9
                  thientran ơi mình chưa hiểu lắm, bạn có thể giải thích lại không, chính xác là nó cần bao nhiêu chân giao tiếp. Nếu được bạn gửi cho mình code VHDL nha, mình cũng đang học cái này. milano1660@yahoo.com. Thx nhìu

                  Comment


                  • #10
                    cái này tôi đã làm rồi đây là đề tài môn vi điều khiển của tôi
                    "giao tiếp bàn phím qua cổng PS/2 hiển thị ra LCD 2x16"
                    có thể nhận được phím shift-? nói chung là tất cả những gì có trên bàn phím tôi đều có thể nhận được.
                    nhưng hiện tại tôi ở quê ko có tài liệu nếu 10 ngày nữa mà bạn còn cần thì tôi sẽ gửi cho bạn

                    Comment


                    • #11
                      Nguyên văn bởi anh_tran Xem bài viết
                      cái này tôi đã làm rồi đây là đề tài môn vi điều khiển của tôi
                      "giao tiếp bàn phím qua cổng PS/2 hiển thị ra LCD 2x16"
                      có thể nhận được phím shift-? nói chung là tất cả những gì có trên bàn phím tôi đều có thể nhận được.
                      nhưng hiện tại tôi ở quê ko có tài liệu nếu 10 ngày nữa mà bạn còn cần thì tôi sẽ gửi cho bạn
                      Vậy 10 ngày nữa bác post lên cho anh em tham khảo nha, em cũng đang cần đó
                      Và con tim đã vui trở lại ....

                      Comment


                      • #12
                        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

                        Comment


                        • #13
                          Hoa mắt luôn. Nói chung là em không hình dung được giao tiếp là sao thôi (mới tiếp xúc lần đầu >_< ). Em có đọc phần lý thuyết về giao tiếp PS2, nhưng chủ yếu chỉ nói sơ về truyền 11 bits, scan code, break code thoy. Đọc cái lý thuyết thì chẳng có gì khó hiểu lắm, nhưng cái code VHDL mà em có trong tay thì khác 1 trời 1 vực . Có lẽ do lý thuyết chỉ nói sơ nên em không hiểu. Ai có thể giải thích chi tiết, hoặc có giải thuật thì send dùm em, cụ thể trong khối giao tiếp cần làm những gì nha. Thx pà kon

                          Comment


                          • #14


                            ;*******************************************
                            ;* Chương trình nhập dữ liệu bằng keyboard PS2 *
                            ;* và hiển thị bằng LED 7 đoạn (mã thập phân) ;*
                            ;*******************************************
                            ;_______________________________________
                            ; Khai báo biến
                            KB_CLK BIT P3.2
                            KB_DATA BIT P3.0
                            ;_______________________________________
                            ORG 0000H
                            SJMP MAIN
                            ORG 0003H
                            SJMP READ_KEY
                            ;_______________________________________
                            ; Chương trình con Xóa Ram nội
                            MAIN: MOV R0,#10H
                            CLEAR: MOV A,#0
                            MOV @R0,A
                            INC R0
                            CJNE R0,#80H,CLEAR ; Clear internal RAM
                            MOV IE,#81H
                            MOV SP,#4Fh
                            RE:
                            LCALL OUTLED
                            SJMP RE
                            ;_______________________________________
                            ;Chương trình con ngắt ngoài 0
                            READ_KEY:
                            PUSH ACC
                            CLR EA ; Cấm ngắt ngoài 0
                            ; CLR C ; Xóa cờ C
                            ;_______________________________________
                            ;Chương trình con nhận đủ 8 bit data
                            ;Và loại bỏ bit Parity, bit Stop
                            RECEIVER_8BIT:
                            MOV R3,#8 ; 8 Bits Data
                            RE_READ:
                            JNB KB_CLK,$ ; Chờ cạnh lên
                            JB KB_CLK,$ ; Chờ cạnh xuống --> Bỏ qua bit Start

                            MOV C,KB_DATA ; Nhận data
                            RRC A ; Xếp vào A
                            DJNZ R3,RE_READ ; Chờ lấy đủ 8 bit Data

                            CJNE A,#240,ACEPT_CODE

                            JNB KB_CLK,$ ; Chờ cạnh lên
                            JB KB_CLK,$ ; Chờ cạnh xuống --> Bỏ qua bit Parity

                            JNB KB_CLK,$ ; Chờ cạnh lên
                            JB KB_CLK,$ ; Chờ cạnh xuống --> Bỏ qua bit Stop

                            JNB KB_CLK,$ ; Chờ cạnh lên
                            JB KB_CLK,$ ; Chờ cạnh xuống --> Bỏ qua 1 xung

                            SJMP EXIT
                            ;_______________________________________
                            ; Chương trình con chuyển đổi mã nhị phân sang thập phân
                            ACEPT_CODE:
                            MOV B,#10
                            DIV AB
                            MOV 10H,B ; 10H chứa hàng đơn vị
                            MOV B,#10
                            DIV AB
                            MOV 11H,B ; 11H chứa hàng chục
                            MOV 12H,A ; 11H chứa hàng trăm
                            ACALL OUTLED
                            ;_______________________________________
                            EXIT:
                            POP ACC
                            SETB EA ; Cho phép ngắt trở lại
                            RETI
                            ;_______________________________________
                            ; Chương trình con xuất ra Led
                            OUTLED:
                            MOV DPTR,#MALED
                            MOV A,12H
                            CJNE A,#0,L2
                            MOV A,11H
                            CJNE A,#0,L1
                            MOV A,10H
                            CJNE A,#0,L0
                            L2: MOV A,12H
                            MOVC A,@A+DPTR
                            MOV P2,A
                            CLR P0.2
                            LCALL DELAY250uS
                            SETB P0.2
                            L1: MOV A,11H
                            MOVC A,@A+DPTR
                            MOV P2,A
                            CLR P0.1
                            LCALL DELAY250uS
                            SETB P0.1
                            L0: MOV A,10H
                            MOVC A,@A+DPTR
                            MOV P2,A
                            CLR P0.0
                            LCALL DELAY250uS
                            SETB P0.0
                            RET
                            ;_______________________________________
                            DELAY250uS:
                            MOV R7,#125
                            DJNZ R7,$
                            RET
                            ;_______________________________________
                            MALED: DB 03h
                            DB 9Fh
                            DB 25h
                            DB 0Dh
                            DB 99h
                            DB 49h
                            DB 41h
                            DB 1Bh
                            DB 01h
                            DB 09h
                            END



                            VẠN SỰ KHỞI ĐẦU NAN
                            GIAN NAN BẮT ĐẦU NÃN


                            CÒN YOU NGHĨ SAO ???
                            Last edited by ngoctri73; 04-07-2008, 00:41.

                            Comment


                            • #15
                              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
                              Attached Files

                              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