Tải bản đầy đủ (.doc) (28 trang)

Thiết kế mạch làm led trái tim bằng IC AT89C51 chi tiết

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (858.81 KB, 28 trang )

Vừa qua tôi nhận được rất nhiều điện thư của Bạn đọc, nhiều thư vẫn
hỏi về đề tài bản đèn Led và các bản đèn quang báo. Trong lần này tôi
đề cứ một thư của một Bạn đọc, dân kiến trúc không chuyên về điện
tử, hỏi về các vấn đề có liên quan đến bản đèn 32 Led sắp xếp thành
hình trái tim và có nhiều kiểu nhấp nháy đẹp mắt. Tôi đoán chắc cũng
có nhiều Bạn mới chơi ic lập trình cũng thích đề tài này, nên mượn ý,
viết bài trả lời thư dài hơi hơn, đầy đủ hơn, mong bài viết này đáp ứng
được tính tò mò ham tìm hiểu của các Bạn.


Nội dung trong file đính kèm theo điện thư trong đó có các hình như
sau:

1. Hình vẽ sơ đồ mạch điện cho thấy mạch dùng IC AT89C51, 52 để
điều khiển sự nhấp nháy của 32 Led gắn trên 4 cảng p0, p1, p2, p3.
Đây là một mạch điện rất cơ bản, trị các điện trở hạn dòng có thể dùng
150 ohm đến 220 ohm. Y1 là thạch anh duǹg tạo xung nhịp, có thể
dùng thạch anh 12MHz. Các tụ ổn tần gắn bên cạnh thạch anh theo
nhà sản xuất IC nên dùng trị 33pF.



Thư Bạn đọc có 4 ý chính, được trả lời nhanh như sau:

Ý 1: Bạn có thể dùng ic lập trình AT89C51 với bộ nhớ nội là 4Kbyte hay
tốt hơn dùng AT89C52 với bộ nhớ nội là 8Kbyte.

Ý 2: Trong mạch duǹg các điện trở hạn dòng cho Led, Bạn có thể dùng
điện trở có trị từ 150 ohm đến 220 ohm.

Ý 3: Bên cạnh thạch anh, theo nhà sản xuất IC đề nghị Bạn nên dùng


tụ 33pF để tăng hệ số ổn đ̣inh tần số của thạch anh.

Ý 4: Về Led, chân A cho nối vào đường nguồn +5V, chân K của Led,
qua điện trở hạn dòng, lấy dòng điện tử chảy ra trên các chân của các
cảng để phát sáng. Bạn dùng Ohm kế kim, đặt ở thang đo Rx1, đo kiểm
tra Led, khi đo thuận Led sẽ sáng, lúc này dây màu đen đang ở trên
chân Anode và dây màu đỏ cho biết chân K.





Trong phần sau tôi sẽ vẽ lại sơ đồ mạch điện chính xác hơn, rõ ràng
hơn và sẽ giải thích chi tiết phương cách thiết kế loại mạch này.


2. Hình tổng thể của 32 Led hình trái tim.



Hình mặt dưới của bản mạch in, trên đó là các đường đồng nối mạch.




3. Cách bố trí các linh kiện trên bản mạch in, lới mặt trên.



Phần trả lời thư mở rộng:



Để thiết kế mạch 32 Led gắn thành hình trái tim, cho nhấp nháy theo
nhiều kiểu, Bạn có thể ráp theo sơ đồ mạch điện như sau:


Phần 1: Sơ đồ cho thấy cách kết nối 32 Led trên 4 cảng của ic
AT89C52


Hình vẽ cho thấy, chúng ta gắn 32 Led trên hình trái tim, mỗi Led được
điều khiển tắt mở độc lập bởi một chân của ic lập trình AT89C52. Vấn
đề quan trọng là Bạn phải nhớ chân nào điều khiển Led nào. Trong hình
vẽ trên Bạn thấy, chúng ta gắn Led D1 đến D8 tiếp theo là D9 đến D16
cho cung hình bên trái và Led D17 đến D24 liền theo là D25 đến D32
tạo ra hình cung bên phải. Điều này phải xác định chính xác vì sau này
chúng ta sẽ dùng các câu lệnh để tắt mở các Led trên đúng theo trình
tự, đúng theo ý muốn, nếu không sắp đúng trình tự của chương trình
điều khiển, các Led sẽ nhấp nháy "loạn cào cào".



Phần 2: Sơ đồ mạch điện cơ bản dùng điều khiển sự nhấp nháy của
các Led gắn trên các cảng p0, p1, p2, p3



Muốn dùng ic lập trình AT89C52, trước hết Bạn hãy ráp vào các phụ
kiện sau:


