phím chức năng quét 8.051

V

vicky29

Guest
bạn bè thân hữu

i am mới cho vi điều khiển để tha thứ cho tôi hỏi một câu hỏi đơn giản. ai cũng có thể viết thư cho tôi một mã nhỏ lắp ráp bằng cách sử dụng chức năng quét 8.051 cho hai hoặc nhiều phím.
i gây ra không thể làm điều đó.
hoặc nếu một số ai có thể giải thích cho tôi cách làm bàn phím quét.

cảm ơn rất nhiều
byee

 
Tôi đã làm nó 10 năm trước, vì vậy tôi giả sử tôi có thể làm lại sau khi làm mới tâm trí của tôi.Tuy nhiên, tôi không có thời gian ngay bây giờ, nhưng tôi có thể giúp bạn với một số ý tưởng.Trước hết, bàn phím những gì bạn muốn quét.Các HW là gì.Bởi vì keboard quét của bạn phụ thuộc rất nhiều vào HW.
Nguyên tắc của bàn phím quét là sau đây:
1.Bạn có một ma trận của các phím, theo cách tương tự là một cấu trúc bộ nhớ.Tức là, bạn có đường và các hàng, và trong các giao điểm của các bạn có một phím.
2.Quét của chính được thực hiện bởi một dòng địa chỉ bằng cách viết một MEM hoặc đăng ký IO (ví dụ: tất cả các bit có 0s ngoại trừ một tương ứng với dòng địa chỉ), sau đó bạn đọc trạng thái của một MEM hoặc IO đăng ký có chứa tình trạng của các hàng.Nếu một chút (hoặc nhiều chút) có 1 thì bạn biết rằng phím tương ứng là ép - chìa khóa mà là tại giao lộ của các dòng địa chỉ và các hàng có đặt 1.Sau đó, bạn có địa chỉ dòng kế tiếp và như vậy, cho đến khi bạn có trạng thái của các hàng tương ứng với dòng cuối cùng địa chỉ.Sau đó, bạn có một (rất đơn giản) mà thuật toán chuyển đổi từ địa chỉ dòng và tình trạng hàng mã chủ chốt.Vậy đó.Và dĩ nhiên điều này nên được thực hiện theo định kỳ, tốt nhất bằng cách sử dụng bộ đếm thời gian gián đoạn của một (giả sử 50 ms).Tôi hy vọng rằng sẽ giúp bạn.

Belsugului

 
Nếu bạn không thể viết một chương trình thực hiện điều này whats điểm trong việc sử dụng ở tất cả 8.051?Đối với tất cả 8.051 câu hỏi mà bạn nên xem các hướng dẫn và FAQ từ www.8052.com.Tôi có một codeblock đó quét một bàn phím ma trận 4x4, nhưng bạn NÊN biết cơ bản về 8.051 và lắp ráp cho điều đó.PM tôi nếu bạn muốn mã hoặc giúp MSN.

 
u giả sử muốn quét hai pins nói P1.1 và P1.2
kết nối chúng với một nút nhấn và đầu kia của nút để mặt đất.sao cho bất kỳ thời điểm nút được nhấn một số không logic là tại các chân tương ứng.
chương trình cho th9is sẽ là:

org 00h
cjne P1.1, # 00h, $
...................; Làm những gì u muốn xảy ra khi điều này xảy ra
cjne p1.2, # 00h, $
.......................; Làm những gì u muốn xảy ra khi điều này xảy ra
cuối

 
Chào,

Thưởng thức mã này

;------------------------------------------------- ------------------------------
;
; 4x4 Bàn phím chức năng
;
;------------------------------------------------- ------------------------------TÊN KEYPAD_MODULEDT?? KEYPAD_MODULE đoạn DATA
RSEG DT?? KEYPAD_MODULE

KFLAGHI: DS 1;
KFLAGLO: DS 1;

PR?? KEYPAD_MODULE đoạn mã
RSEG PR KEYPAD_MODULE;? Mã Segment?

CÔNG kbinput

kbinput:
MOV R7, # 0; thiết lập trở lại giá trị cho số không
MOV A, # 0EFH;
GỌI SET_ROW;
MOV R0, A; giữ giá trị scaned
MOV A, # 0DFH;
GỌI SET_ROW;
SWAP A;
ORL A, R0;
MOV R1, A;
MOV R0, KFLAGHI; nhận được giá trị cũ
MOV KFLAGHI, A; giữ giá trị mới
GỌI SCAN_KEY;

MOV A, R2;
MOV R6, A; giữ hàng

MOV A, # 0BFH;
GỌI SET_ROW;
MOV R1, A;
MOV A, # 7FH;
GỌI SET_ROW;
SWAP A;
ORL A, R1;
MOV R1, A;
MOV R0, KFLAGLO; nhận được giá trị cũ
MOV KFLAGLO, A; giữ giá trị mới
GỌI SCAN_KEY;

MOV A, R2; giữ cột
JZ KI_NEXT;
ADD A, # 8;
KI_NEXT:
ADD A, R6;
MOV R7, A;
RET; Quét mới phím bấm

SCAN_KEY:
MOV R2, # 8; đặt vòng truy cập
SC_LOOP:
MOV A, R0; kiểm tra giá trị cũ
RLC A;
MOV R0, A;
MOV A, R1; kiểm tra giá trị mới
RL A;
MOV R1, A;

JNB ACC.0, SC_END;
JC SC_END;
RET; hàng giá trị mới

SC_END:
DJNZ R2, SC_LOOP;
RET

;

SET_ROW:
MOV P1, A; Đặt hàng địa chỉ đến cổng P1 [4 .. 7]
MOV A, P1; Đọc dữ liệu cột từ P1 cảng [0 .. 3]
XRL A, # 0FFH; bổ sung bit
ANL A, # 0Fh; nhận Lộ nibble

RET

 

Welcome to EDABoard.com

Sponsor

Back
Top