Bài viết này nói về việc giao tiếp một bàn phím hex với vi điều khiển 8051. Kiến thức rõ ràng về việc giao tiếp bàn phím hex với 8051 rất quan trọng khi thiết kế các dự án hệ thống nhúng yêu cầu đầu vào ký tự hoặc số hoặc cả hai. Ví dụ, các dự án như khóa mã số kỹ thuật số, máy tính số, v.v. Trước khi đi vào việc giao tiếp chi tiết, hãy xem xét về bàn phím hex.
Bàn phím hex. Bàn phím hex về cơ bản là một bộ sưu tập gồm 16 phím được sắp xếp dưới dạng ma trận 4x4. Bàn phím hex thường có các phím đại diện cho các số từ 0 đến 9 và các ký tự A đến F. Sơ đồ đơn giản của một bàn phím hex tiêu biểu được hiển thị trong hình dưới đây.
Bàn phím 4x4 Bàn phím hex
Bàn phím hex có 8 dây liên lạc, gồm R1, R2, R3, R4, C1, C2, C3 và C4. R1 đến R4 đại diện cho bốn hàng và C1 đến C4 đại diện cho bốn cột. Khi một phím cụ thể được nhấn, các hàng và cột tương ứng mà các đầu của phím được kết nối sẽ ngắn mạch. Ví dụ, nếu phím 1 được nhấn, hàng R1 và cột C1 bị ngắn mạch và cứ thế. Chương trình xác định phím nào được nhấn thông qua phương pháp quét theo cột. Trong phương pháp này, một hàng cụ thể được giữ ở mức thấp (các hàng khác được giữ ở mức cao) và các cột được kiểm tra xem có mức thấp hay không. Nếu một cột cụ thể được tìm thấy ở mức thấp thì điều đó có nghĩa rằng phím được kết nối giữa cột đó và hàng tương ứng (hàng được giữ ở mức thấp) đã được nhấn. Ví dụ, nếu ban đầu hàng R1 được giữ ở mức thấp và cột C1 được tìm thấy ở mức thấp trong quá trình quét, điều đó có nghĩa rằng phím 1 đã được nhấn.
Giao tiếp bàn phím hex với 8051. Sơ đồ mạch để thể hiện việc giao tiếp bàn phím hex với vi điều khiển 8051 được hiển thị dưới đây. Tương tự như các dự án 8051 trước đó, AT89S51 là vi điều khiển được sử dụng ở đây. Mạch sẽ hiển thị ký tự/số đã nhấn lên màn hình hiển thị đa đoạn LED bảy đoạn. Mạch rất đơn giản và chỉ sử dụng hai cổng của vi điều khiển, một cổng cho bàn phím hex và cổng kia cho màn hình hiển thị đa đoạn LED bảy đoạn.
Giao tiếp bàn phím 4x4 với 8051 Giao tiếp bàn phím hex với 8051
Bàn phím hex được giao tiếp với cổng 1 và màn hình hiển thị đa đoạn LED bảy đoạn được giao tiếp với cổng 0 của vi điều khiển. Các trở R1 đến R8 giới hạn dòng đi qua các đoạn tương ứng của màn hình LED. Các tụ C1, C2 và cầu quạt X1 hoàn thành mạch xung cho vi điều khiển. Tụ C3, trở R9 và nút bấm S1 tạo thành một cơ cấu đặt lại ổn định.
ORG 00H
MOV DPTR,#LUT // di chuyển địa chỉ bắt đầu của LUT sang DPTR
MOV A,#11111111B // tải A với tất cả
MOV P0,#00000000B // khởi tạo P0 làm cổng đầu ra
BACK:MOV P1,#11111111B // tải P1 với tất cả 1
CLR P1.0 // làm cho hàng 1 ở mức thấp
JB P1.4,NEXT1 // kiểm tra xem cột 1 có thấp không và nhảy tới NEXT1 nếu không thấp
MOV A,#0D // tải a với 0D nếu cột ở mức thấp (nghĩa là phím 1 được nhấn)
ACALL DISPLAY // gọi chương trình con DISPLAY
NEXT1:JB P1.5,NEXT2 // kiểm tra xem cột 2 có ở mức thấp hay không, v.v...
MOV A,#1D
ACALL DISPLAY
NEXT2:JB P1.6 ,NEXT3
MOV A,#2D
ACALL DISPLAY
NEXT3:JB P1.7,NEXT4 MOV
A,#3D
ACALL DISPLAY
NEXT4:SETB P1.0
CLR P1.1
JB P1.4,NEXT5
MOV A,#4D
ACALL DISPLAY
NEXT5:JB P1.5,NEXT6
MOV A,#5D
ACALL DISPLAY
NEXT6:JB P1.6,NEXT7
MOV A,#6D
ACALL DISPLAY
NEXT7:JB P1.7,NEXT8
MOV A,#7D
ACALL DISPLAY
NEXT8:SETB P1.1
CLR P1 .2
JB P1.4,NEXT9
MOV A,#8D
ACALL DISPLAY
NEXT9:JB P1.5,NEXT10
MOV A,#9D
ACALL DISPLAY
NEXT10:JB P1.6,NEXT11
MOV A,#10D
ACALL DISPLAY
NEXT11:JB P1. 7,NEXT12
MOV A,#11D
ACALL HIỂN THỊ
NEXT12:SETB P1.2
CLR P1.3
JB P1.4,NEXT13
MOV A,#12D
ACALL HIỂN
THỊ TIẾP THEO13:JB P1.5,NEXT14
MOV A,#13D
ACALL HIỂN THỊ TIẾP
THEO14: JB P1.6,NEXT15
MOV A,#14D
ACALL DISPLAY
NEXT15:JB P1.7,BACK
MOV A,#15D
ACALL DISPLAY
LJMP BACK
DISPLAY:MOVC A,@A+DPTR // lấy mẫu ổ đĩa chữ số cho khóa hiện tại từ LUT
MOV P0,A // đặt mẫu ổ đĩa số tương ứng vào P0
RET
LUT: DB 01100000B // Bảng tra cứu bắt đầu từ đây
DB 11011010B
DB 11110010B
DB 11101110B DB 01100110B DB 10110110B
DB
10111110B
DB 00111110B DB 11100 000B DB 11111110B
DB
11110110B
DB
10011100B
DB
10011110B
ĐB 11111100B
ĐB 10001110B
DB 01111010B
KẾT THÚC
Về chương trình. Trước tiên, chương trình khởi tạo cổng 0 làm cổng đầu ra bằng cách ghi toàn bộ 0 và cổng 1 làm cổng đầu vào bằng cách ghi toàn bộ 1. Sau đó, chương trình làm cho hàng 1 ở mức thấp bằng cách xóa P1.0 và quét từng cột một để tìm mức thấp sử dụng lệnh JB. Nếu cột C1 được tìm thấy ở mức thấp, điều đó có nghĩa là số 1 được nhấn và thanh ghi tích lũy được nạp bằng 0 và gọi tới phụ trình DISPLAY. Phụ trình hiển thị thêm nội dung trong A với địa chỉ bắt đầu của bảng tra cứu được lưu trong DPTR và nạp A với dữ liệu mà địa chỉ kết quả trỏ tới (sử dụng lệnh MOVC A,@A+DPTR). Dữ liệu hiện tại trong A sẽ là mẫu đèn số cho phím được nhấn và mẫu này được đưa vào Cổng 0 để hiển thị. Như vậy, chương trình quét từng phím một và đưa nó lên màn hình nếu phím được xác định đã được nhấn.
Ghi chú. Nguồn cung cấp điện áp 5V DC phải được điều chỉnh và lọc tốt. Quét theo cột không phải là phương pháp duy nhất để xác định phím đã được nhấn. Bạn cũng có thể sử dụng quét theo hàng. Trong quét theo hàng, một cột cụ thể được giữ ở mức thấp (các cột khác được giữ ở mức cao) và các hàng được kiểm tra xem có mức thấp sử dụng một lệnh nhảy thích hợp. Nếu phát hiện một hàng cụ thể ở mức thấp, điều đó có nghĩa rằng phím được kết nối giữa hàng đó và cột tương ứng (cột được giữ ở mức thấp) đã được nhấn. Ví dụ, nếu ban đầu cột C1 được giữ ở mức thấp và hàng R1 được quét thấy ở mức thấp, điều đó có nghĩa là phím 1 đã được nhấn. Loại bàn phím hex dạng màng đã được sử dụng trong quá trình thử nghiệm. Loại bàn phím dạng nút bấm và dạng nút màng cũng sẽ hoạt động. Tôi chưa kiểm tra các loại bàn phím khác.
Màn hình hiển thị được sử dụng là màn hình hiển thị đa đoạn LED bảy đoạn chung cực với số hiệu loại ELK5613A. Điều này chỉ để biết và bất kỳ màn hình hiển thị đa đoạn LED bảy đoạn chung cực thông thường khác nào cũng có thể hoạt động ở đây.
Hotline: 0979 466 469