* Trên chân 9 gắn tụ 10uF và điện trở 8.2K để tạo tính reset mỗi khi mở
nguồn. Ngay khi mạch được cấp nguồn, tụ 10uF nạp điện, nó sẽ kéo
chân số 9 lên mức áp cao, điều này sẽ reset ic AT89C52, cấu trúc mạch
bên trong sẽ được xác lập về trạng thái mở đầu theo quy định. Chúng
ta biết ở trạng thái khởi đầu, tấ cả các chân của 4 cảng đều cho ở mức
áp cao và như vậy 32 Led trên hình trái tim lúc mạch mới được cấp điện
sẽ ở trạng thái tắt. Sau một lúc tụ nạp đầy, trả chân 9 về lại mức áp
thấp, mức 0V, ic lập trình bắt đầu chạy các câu lệnh có trong bộ nhớ
EEPROM. Nếu thấy cần Bạn gắn thêm nút nhấn reset S1.

* Trên chân 18, 19 Bạn gắn thạch anh định tần cho mạch dao động
trong ic lập trình. Thông thường dùng thạch anh 12MHz, vậy trong ic sẽ
có xung nhịp chu kỳ 1us. ở đây người ta gắn các tụ nhỏ 33pF có công
dụng ổn tần.

* Điều cần nhớ là phải cho chân 31 nối vào đường nguồn 5V để
khai báo là cho chạy các câu lệnh nằm trong bộ nhớ trong.



Phần 3: Sơ đồ mạch nguồn nuôi, nguồn 5V có độ ổn định tốt



Mạch nguồn gồm biến áp cách ly T1, nó có 2 công dụng: (1), vừa tạo
tính cách ly giữa mạch điện và đường nguồn AC, giữ an toàn cho người
dùng. (2), vừa dùng làm giảm áp AC, hạ mức nguồn AC 220V xuống
9V. Dùng cầu nắn dòng 4 diode để chuyển đổi dòng AC ra dạng dòng
điện xung một pha. Tụ C1 dùng tụ hóa lớn làm kho chứa điện, nó có 3
công dụng: (1), giảm độ dợn sóng. (2), nâng cao mức áp DC lên gần

bằng mức volt cực đại. (3), làm kho chứa điện ổn định điều kiện cấp
điện cho tải. Dùng Led đỏ với điện trở hạn dòng 1K làm đèn chỉ thị. Để
có mức áp DC 5V có độ ổn định tốt, trong mạch dùng ic ổn áp 3 chân
7805. Với loại ic ổn áp tích cực, để tránh mạch điện trong ic không phát
sinh hiện tượng dao động tự kích, ở ngả ra dùng thêm tụ hóa C2 làm tụ
lọc, có thể dùng thêm tụ lọc nhỏ C3 để lọc bỏ các tín hiệu nhiễu tần cao
nhiễm vào đường nguồn. Điều cần nhớ: IC 7805 phải cho gắn trên lá
nhôm làm nguội.




Nói về cách gắn 32 Led theo hình vẽ trái tim.





Qua hình thị phạm trên, trước hết Bạn vẽ hình trái tim hay hình gì khác
cũng được, sau đó gắn 32 Led theo đường bao của hình, điều Bạn cần
nhớ là Led nào được điều khiển bởi chân nào của ic AT89C52, sau đó
Bạn sẽ dùng các câu lệnh tắt mở các Led này theo các kiểu nhấp nháy
mà Bạn muốn. Đó chính là nội dung của bài viết này.



Cách viết chương trình nguồn tạo ra các kiểu nhấp nháy.


Hình động dưới đây cho thấy mỗi Led được điều khiển bởi một chân của

ic lập trình AT89C52, hay AT89C51. Trong mạch này chúng ta cho Led
sáng với mức áp thấp, hay bit 0 và cho tắt Led với mức áp cao hay bit
1.





Các lệnh có thể dùng để đặt bit 0, bit 1 lên các chân của các cảng là:

setb bit : set bit, cho đặt chân lên mức áp cao sẽ làm tắt Led.

clr bit : clear bit, cho đặt chân xuống mức áp thấp sẽ cấp dòng làm
sáng Led.

mov p0, #11111111b : đặt 8 chân của cảng p0 lên mức áp cao, làm tắt
8 Led trên cảng p0.

hay:

mov p0, #00000000b : đặt 8 chân của cảng p0 xuống mức áp thấp, cho
sáng 8 Led trên cảng p0.

Chúng ta có thể lập bảng lưu giữ các kiểu nhấp nháy và cho xuất các
mã điều khiển ra các cảng để điều khiển sự tắt sáng của các Led. Một
thí dụ:



