Thông báo

Collapse
No announcement yet.

Thắc mắc chương trình quét bàn phím.

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

  • Thắc mắc chương trình quét bàn phím.

    Các bác cho em hỏi chương trình này sai ở chỗ nào mà em test nó chạy sai. Đại loại là nhấn một phím nào đó thì đầu ra có nhận được một dữ liệu tương ứng đặt trước, em mới học nên chương trình còn dài mong các bác thông cảm.
    Thank!

    Chương trình:

    main:
    MOV p1,#0ffh
    MOV A,p1

    cot1:
    CLR p1.4 ;Xoa cot 1 roi kiem tra cac hang
    CJNE A,#11100111b,ct2
    JMP data1
    ct2: CJNE A,#11101011b,ct3
    JMP data2
    ct3: CJNE A,#11101101b,ct4
    JMP data3
    ct4: CJNE A,#11101110b,cot2
    JMP data4

    cot2:
    CLR p1.5 ;Xoa cot 2 roi kiem tra cac hang
    CJNE A,#11000111b,ct6
    JMP data5
    ct6: CJNE A,#11001011b,ct7
    JMP data6
    ct7: CJNE A,#11001101b,ct8
    JMP data7
    ct8: CJNE A,#11001110b,cot3
    JMP data8

    cot3:
    CLR p1.6 ;Xoa cot 3 roi kiem tra cac hang
    CJNE A,#10000111b,ct10
    JMP data9
    ct10: CJNE A,#10001011b,ct11
    JMP data10
    ct11: CJNE A,#10001101b,ct12
    JMP data11
    ct12: CJNE A,#10001110b,cot4
    JMP data12

    cot4:
    CLR p1.7 ;Xoa cot 1 roi kiem tra cac hang
    CJNE A,#00000111b,ct14
    JMP data13
    ct14: CJNE A,#00001011b,ct15
    JMP data14
    ct15: CJNE A,#00001101b,ct16
    JMP data15
    ct16: CJNE A,#00001110b,main
    JMP data16

    data1: MOV p3,#1
    JMP ketthuc
    data2: MOV p3,#2
    JMP ketthuc
    data3: MOV p3,#3
    JMP ketthuc
    data4: MOV p3,#4
    JMP ketthuc
    data5: MOV p3,#5
    JMP ketthuc
    data6: MOV p3,#6
    JMP ketthuc
    data7: MOV p3,#7
    JMP ketthuc
    data8: MOV p3,#8
    JMP ketthuc
    data9: MOV p3,#9
    JMP ketthuc
    data10: MOV p3,#10
    JMP ketthuc
    data11: MOV p3,#11
    JMP ketthuc
    data12: MOV p3,#12
    JMP ketthuc
    data13: MOV p3,#13
    JMP ketthuc
    data14: MOV p3,#14
    JMP ketthuc
    data15: MOV p3,#15
    JMP ketthuc
    data16: MOV p3,#16

    ketthuc: END
    Nhớ quá khứ buồn rơi nước mắt.
    Nhìn tương lai lạnh buốt sống lưng.
    Y!M: nhamdtk4.

  • #2
    Không hiểu sao nhưng em ko upload mạch lên được. Nhưng nó cũng đơn giản thôi nó là keyboard 4x4: 4 hàng nối vào các chân từ p1.0 - p1.3, 4 cột nối vào các chân từ p3.5 - p3.7 còn port3 làm cổng đầu ra.
    Thôi rồi vô duyên quá. Hôm nay là 8/3. Nhân ngày 8/3 mình xin chúc chị em mãi tươi trẻ, hạnh phúc, sống lâu trăm tuổi riêng phái nữ của 4rum dientuvietnam.net mình xin chúc các bạn sống lâu trăm linh một tuổi. Thân!
    Nhớ quá khứ buồn rơi nước mắt.
    Nhìn tương lai lạnh buốt sống lưng.
    Y!M: nhamdtk4.

    Comment


    • #3
      quet phim

      mình nói sơ như thế này. bạn cho quét 4 hàng mỗi lần quét tới hàng kế bạn cộng lên 4 cho tới hàng thứ 4 nếu như không có phím nào được nhấn khi có phím nhấn tức là ở bên cột xuống mức thấp, khi đó bạn bỏ đi 4 hàng rồi đọc 4 cột vào. Sau đó bạn xác định xem cột nào được nhấn bằng cách xoay cột rồi kiểm tra mỗi lần xoay như thế ta cộng 1 tiếp vào cho tới khi xác định cột nào xuống mức thấp. Cuối cùng ta có số đếm của hàng cộng với số đếm của cột mà ta xác định đem so với bảng dữ liệu để hiển thị số ra ngoài.

      Comment


      • #4
        Thuật toán thì em cũng biết có nghĩa là em cũng hiểu cách hoạt động của nó nhưng khi viết chương trình cụ thể là bài trên ý, nó sai nhưng em không hiểu là tại sao và sai ở chỗ nào.
        Nhớ quá khứ buồn rơi nước mắt.
        Nhìn tương lai lạnh buốt sống lưng.
        Y!M: nhamdtk4.

        Comment


        • #5
          bạn thử code này coi,viết lâu roài h mới lục lại...
          ;************************************************* ****
          ;* CHUONG TRINH HIEN THI BAN PHIM TREN LED 7 DOAN *
          ;* MA ASCII DUOC GUI DEN P0 *
          ;* P1.0-P1.3 DUOC NOI TOI CAC HANG *
          ;* P2.0-P2.3 DUOC NOI TOI CAC COT *
          ;************************************************* ****

          ORG 00H
          LJMP MAIN
          ORG 30H
          MAIN:
          MOV P2,#11111111B ;DAT P2 LAM CONG VAO
          LOOP1:
          MOV P1,#00000000B ;TIEP DAT TAT CA CAC HANG
          MOV A,P2 ;DOC CAC COT
          ANL A,#00001111B
          CJNE A,#00001111B,LOOP1
          LOOP2:
          ACALL DELAY
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,HIT1
          SJMP LOOP2
          HIT1:
          ACALL DELAY
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,HIT2
          SJMP LOOP2
          HIT2:
          MOV P1,#11111110B ;KIEM TRA HANG 0
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,ROW_0

          MOV P1,#11111101B ;KIEM TRA HANG 1
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,ROW_1

          MOV P1,#11111011B ;KIEM TRA HANG 2
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,ROW_2

          MOV P1,#11110111B ;KIEM TRA HANG 3
          MOV A,P2
          ANL A,#00001111B
          CJNE A,#00001111B,ROW_3
          LJMP LOOP2

          ROW_0:
          MOV DPTR,#KEY_0
          SJMP TIM
          ROW_1:
          MOV DPTR,#KEY_1
          SJMP TIM
          ROW_2:
          MOV DPTR,#KEY_2
          SJMP TIM
          ROW_3:
          MOV DPTR,#KEY_3
          SJMP TIM

          TIM: RRC A
          JNC XUAT
          INC DPTR
          SJMP TIM
          XUAT:
          CLR A
          MOVC A,@A+DPTR
          MOV P0,A
          LJMP LOOP1


          DELAY:
          MOV R7,#250
          DJNZ R7,$
          RET

          ORG 300H

          KEY_0: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
          KEY_1: DB 99H,92H,82H,0F8H ;4,5,6,7
          KEY_2: DB 80H,98H,88H,80H ;8,9,a,b
          KEY_3: DB 0C6H,0C0H,86H,8EH ;c,d,e,f

          END

          Comment


          • #6
            Chương trình của bác haku chạy rất tốt, tuy nhiên chúng ta có thể tận dụng 4 bit cao của p2 để thiết đặt cho các hàng được ko (nếu dùng thêm một cổng # để quét cột thì hơi tốn phần cứng). Và em muốn hỏi nếu ta dùng lệnh MOV p1,#00001111b thì liệu 4 bit thấp của cổng p1 có thể làm cổng đầu vào được ko.
            Nhớ quá khứ buồn rơi nước mắt.
            Nhìn tương lai lạnh buốt sống lưng.
            Y!M: nhamdtk4.

            Comment


            • #7
              tùy cách dùng của bạn thôi
              bạn vẫn có thể dùng p1.0,p1.1,p1.2 vao việc khác mà
              vi khi ban ANL nó với #00001111b thì nó o ảnh hưởng tới bài toán
              bạn tự viết vd nhé

              Comment


              • #8
                Rất cảm ơn mọi người, nhưng em lại gặp rắc rối với chủ đề "quét dọn" này rồi. Em viết bài quét một matrix 8x8 bằng prog-studio khi tra trạng thái các cổng đầu ra lúc mô phỏng thì thấy các mã đều đúng nhưng lúc chuyển thành file.hex để mô phỏng bằng proteus thì nó lại chạy sai, bác nào rỗi rãi thì test thử và cho em ý kiến với. Thank!

                ;Chuong trinh quet matrix 8x8
                ;Du lieu duoc gui ra cong p2 de quet hang
                ;Cong p3 dung de quet cac cot


                INCLUDE 89c51.mc

                org 00h

                JMP loop

                org 100h

                DB ffh,ffh,99h,99h,66h,0h,0h,0h,0h

                org 30h
                loop: MOV R3,#1 ;gui 1 vao de dem so phong
                MOV DPTR,#100h
                MOV R5,#1 ;1d=00000001b tao ra ma de quay dung de quet cac cot
                main:
                CLR A
                MOVC A,@a+dptr
                MOV p2,A ;du lieu duoc gui ra p2

                MOV A,R5 ;bat dau gui du lieu quet cot
                RL a
                MOV p3,A
                MOV R5,A

                INC DPTR
                call delay
                INC R3
                CJNE R3,#8,main
                JMP loop
                quetcot:

                delay:
                MOV R1,#1
                loop1:
                MOV R2,#2
                loop2:
                DJNZ R2,loop2
                DJNZ R1,loop1

                RET

                END
                Nhớ quá khứ buồn rơi nước mắt.
                Nhìn tương lai lạnh buốt sống lưng.
                Y!M: nhamdtk4.

                Comment


                • #9
                  2!

                  Nguyên văn bởi nhamdtk4 Xem bài viết
                  Rất cảm ơn mọi người, nhưng em lại gặp rắc rối với chủ đề "quét dọn" này rồi. Em viết bài quét một matrix 8x8 bằng prog-studio khi tra trạng thái các cổng đầu ra lúc mô phỏng thì thấy các mã đều đúng nhưng lúc chuyển thành file.hex để mô phỏng bằng proteus thì nó lại chạy sai, bác nào rỗi rãi thì test thử và cho em ý kiến với. Thank!

                  ;Chuong trinh quet matrix 8x8
                  ;Du lieu duoc gui ra cong p2 de quet hang
                  ;Cong p3 dung de quet cac cot


                  INCLUDE 89c51.mc

                  org 00h

                  JMP loop

                  org 100h

                  DB ffh,ffh,99h,99h,66h,0h,0h,0h,0h

                  org 30h
                  loop: MOV R3,#1 ;gui 1 vao de dem so phong
                  MOV DPTR,#100h
                  MOV R5,#1 ;1d=00000001b tao ra ma de quay dung de quet cac cot
                  main:
                  CLR A
                  MOVC A,@a+dptr
                  MOV p2,A ;du lieu duoc gui ra p2

                  MOV A,R5 ;bat dau gui du lieu quet cot
                  RL a
                  MOV p3,A
                  MOV R5,A

                  INC DPTR
                  call delay
                  INC R3
                  CJNE R3,#8,main
                  JMP loop
                  quetcot:

                  delay:
                  MOV R1,#1
                  loop1:
                  MOV R2,#2
                  loop2:
                  DJNZ R2,loop2
                  DJNZ R1,loop1

                  RET

                  END
                  Nham cute, đỉnh cao vậy!
                  Hôm nào anh ra học chú vài chiêu mới được !1

                  Comment


                  • #10
                    Nguyên văn bởi leduchoan Xem bài viết
                    Nham cute, đỉnh cao vậy!
                    Hôm nào anh ra học chú vài chiêu mới được !1
                    cho mình hỏi là đoạn mã:
                    LOOP1:
                    MOV P1,#00000000B ;TIEP DAT TAT CA CAC HANG
                    MOV A,P2 ;DOC CAC COT
                    ANL A,#00001111B
                    CJNE A,#00001111B,LOOP1
                    LOOP2:
                    ACALL DELAY
                    MOV A,P2
                    ANL A,#00001111B
                    CJNE A,#00001111B,HIT1
                    nhìn giống nhau như vậy dùng để làm gì vậy?thank các bạn nhiều

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X