Thông báo

Collapse
No announcement yet.

quét phím hiển thị 2 led 7 doan

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

  • quét phím hiển thị 2 led 7 doan

    mình mới viết chương trình quét phím hiển thị 2 led 7 doan,nhung chương trình không chạy,mìnnh pot chương trình lên đây nhờ mọi người chỉ giáo dùm

    $mod51
    org 0h
    mov 30h,#00h
    mov r6,#00h
    mov r7,#00h
    Main:
    MOV P1,#0FEH ; Ch?n c?t ch?a các phím 7,8,9,÷

    JNB P1.4,Sw7
    JNB P1.5,Sw8
    JNB P1.6,Sw9
    JNB P1.7,Swchia
    MOV P1,#0FDH ; Ch?n c?t ch?a các phím 4,5,6,X
    JNB P1.4,Sw4
    JNB P1.5,Sw5
    JNB P1.6,Sw6
    JNB P1.7,Swnhan
    MOV P1,#0FBH ; Ch?n c?t ch?a các phím 1,2,3,-
    JNB P1.4,Sw1
    JNB P1.5,Sw2
    JNB P1.6,Sw3
    JNB P1.7,Swtru
    MOV P1,#0F7H ; Ch?n c?t ch?a các phím ON/C,0
    JNB P1.4,Swon
    JNB P1.5,Sw0
    JNB P1.6,Swbang
    JNB P1.7,Swcong
    SJMP Main
    ;-------------
    SW0:
    MOV 30H,#0
    SJMP Hienthi
    ;-------------
    SW1:
    MOV 30H,#1
    SJMP Hienthi
    ;-------------
    SW2:
    MOV 30H,#2
    SJMP Hienthi
    ;-------------
    SW3:
    MOV 30H,#3
    SJMP Hienthi
    ;-------------
    SW4:


    MOV 30H,#4
    SJMP Hienthi
    ;-------------
    SW5:
    MOV 30H,#5
    SJMP Hienthi
    ;-------------
    SW6:
    MOV 30H,#6
    SJMP Hienthi
    ;-------------
    SW7:
    MOV 30H,#7
    SJMP Hienthi
    ;-------------
    SW8:
    MOV 30H,#8
    SJMP Hienthi
    ;-------------
    SW9:
    MOV 30H,#9
    SJMP Hienthi
    ;-------------
    Swon:
    MOV 30H,#10
    SJMP Hienthi
    ;-------------
    Swbang:
    MOV 30H,#11
    SJMP Hienthi
    ;-------------
    Swcong:
    MOV 30H,#12
    SJMP Hienthi
    ;-------------
    Swtru:
    MOV 30H,#13

    SJMP Hienthi
    ;-------------
    Swnhan:
    MOV 30H,#14
    SJMP Hienthi
    ;-------------
    Swchia:
    MOV 30H,#15
    SJMP Hienthi
    ;-------------
    Hienthi:
    cjne a,#9,ht1
    ljmp ht
    ht1:
    cjne a,#8,ht2
    ljmp ht
    ht2:
    cjne a,#7,ht3
    ljmp ht
    ht3:
    cjne a,#6,ht4
    ljmp ht
    ht4:

    cjne a,#5,ht5
    ljmp ht
    ht5:
    cjne a,#4,ht6
    ljmp main
    ht6:
    cjne a,#3,ht7
    ljmp ht
    ht7:
    cjne a,#2,ht8
    ljmp ht
    ht8:
    cjne a,#1,nt

    ljmp ht

    nt:
    MOV A,30H
    MOV DPTR,#MALED7
    MOVC A,@A+DPTR
    mov r6,a
    ljmp lap1

    ht:
    MOV A,30H
    MOV DPTR,#MALED7
    MOVC A,@A+DPTR
    mov r7,a
    ljmp lap2

    lap1:
    mov p2,r6
    clr p3.1
    call delay
    setb p3.1

    cjne r7,#9,kt1
    ljmp lap2
    kt1:
    cjne r7,#8,kt2
    ljmp lap2
    kt2:
    cjne r7,#7,kt3
    ljmp lap2
    kt3:
    cjne r7,#6,kt4
    ljmp lap2
    kt4:
    cjne r7,#5,kt5
    ljmp lap2
    kt5:
    cjne r7,#4,kt6
    ljmp lap2
    kt6:
    cjne r7,#3,kt7
    ljmp lap2
    kt7:
    cjne r7,#2,kt8
    ljmp lap2
    kt8:
    cjne r7,#1,thoat

    sjmp lap2
    thoat:ljmp main

    lap2:
    mov p2,r7
    clr p3.0
    call delay
    setb p3.0
    ljmp lap1

    Maled7: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
    ;--------------
    Delay:
    PUSH 07
    PUSH 06
    MOV R6,#100
    Delay1:
    MOV R7,#255

    DJNZ R7,$
    DJNZ R6,Delay1
    POP 06
    POP 07
    RET
    END

    nhân tiện cho mình hỏi có bạn nào có chương trình wét phím hiển thị 4 led 7 đoạn không up lên cho mình tham khảo,xin cám ơn sụ hổ trợ của các bạn

  • #2
    Vào đây tha hồ mà nghiên cứu
    www.mytutorialcafe.com
    Last edited by haidien; 18-12-2007, 21:44.

    Comment


    • #3
      xin lỗi mình chỉ viết bằng C thôi bạn có thể coi cái này thử nha. bạn cần cài Keil 8.05, proteus.chúc bạn thành công.
      phương pháp thì cũng đơn giản thôi,
      quét phím sau đó đưa mã phím về để hiển thị.
      Về quét phím thì bạn cho 4 bit thấp(hoặc cao) tuần tự tích cực rồi trả về không tích cực, cứ mỗi lần như vậy thì kiểm tra 4 bít còn lại xem có bít nào tích cực không, nếu có thì tính ra mã của phím đó rồi lưu vào mảng để hiển thị, nếu không thì thôi.
      Nếu chỉ viết như vậy thì khi nạp cho chạy thì nó sẽ ra hiện tượng số nhấn sau lại ra trước nằm, nên bạn cần thêm 1 đoạn để chém số đã nhập trước lên rồi nhập số sau vào chỗ số có trong số thấp ấy.
      Attached Files

      Comment


      • #4
        Về việc quét phím, thuật toán đã rõ , không thể rõ hơn, bạn chịu khó viết rồi dùng Protues kiểm tra lại xem. Một khi đã có thuật toán rồi thì vẫn đề đơn giản đi nhiều rồi. Bạn tham khảo thuật toán cổ điển này:
        Attached Files

        Comment


        • #5
          Đây là Code mình viết và đã chạy tốt trên mạch mô phỏng,bấm phím 1 tương ứng tọa độ p1.0 và p3.0 phím 2 là p1.0 và p3.1. MẠch dùng 8255A


          ; P3.0 đến P3.3 của chip AT89C51 làm cổng vào để quét cột ;của phím. Các chân P1.0 đến P1.3 được cấu hình làm cổng ra để nối ;hàng ma trận phím.

          ;*****************************************
          ; CHỜ PHIM BAM.
          ; NEU BAM PHAM 1 -----> CHUYEN DEN CHUONG TRINH 1
          ; NEU BAM PHIM 2 -------> CHUYEN DEN CHUONG TRINH 2
          ; P3.0 DEN P3.3 : COT CUA MA TRAN PHIM
          ; P1.0 DEN P1.3: HANG CUA MA TRAN PHIM
          ;*****************************************
          ORG 0000H
          MOV P1, #00H
          MOV P3,#FFH ;CẤU HÌNH CỔNG P3 LÀM ĐẦU VÀO
          MOV A, #P3
          CJNE A,#00001111B, PHIMDINH ;KIỂM TRA PHÍM DÍNH
          SJMP K1; NẾU KHÔNG CÓ PHÍM DÍNH THÌ TIẾP TỤC NHẢY ĐẾN K1
          PHIMDINH:
          MOV A, #80H ; CHƯƠNG TRÌNH NẾU CÓ PHÍM DÍNH THÌ GHI RA LED SỐ “9”
          MOV DPTR,#4003H ; CẤU HÌNH PA, PB , PC CỔNG RA,
          MOVX @DPTR, A ;
          MOV DPTR,#4002H ; TRỎ ĐẾN PC
          MOV A,#10010000B; ;
          MOVX @DPTR, A
          HERE: SJMP HERE ;Ở LẠI VÒNG LẶP VÔ TẬN

          K1: MOV A,P3 ; ĐỌC CỔNG P3
          ANL A, #00001111B ;CHE CAC BIT CAO CUA P3
          CJNE A,#00001111B, K2 ;CO PHAM AN? NHAY TOI K2 DE CHONG RUNG
          SJMP K1
          K2: ACALL DELAY2OMS ; CHONG RUNG
          MOV A,P3
          ANL A, #00001111B
          CJNE A,#00001111B, K3 ;CO PHIM AN? NHAY TOI K3 DE KIEMTRA TUNG HANG
          SJMP K1
          K3: MOV A,#11111110B ;DUA 0 RA HANG THU NHAT
          MOV A,P3;
          ANL A, #00001111B
          CJNE A,#00001110B,COL2
          SJMP PROG1
          COL2: ANL A,#00001111B
          CJNE A,#00001101B, K1 ;Nếu không phải phím 2 thì quay lại kiểm tra từ đầu
          SJMP PROG2 ;nếu phím 2 đựoc bấm thì nhảy chưogn trình 2

          Comment


          • #6
            ;************************************************* ********
            ;chuong Trinh Role Thu Nhat
            ;cau Hinh: Pa0 Dong Cat Role 1
            ; Pa1 Dong Cat Role 2
            ; Pa2 Dong Cat Role 3
            ; Pa3 Dong Cat Role 4
            ; Pa4 Dong Cat Role 5
            ; Pa5 Dong Cat Role 6
            ;cau Hinh 8255a: Pa, Pb, Pc Deu Lam Cong Ra
            ; Tu Dieu Khien #80h; Dia Chi Tu Dieu Khien La 4003h
            ;dia Chi Cac Cong Cua 8255a: Pa = 4000h; Pb=4001h; Pc=4002h;cr=4003h ;pc điều Khiển Led 7 Thanh 4 đoạn Hiển Thị Số 1
            ; Pc0 đến Pc3 Gửi đến Ic7447 Mã Bcd 0001
            ; Pc3 đến Pc7 để Chọn 1 Trong 4 Led Của Led 7 Thanh 4 đoạn
            ;chương Trình đóng Cắtcác Rơle Theo Trình Tự Từ 1-2-3-4-5-6. Rơle Tự Duy Trì ;khi được Cấp điện. Khi Rơle 6 đã được Cấp điện 5s Thì Cắt điện Tất Cả Các Rơle; ;sau 10s Lại Bắt đầu Chu Kì Mới.
            ;_________________________________________________ _____________________

            Prog1:
            Mov A, #80h ; (a)=80h, Là Từ điều Khiẻn 8255a
            Mov Dptr,#4003h ; Dptr Trỏ đến địa Chỉ Cr Của 8255a
            Movx @dptr, A ; Nạp Từ điều Khiển Vào Thanh Ghi Cr, ;(cr)=80h,cấu Hình Các Cổng Pa, Pb Pc Cổng Ra

            Mov Dptr,#4002h ;dptr Trỏ đến Cổng Pc
            Mov A,#00011000b;
            Movx @dptr, A ; A Nạp Vào Pc đểđiều Khiển Led 1 Hiển Thí Số “1”


            Mov A,#00h ;
            Mov Dptr,#4000h ; Dptr Trỏ đến Pa Của 8255a
            Movx @dptr, A ;xóa Pa



            Loop11: Mov A, #01h ; Khởi Tạo Giá Trị Của A
            Mov R0,#06h ; Nạp Biến đếm Số Lần Quay Bit Trong Chu Kì
            Loop21: Mov Dptr,#4000h ; Dptr Trỏ đến Pa
            Movx @dptr, A ; Nạp Giá Trị Của A Vào Cho Pa
            Acall Delay5s ; Gọi Trễ 5s
            Rl A ; Quay Trái Bit Của A
            Djnz R0, Loop21 ;
            Sjmp Loop11 ; ở Lại Vòng Lặp Vô Tận , Cho đến Khi Reset


            ;************************************************* **********8
            ;chuong Trinh Role Thu 2
            ;chương Trình đóng Cắtcác Rơle Theo Trình Tự Từ 1-2-3-4-5-6. Rơle Tự Duy Trì ;khi được Cấp điện. Khi Rơle 6 đã được Cấp điện 5s Thì Cắt điện Tất Cả Các Rơle; ;sau 10s Lại Bắt đầu Chu Kì Mới.
            ;_________________________________________________ _____________________


            Prog2:
            Mov A, #80h ; A)=80h, Là Từ điều Khiẻn 8255a
            Mov Dptr,#4003h ; Dptr Trỏ đến địa Chỉ Cr Của 8255a
            Movx @dptr, A ; Nạp Từ điều Khiển Vào Thanh Ghi Cr, ;(cr)=80h,cấu ;hình Các Cổng Pa, Pb Pc Làm Cổng Ra
            Mov Dptr,#4002h; Dptr Trỏ đến Pc
            Mov A,#00101000b;
            Movx @dptr, A ; ; A Nạp Vào Pc đểđiều Khiển Led 1 Hiển Thí Số “2”

            Mov A,#00h ;
            Mov Dptr,#4000h ;
            Movx @dptr, A ;

            Loop22: Mov A, #000001b ;
            Mov Dptr,#4000h ;trỏ đến Pa
            Movx @dptr, A; Bật Rơle Thứ Nhất Có điện
            Acall Delay1s ;gọi Trễ 1s

            Mov A, #000011b ;cấp điện Rơle 2, Duy Trì Rơle 1
            Mov Dptr,#4000h ;
            Movx @dptr, A;
            Acall Delay1s ; Gọi Trễ 1s

            Mov A, #000111b ; Cấp điện Rơle3, Duy Trì Rơle 1và 2
            Mov Dptr,#4000h ;nt (như Trên)
            Movx @dptr, A; Nt
            Acall Delay1s ; Gọi Trễ 1s

            Mov A, #001111b ; Cấp điện Rơle4, Duy Trì Rơle 1,2, Và 3
            Mov Dptr,#4000h ;
            Movx @dptr, A;
            Acall Delay1s ; Gọi Trễ 1s

            Mov A, #011111b ; Cấp điện Rơle5, Duy Trì Rơle 1,2, 3 ,và 4
            Mov Dptr,#4000h ;
            Movx @dptr, A;
            Acall Delay1s ; Gọi Trễ 1s

            Mov A, #111111b ; Cấp điện Rơle6, Duy Trì Rơle 1,2,3,4, Và 5
            Mov Dptr,#4000h ;
            Movx @dptr, A;
            Acall Delay5s ; Gọi Trễ 5s

            Mov A, #000000b ;sau Khi Cả 6 Rơle Có điện Trong 5s Thì Tắt Tất Cả Rơle
            Mov Dptr,#4000h ;
            Movx @dptr, A;
            Acall Delay5s ;
            Acall Delay5s ; Gọi Trễ 5s Hai Lần Liên Tiếp, Tạo Thành Trễ 10s

            Sjmp Loop22 ; ở Lại Vòng Lặp Vô Tận , Cho đến Khi Reset
            ;********************************
            ;cac Chuong Trinh Tao Tre:
            ;chuong Trinh Tao Tre 5s:



            Delay5s: Mov R3,#37
            Dl10: Mov R2,#100
            Dl9: Mov R1,#250
            Dl8: Nop
            Nop
            Djnz R1,dl8
            Djnz R2,dl9
            Djnz R3,dl10
            Ret
            ;chuong Trinh Tre 1s
            Delay1s: Mov R3,#10
            Dl1: Mov R2,#100
            Dl2: Mov R1,#250
            Dl3: Nop
            Nop
            Djnz R1,dl3
            Djnz R2,dl2
            Djnz R3,dl1
            Ret

            ;chuong Trinh Tre 20ms
            Delay20ms:
            Mov R2,#20
            Dl1111 : Mov R1,#250
            Dl2222 : Nop
            Nop
            Djnz R1,dl2222
            Djnz R2,dl1111
            Ret
            End

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X