kieu_1: ; dùng bit 0 để cho Led sáng, vậy kiểu này sẽ cho 1 Led sáng

nhẩy.
db 11111111b
db 11111110b
db 11111101b
db 11111011b
db 11110111b
db 11101111b
db 11011111b
db 10111111b
db 01111111b
db 10111111b
db 11011111b
db 11101111b
db 11110111b
db 11111011b
db 11111101b
db 11111110b



Sau đây là một chương trình nguồn dùng điều khiển 32 Led trên 4 cảng
của ic lập trình AT89C51 hay 52.



Chúng ta sẽ dùng cách viết cơ bản, dễ hiểu nhất, đó là muốn Led sáng
thì cho nó có bit 0, muốn tắt Led thì gán cho nó bit 1. Trướt hết hãy tạo
ra các đoạn chương trình con dùng cho các nkiểu nhấp nháy;

Kiểu 1: cho 3 Led nhẩy như hình động trên.


kieu_1a: ; 3 Led nhẩy ra biên trái, và 3 Led nhẩy ra biên phải.
mov p0, #11111000b
mov p1, #00011111b
call delay
mov p0, #11110001b
mov p1, #10001111b
call delay
mov p0, #11100011b
mov p1, #11000111b
call delay
mov p0, #11000111b
mov p1, #11100011b
call delay
mov p0, #10001111b
mov p1, #11110001b
call delay
mov p0, #00011111b
mov p1, #11111000b
call delay
; bắt cầu giữa p0 - p2 và p1 - p3
mov p0, #00111111b
mov p2, #11111110b
mov p1, #11111100b
mov p3, #01111111b
call delay
mov p0, #01111111b
mov p2, #11111100b
mov p1, #11111110b
mov p3, #00111111b

call delay
mov p0, #11111111b
mov p2, #11111000b
mov p1, #11111111b
mov p3, #00011111b
call delay
; cho 3 Led nhẩy trên p2, p3
mov p2, #11110001b
mov p3, #10001111b
call delay
mov p2, #11100011b
mov p3, #11000111b
call delay
mov p2, #11000111b
mov p3, #11100011b
call delay
mov p2, #10001111b
mov p3, #11110001b
call delay
mov p2, #00011111b
mov p3, #11111000b
call delay
ret

Cho 3 Led từ biên trái, biên phải nhẩy trở vào, chương trình con viết
như sau:


kieu_1b: ; cho 3 Led nhẩy từ biên vào
mov p2, #00011111b

mov p3, #11111000b
call delay
mov p2, #10001111b
mov p3, #11110001b
call delay
mov p2, #11000111b
mov p3, #11100011b
call delay
mov p2, #11100011b
mov p3, #11000111b
call delay
mov p2, #11110001b
mov p3, #10001111b
call delay
mov p2, #11111000b
mov p3, #00011111b
call delay
mov p2, #11111100b
mov p0, #01111111b
mov p3, #00111111b
mov p1, #11111110b
call delay
mov p2, #11111110b
mov p0, #00111111b
mov p3, #01111111b
mov p1, #11111100b
call delay
mov p2, #11111111b
mov p0, #00011111b
mov p3, #11111111b

mov p1, #11111000b
call delay
mov p0, #10001111b
mov p1, #11110001b
call delay
mov p0, #11000111b
mov p1, #11100011b
call delay
mov p0, #11100011b
mov p1, #11000111b
call delay
mov p0, #11110001b
mov p1, #10001111b
call delay
mov p0, #11111000b
mov p1, #00011111b
call delay
ret


Thử viết một đoạn chương trình con khác: Cho 4 Led chạy quay vòng,
từ cung bên phải qua cung bên trái và chạy ngược lại.


kieu_2a: ; cho 4 Led nhẩy từ bên trái qua bên phải
mov P0, #11110000b
call delay
mov p0, #11000011b
call delay
mov p0, #00001111b

call delay
mov p0, #00111111b
mov p2, #11111100b
call delay
mov p0, #11111111b
mov p2, #11110000b
call delay
mov p2, #11000011b
call delay
mov p2, #00001111b
call delay
mov p2, #00111111b
mov p3, #11111100b
call delay
mov p2, #11111111b
mov p3, #11110000b
call delay
mov p3, #11000011b
call delay
mov p3, #00001111b
call delay
mov p3, #00111111b
mov p1, #11111100b
call delay
mov p3, #11111111b
mov p1, #11110000b
call delay
mov p1, #11000011b
call delay
mov p1, #00001111b

call delay
ret



