Nhận làm đồ án VĐK các loại ( 8051, AVR, PIC) Tư vấn - Hướng dẫn - lập trình

Thứ Ba, 23 tháng 12, 2014

Bàn phím 4x4


Hướng dẫn sử dụng bàn phím 4x4

Chúng ta biết ic lập trình AT89C51 có 4 cảng 8 bit nên tổng cộng có 32 chân có thể xuất nhập dữ liệu dạng bit. Cách nhập dữ liệu đơn giản nhất là dùng các phím nhấn. Phím nhấn chỉ làm việc theo logic nhị giá, nghĩa là đóng hoặc hở. Với các phím nhấn, người ta có thể dùng đơn lẻ hay tổ hợp theo dạng matrix. Hình vẽ dưới đây cho thấy:



Các phím gắn trên ma trận 4x4, người ta nói matrix 4x4 có 4 hàng và 4 cột. Trên ma trận 4x4 chúng ta chỉ dùng có 8 dây mà có thể gắn được đấn 16 phím, đó là một ưu điểm của loại bàn phím matrix, dùng số chân ít mà gắn được nhiều phím. Với các phím đơn lập thì mỗi phím thường gắn trên một chân của IC, vậy trên một cảng 8 chân chúng ta chỉ có thể gắn được 8 phím.

Các phím nhấn phân ra làm 2 kiểu: Kiểu phím nhấn thường hở và kiểu phím nhấn thường đóng. Khi sử dụng các phím nhấn, chúng ta thường gặp vấn đề sau: Sự rung phím.
Vậy sự rung phím là gì ?


Hình vẽ cho thấy: Khi phím hở thì nó cho mức áp cao, ngay khi phím được nhấn xuống, nó sẽ kéo mức áp xuống mức thấp, nhưng do hiện tượng rung phím, lúc này có sự rung động ở tiếp xúc điểm, khiến cho tiếp điểm lúc dính lúc hở và mức áp sẽ dao động lúc lên lúc xuống và phải sau một lúc mới ổn định được ở mức thấp. Khi bỏ phím nhấn ra, chúng ta cũng gặp hiện tượng tương tự nhưng ít tác hại hơn. Khi dùng phím nhấn với các IC lập trình có phản ứng cực nhanh hiện tượng rung phím sẽ gây ra các điều khiển sai. Khi viết chương trình cho các phím nhấn, chúng ta phải chú ý đến ảnh hưởng của hiện tượng rung phím, nhất là mỗi khi phím được đóng lại.

Trong thực hành, người ta thường dùng một đoạn chương trình làm chậm khoảng 3ms đến 10ms và cho dò lại lần nữa trạng thái của phím để tránh sự sai lầm có thể xẩy ra do hiện tượng rung phím.
* Mạch AT89C51 dùng 8 phím nhấn đơn lập

Khi dùng sơ đồ mạch điện này, trạng thái bit 1 trên các chân của cảng p1 được xem như không có nhấn phím, khi có nhấn phím thì chân có phím được nhấn sẽ xuất hiện bit 0. Khi một trong 8 chân của cảng p1 có chân ở bit 0, chúng ta biết là có nhấn phím, như vậy chúng ta sẽ viết câu lệnh tìm xem trên cảng p1 có xuất hiện bit 0 hay không? Nếu không có bit 0 trên p1 thì tiếp tục
dò tìm, khi có chân có bit 0 thì hiểu là đã có phím bị nhấn xuống, lúc đó chuyển qua tìm xem phím nào đã được nhấn và rồi tiếp theo là cho chạy chương trình tương ứng với phím đã được nhấn.

Sau đây là một đoạn chương trình dùng dò xem có phím nhấn không?

loop: ; đặt tên nhãn cho lệnh nhẩy
call do_key ; cho gọi chương trình dò phím, tên nhãn do_key
jnb f0, ttuc ; nhẩy theo bit của f0, f0=0, tiếp tục dò phím
call tim_phim ; cho gọi trình xác định phím nào được nhấn

