Chúng ta biết, một "vật thể tự động hoàn chỉnh" phải gồm có: Ngả vào - Bộ nhớ - Ngả ra. Ngả vào là chỉ tác động bên ngoài đi vào vật thể, như ở con người, chúng ta cómắt để ghi nhận các thực thể xuất hiện ở dạng quang năng, có tai để nghe biết các sóng âm,có mũi để nhận ra mùi,có lưỡi để nhận biết vị và có lớp da bao bọc toàn thân để cảm nhận ra sự nóng lạnh, cứng mềm, nặng nhẹ... Đó là ngủ quan của con người. Bộ nhớ được dùng...
Nội dung trích xuất từ tài liệu:
Ứng dụng ic lập trình AT89C51: Dùng bàn phím điều khiển motor, relay, đèn...
Ứng dụng ic lập trình AT89C51: Dùng
bàn phím điều khiển motor, relay,
đèn...
Chúng ta biết, một vật thể tự động hoàn chỉnh phải gồm có: Ngả vào Bộ nhớ Ngả
ra. Ngả vào là chỉ tác động bên ngoài đi vào vật thể, như ở con người, chúng ta cómắt để
ghi nhận các thực thể xuất hiện ở dạng quang năng, có tai để nghe biết các sóng âm,có
mũi để nhận ra mùi,có lưỡi để nhận biết vị và có lớp da bao bọc toàn thân để cảm nhận ra
sự nóng lạnh, cứng mềm, nặng nhẹ... Đó là ngủ quan của con người. Bộ nhớ được dùng đề
lưu giữ các chương trình, chương trình là trí tuệ mà thực thể có thể truy cập, lấy ra thao
tác mỗi khi gặp các đối ứng cần giải quyết và Ngả ra chính là các tạo thể trang bị trên các
vật thể nó chấp hành theo các chương trình, như trên cơ thể của chúng ta các thực thể
thấy được như tứ chi hai tay hai chân, tim, phổi, gan, ruột...là các tạo thể luôn vận hành
theo các chương trình đã có trong bộ nhớ. Khi con người đứng gần chổ quá nóng, chúng ta
biết nóng và đã kịp đi ra xa chổ nóng, đó là phản ứng rất cơ bản của một vật thể tự động
hoàn chỉnh.Con người là sinh vật thông minh có khả năng học hỏi các chứng vật hiện diện
chung quanh trong thiên nhiên chung quanh và con người còn muốn tự mình tạo ra
các vật thể tự động hoàn chỉnh nữa. Ước muốn này đã có bước tiến vượt bậc từ khi người
ta chế tạo ra được các ic lập trình, nó hoạt động theo các chương trình đã có trong các bộ
nhớ. Trong lần này chúng ta sẽ nói đến tính năng nhập thông tin từ bên ngoài vào bên
trong của các ic lập trình, cơ bản nhất là dùng các phím nhấn, sau đó sẽ mở rộng qua các
cách lấy thông tin qua các cảm biến, như: quang trở, nhiệt trở, vị trở, từ trở, ẩm trở, áp trở,
phong trở, động trở, ... Với các cảm biến này, chúng ta có thể mô phỏng nhiều chức năng
giống như ngủ quan của các sinh vật vậy.
Trước khi nói đến điều cao siêu, chúng ta hãy tìm hiểu một hệ vận hành cơ bản và đơn
giản cái đã. Các phím nhấn dùng với ic lập trình AT89C51Chú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ấnttuc: ; 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ấnkey_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 ...