kieu_2b: ; cho 4 Led nhẩy từ bên phải qua bên trái
mov p1, #00001111b
call delay
mov p1, #11000011b
call delay
mov p1, #11110000b
call delay
mov p1, #11111100b
mov p3, #00111111b
call delay
mov p1, #11111111b
mov p3, #00001111b
call delay
mov p3, #11000011b
call delay
mov p3, #11110000b
call delay
mov p3, #11111100b
mov p2, #00111111b
call delay
mov p3, #11111111b
mov p2, #00001111b
call delay
mov p2, #11000011b
call delay

mov p2, #11110000b
call delay
mov p2, #11111100b
mov p0, #00111111b
call delay
mov p2, #11111111b
mov p0, #00001111b
call delay
mov p0, #11000011b
call delay
mov p0, #11110000b
call delay
ret



kieu_3: ; cho 8 Led sáng kểu đưa võng
mov p0, #00000000b
call delay
mov p0, #11111111b
mov p3, #00000000b
call delay
mov p3, #11111111b
mov p1, #00000000b
call delay
mov p1, #11111111b
mov p2, #00000000b
call delay
mov p2, #11111111b
ret




Viết đoạn chương trình con cho 2 Led sáng lan dần từ trên xuống dưới.

kieu_4: ; cho 2 Led sáng lan dần từ trên xuống dưới.
mov p0, #11111100b
mov p1, #00111111b
call delay
mov p0, #11110000b
mov p1, #00001111b
call delay
mov p0, #11000000b
mov p1, #00000011b
call delay
mov p0, #00000000b
mov p1, #00000000b
call delay
mov p2, #11111100b
mov p3, #00111111b
call delay
mov p2, #11110000b
mov p3, #00001111b
call delay
mov p2, #11000000b
mov p3, #00000011b
call delay
mov p2, #00000000b
mov p3, #00000000b
call delay

ret



Cấu trúc của chương trình nguồn có thể viết như sau:

org 0000h
start:
call xoa
call kieu_1a
call xoa
call kieu_1b
call xoa
mov r3, #10
tt_1:
call kieu_2a
call xoa
call kieu_2b
call xoa
djnz r3, tt_1
mov r3, #5
tt_2:
call xoa
call kieu_3
call xoa
djnz r3, tt_2
mov r3, #20
tt_3:
call xoa
call kieu_4

call xoa
djnz r3, tt_3
jmp start
;
kieu_1a:
kieu_1b:
kieu_2a:
kieu_2b:
kieu_3:
kieu_4:
;
xoa:
mov p0, #11111111b
mov p1, #11111111b
mov p2, #11111111b
mov p3, #11111111b
ret
delay:
mov r7, #20
v_6: mov r6, #100
v_5: mov r5, #200
djnz r5, $
djnz r6, v_5
djnz r7, v_6
ret
end


Đến đây, Bạn có thể ghép các đoạn chương trình con trên thành 1 file,
đặt tên tùy chọn, họ là .asm, thí dụ: tên file là led-nhay.asm và dùng M-

IDE để dịch file .asm này, tạo ra file .hex để rồi cho nạp các mã lệnh
trong file này vào trong bộ nhớ của AT89C52, thế là xong.



File nguồn led-nhay.asm có nội dung như sau:


org 0000h
start:
call xoa
call kieu_1a
call xoa
call kieu_1b
call xoa
mov r3, #10
tt_1:
call kieu_2a
call xoa
call kieu_2b
call xoa
djnz r3, tt_1
mov r3, #5
tt_2:
call xoa
call kieu_3
call xoa
djnz r3, tt_2
mov r3, #20
tt_3:

call xoa
call kieu_4
call xoa
djnz r3, tt_3
jmp start
;
kieu_1a: ; 3 Led nhẩy ra biên trái, và 3 Led nhẩy ra biên phải.
mov p0, #11111000b
mov p1, #00011111b
call delay
mov p0, #11110001b
mov p1, #10001111b
call delay
mov p0, #11100011b
mov p1, #11000111b
call delay
mov p0, #11000111b
mov p1, #11100011b
call delay
mov p0, #10001111b
mov p1, #11110001b
call delay
mov p0, #00011111b
mov p1, #11111000b
call delay
; bắt cầu giữa p0 - p2 và p1 - p3
mov p0, #00111111b
mov p2, #11111110b
mov p1, #11111100b
mov p3, #01111111b