ttuc: ; tên nhãn cho lệnh nhẩy
jmp loop ; nhẩy về tên nhãn loop, bắt đầu lại công việc dò phím
....
do_key: ; tên nhãn dùng cho lệnh nhẩy
clr f0 ; cho xóa bit f0, bit kiểm tra có phím nhấn hay không?
mov a, p1 ; chuyển trạng thái bit trên p1 vào thanh ghi a
orl a, #00000000b ; lấy logic OR trị trong a với 00000000b, để tìm bit 0 trên p1
cpl a ; đảo trị trong thanh ghi a
jz key_ret ; nếu trị trong a là 0, nhẩy đến key_ret, không có phím nhấn
call del ; gọi chương trình trể
mov a, p1 ; lại chuyển trạng thái của p1 vào a, kiểm tra lần nữa
orl a, #00000000b ; lại cho lấy logic OR trị trong a với 00000000b
cpl a ; đảo trị trong a để dò xem có phím nhấn không
jz key_ret ; nhẩy đến tên nhãn key_ret nếu không có phím nào được nhấn
setb f0 ; nếu có phím nhấn, cho set bit kiểm tra f0
mov b,a ; cho chuyển trị trong a cho cất vào b để dùng xác định phím nào được nhấn

key_ret: ; tên nhãn dùng cho lệnh nhẩy
mov a, p1 ; cho chuyển trạng thái cảng p1 vào a
orl a, #00000000b ; lấy logic OR trị trong a với 00000000b
cpl a ; đảo trị trong thanh ghi a
jz key_ret1 ; nhẩy đến tên nhãn key_ret1, nếu thanh a bằng 0
jmp key_ret ; nhẩy đến tên nhãn key_ret, tiếp tục kiểm tra p1
key_ret1: ret ; quay lại sau lệnh: call do_key

tim_phim: ; chương trình xác định phím nào đã được nhấn
.....


Hình động trên đây cho thấy cách viết các câu lệnh dùng dò xem có phím nhấn hay không?
 Mạch AT89C51 dùng 16 phím gắn trên ma trận 4x4


Hình vẽ cho thấy, 16 phím nhấn gắn trên ma trận 4x4. Ở đây 4 hàng cho nối vào p2.0, p2.1, p2.2, p2.3, chúng ta gọi 4 hàng này là ngả ra OUTPUT và 4 cột cho nối vào p2.4, p2.5, p2.6, p2.7 và gọi 4 cột là ngả vào INPUT. Có thể thấy: Trên các cảng p1 cho gắn 8 Led và trên cảng p3 chúng ta cũng cho gắn 8 Led. Từ sơ đồ mạch điện này, chúng ta sẽ lập trình để dùng  các phím trên bảng ma trận điều khiển các Led.

Cách viết chương trình vận hành các phím ráp theo kiểu ma trận 4x4: Trước hết người ta đặt các hàng làm ngả ra OUTPUT và đặt các cột làm ngả vào INPUT. Khởi đầu cho các ngả vào ở bit 1 và cho các ngả ra ở bit 0, và chạy trình dò phím, để xem có phím nào đã được nhấn xuống không?

* Khi đã xác nhận là đã có nhấn phím rồi thì cho chạy chương trình tìm phím nhấn. Lúc này mỗi lần chỉ cho một chân INPUT ở bit 0,khởi đầu cho cột 1 ở bit 0 rồi tìm xem trong 4 hàng, xem trên ngả ra OUTPUT nào đang ở bit 0, làm vậy sẽ xác định được một trong 4 phím của cột 1.

* Khi chỉ cho cột 2 ở bit 0, rồi tìm xem ở hàng nào đang ở bit 0,
làm vậy sẽ xác định được một trong 4 phím của cột 2.

* Khi chỉ cho cột 3 ở bit 0, rồi tìm xem ở hàng nào đang ở bit 0,
làm vậy sẽ xác định được một trong 4 phím của cột 3.

* Khi chỉ cho cột 4 ở bit 0, rồi tìm xem ở hàng nào đang ở bit 0,
làm vậy sẽ xác định được một trong 4 phím của cột 4.




Mọi thắc mắc vui lòng liên hệ qua:
Facebook: Rid HaUI


Next previous home

0 nhận xét:

Đăng nhận xét