Thông báo

Collapse
No announcement yet.

help me!!!!

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

  • help me!!!!

    tui là người mới lập trình VDK, đang gặp phải bài viết chương trình quét bàn phím bằng 89c51, bạn nào co thể giúp được ko vậy.

  • #2
    Vấn đề này cũng đơn giản thôi.
    TRước hết bạn phải bố trí các phím thế nào sao cho tích kiệm chân vdk nhất. Người ta thường làm dạng vuông ví dụ 3*3 hoặc 4*4, bạn sẽ mất 6 hoặc 8 chân để làm việc này.
    Bạn nối chân của nút bấm thành hàng và cột.
    Ví dụ hàng nối với p1-->p3, cột nối với p4-->p6., nhớ cho thêm trở 220 trước khi cho chân vdk.
    Có một vấn đề nữa là hiện tượng rung, do thiết kế cơ khí nên khi bạn bấm nút sẽ ta ra rất nhiều xung kim nên bạn sẽ phải chống rung bằng phần mềm.
    Việc quét phím được thực hiện qua hai lần là quét hàng và quét cột hay ngược lại.
    Trước hết bạn cho hàng lên mức cao, các cột ở mức thấp, nếu một phím ở hàng được bấm thì cột tương ứng sẽ xuống mức thấp, bạn lại cho cột vừa ở mức thấp lên mức cao, tất cả các hàng mức thấp. Do thời gian bạn giữ phím cỡ vài trăm ms trong khi thời gian xử lý của vdk cỡ us, nên hàng có phím bấm (nối với cột có mức cao vừa được set lên) sẽ có mức cao. từ đó bạn xác định được phím nào được bấm.
    Khi phát hiện sự thay đổi mức khi có phím bấm bạn phải có vài lệnh nop để chống rung.

    Comment


    • #3
      Cho bác một chương trình mẫu này.Tôi thấy chương trình này dễ hiểu nhưng không ngắn gọn cho lắm. CỦa một bác nào trên diễn đàn mà tôi không nhớ tên. Xin lỗi vì chưa xin phép nhé.
      P0 nối với led 7 đoạn

      #include <sfr51.inc>
      org 00h
      ljmp main
      org 0bh
      ljmp ngattimer0
      org 40h
      ;************************************************* *********
      main:
      mov sp,#5fh
      lcall khoitao
      mainloop:

      lcall quetphim
      sjmp mainloop
      khoitao:
      mov dptr,#table
      mov r1,#0
      mov tmod,#01h
      setb et0
      setb ea
      mov th0,#high(-10000)
      mov tl0,#low(-10000)
      setb tr0
      ret
      ngattimer0:
      push psw
      push acc
      mov th0,#high(-10000)
      mov tl0,#low(-10000)
      lcall quetled
      pop acc
      pop psw
      reti
      quetled:
      mov a,r1
      movc a,@a+dptr
      mov p0,a
      nop
      clr p3.6
      ret
      delay1ms:
      mov r2,#100
      delay1msloop:
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      djnz r2,delay1msloop
      ret
      delay10ms:
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      lcall delay1ms
      ret
      quetphim:
      mov p2,#11110000b
      jnb p2.4,chongrung
      jnb p2.5,chongrung
      jnb p2.6,chongrung
      jnb p2.7,chongrung
      ret
      chongrung:
      lcall delay10ms
      jnb p2.4,hang1
      jnb p2.5,hang2
      jnb p2.6,hang3
      jnb p2.7,hang4
      ret
      hang1:
      setb p2.0
      setb p2.1
      setb p2.2
      setb p2.3
      clr p2.4
      nop
      jnb p2.0,phim1
      jnb p2.1,phim2
      jnb p2.2,phim3
      jnb p2.3,phim4
      ret
      hang2:
      setb p2.0
      setb p2.1
      setb p2.2
      setb p2.3
      clr p2.5
      nop
      jnb p2.0,phim5
      jnb p2.1,phim6
      jnb p2.2,phim7
      jnb p2.3,phim8
      ret
      hang3:
      setb p2.0
      setb p2.1
      setb p2.2
      setb p2.3
      clr p2.6
      nop
      jnb p2.0,phim9
      jnb p2.1,phim10
      jnb p2.2,phim11
      jnb p2.3,phim12
      ret
      hang4:
      setb p2.0
      setb p2.1
      setb p2.2
      setb p2.3
      clr p2.7
      nop
      jnb p2.0,phim13
      jnb p2.1,phim14
      jnb p2.2,phim15
      jnb p2.3,phim16
      ret
      phim1:
      jnb p2.0,$
      mov r1,#0
      ret
      phim2:
      jnb p2.1,$
      mov r1,#1
      ret
      phim3:
      jnb p2.2,$
      mov r1,#2
      ret
      phim4:
      jnb p2.3,$
      mov r1,#3
      ret
      phim5:
      jnb p2.0,$
      mov r1,#4
      ret
      phim6:
      jnb p2.1,$
      mov r1,#5
      ret
      phim7:
      jnb p2.2,$
      mov r1,#6
      ret
      phim8:
      jnb p2.3,$
      mov r1,#7
      ret
      phim9:
      jnb p2.0,$
      mov r1,#8
      ret
      phim10:
      jnb p2.1,$
      mov r1,#9
      ret
      phim11:
      jnb p2.2,$
      mov r1,#10
      ret
      phim12:
      jnb p2.3,$
      mov r1,#11
      ret
      phim13:
      jnb p2.0,$
      mov r1,#12
      ret
      phim14:
      jnb p2.1,$
      mov r1,#13
      ret
      phim15:
      jnb p2.2,$
      mov r1,#14
      ret
      phim16:
      jnb p2.3,$
      mov r1,#15
      ret


      table:
      db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0d8h,080h,090h, 88h,83h,0c6h,0a1h,86h,08eh
      end
      Ai nên khôn mà chẳng dại đôi lần.

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X