call delay
mov p0, #01111111b
mov p2, #11111100b
mov p1, #11111110b
mov p3, #00111111b
call delay
mov p0, #11111111b
mov p2, #11111000b
mov p1, #11111111b
mov p3, #00011111b
call delay
; cho 3 Led nhẩy trên p2, p3
mov p2, #11110001b
mov p3, #10001111b
call delay
mov p2, #11100011b
mov p3, #11000111b
call delay
mov p2, #11000111b
mov p3, #11100011b
call delay
mov p2, #10001111b
mov p3, #11110001b
call delay
mov p2, #00011111b
mov p3, #11111000b
call delay
ret
kieu_1b: ; cho 3 Led nhẩy từ biên vào
mov p2, #00011111b

mov p3, #11111000b
call delay
mov p2, #10001111b
mov p3, #11110001b
call delay
mov p2, #11000111b
mov p3, #11100011b
call delay
mov p2, #11100011b
mov p3, #11000111b
call delay
mov p2, #11110001b
mov p3, #10001111b
call delay
mov p2, #11111000b
mov p3, #00011111b
call delay
mov p2, #11111100b
mov p0, #01111111b
mov p3, #00111111b
mov p1, #11111110b
call delay
mov p2, #11111110b
mov p0, #00111111b
mov p3, #01111111b
mov p1, #11111100b
call delay
mov p2, #11111111b
mov p0, #00011111b
mov p3, #11111111b

mov p1, #11111000b
call delay
mov p0, #10001111b
mov p1, #11110001b
call delay
mov p0, #11000111b
mov p1, #11100011b
call delay
mov p0, #11100011b
mov p1, #11000111b
call delay
mov p0, #11110001b
mov p1, #10001111b
call delay
mov p0, #11111000b
mov p1, #00011111b
call delay
ret
kieu_2a: ; cho 4 Led nhẩy từ bên trái qua bên phải
mov P0, #11110000b
call delay
mov p0, #11000011b
call delay
mov p0, #00001111b
call delay
mov p0, #00111111b
mov p2, #11111100b
call delay
mov p0, #11111111b
mov p2, #11110000b

call delay
mov p2, #11000011b
call delay
mov p2, #00001111b
call delay
mov p2, #00111111b
mov p3, #11111100b
call delay
mov p2, #11111111b
mov p3, #11110000b
call delay
mov p3, #11000011b
call delay
mov p3, #00001111b
call delay
mov p3, #00111111b
mov p1, #11111100b
call delay
mov p3, #11111111b
mov p1, #11110000b
call delay
mov p1, #11000011b
call delay
mov p1, #00001111b
call delay
ret
kieu_2b: ; cho 4 Led nhẩy từ bên phải qua bên trái
mov p1, #00001111b
call delay
mov p1, #11000011b

call delay
mov p1, #11110000b
call delay
mov p1, #11111100b
mov p3, #00111111b
call delay
mov p1, #11111111b
mov p3, #00001111b
call delay
mov p3, #11000011b
call delay
mov p3, #11110000b
call delay
mov p3, #11111100b
mov p2, #00111111b
call delay
mov p3, #11111111b
mov p2, #00001111b
call delay
mov p2, #11000011b
call delay
mov p2, #11110000b
call delay
mov p2, #11111100b
mov p0, #00111111b
call delay
mov p2, #11111111b
mov p0, #00001111b
call delay
mov p0, #11000011b

call delay
mov p0, #11110000b
call delay
ret
kieu_3: ; cho 8 Led sáng kiểu đưa võng
mov p0, #00000000b
call delay
mov p0, #11111111b
mov p3, #00000000b
call delay
mov p3, #11111111b
mov p1, #00000000b
call delay
mov p1, #11111111b
mov p2, #00000000b
call delay
mov p2, #11111111b
ret
kieu_4: ; cho 2 Led sáng lan dần từ trên xuống dưới.
mov p0, #11111100b
mov p1, #00111111b
call delay
mov p0, #11110000b
mov p1, #00001111b
call delay
mov p0, #11000000b
mov p1, #00000011b
call delay
mov p0, #00000000b
mov p1, #00000000b

call delay
mov p2, #11111100b
mov p3, #00111111b
call delay
mov p2, #11110000b
mov p3, #00001111b
call delay
mov p2, #11000000b
mov p3, #00000011b
call delay
mov p2, #00000000b
mov p3, #00000000b
call delay
ret
;
xoa:
mov p0, #11111111b
mov p1, #11111111b
mov p2, #11111111b
mov p3, #11111111b
ret
delay:
mov r7, #20
v_6: mov r6, #100
v_5: mov r5, #200
djnz r5, $
djnz r6, v_5
djnz r7, v_6
ret
end



Chuyển file này vào vùng soạn thảo M-IDE để tìm lỗi, hình chụp sau đây
cho thấy cách dùng trình M-IDE.

×