Chữ chạy

"Con đường đến với tri thức không dễ dàng, nhưng nếu chúng ta quyết đi sẽ đến được bến bờ tri thức !". Chào mừng các bạn đến với trang thông tin của Võ Hoàng Tâm - GV Khoa Điện Điện tử - Trường Đại học SPKT Vĩnh Long. Trang cung cấp thông tin - tài liệu học tập cho các bạn học viên và sinh viên. Chúc các bạn thành công trên hành trình đi tìm tri thức ...

Làm mạch trái tim dùng IC AT89Cxx (nhấp nháy trên 32 Led )

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.
 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. 
 Để 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.
 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 0muố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.
Sau khi dịch xong, chúng ta có file led-nhay.hex, nôi dung như sau:

:100000001202A512003B1202A51200CC1202A57B1F
:100010000A12015D1202A51201CA1202A5DBF27BCF
:10002000051202A51202371202A5DBF57B1412029B
:10003000A512025C1202A5DBF580C57580F87590EB
:100040001F1202B27580F175908F1202B27580E3B3
:100050007590C71202B27580C77590E31202B2752F
:10006000808F7590F11202B275801F7590F81202A0
:10007000B275803F75A0FE7590FC75B07F1202B21C
:1000800075807F75A0FC7590FE75B03F1202B27549
:1000900080FF75A0F87590FF75B01F1202B275A0B1
:1000A000F175B08F1202B275A0E375B0C71202B23B
:1000B00075A0C775B0E31202B275A08F75B0F112CA
:1000C00002B275A01F75B0F81202B22275A01F759A
:1000D000B0F81202B275A08F75B0F11202B275A01D
:1000E000C775B0E31202B275A0E375B0C71202B2D1
:1000F00075A0F175B08F1202B275A0F875B01F121D
:1001000002B275A0FC75807F75B03F7590FE12023B
:10011000B275A0FE75803F75B07F7590FC1202B27B
:1001200075A0FF75801F75B0FF7590F81202B2754B
:10013000808F7590F11202B27580C77590E312023C
:10014000B27580E37590C71202B27580F175908F19
:100150001202B27580F875901F1202B2227580F0FB
:100160001202B27580C31202B275800F1202B2750C
:10017000803F75A0FC1202B27580FF75A0F01202DC
:10018000B275A0C31202B275A00F1202B275A03FE1
:1001900075B0FC1202B275A0FF75B0F01202B27514
:1001A000B0C31202B275B00F1202B275B03F7590B3
:1001B000FC1202B275B0FF7590F01202B27590C3D6
:1001C0001202B275900F1202B22275900F1202B293
:1001D0007590C31202B27590F01202B27590FC7560
:1001E000B03F1202B27590FF75B00F1202B275B037
:1001F000C31202B275B0F01202B275B0FC75A03F26
:100200001202B275B0FF75A00F1202B275A0C31230
:1002100002B275A0F01202B275A0FC75803F120206
:10022000B275A0FF75800F1202B27580C31202B2C0
:100230007580F01202B2227580001202B27580FF42
:1002400075B0001202B275B0FF7590001202B2755F
:1002500090FF75A0001202B275A0FF227580FC7598
:10026000903F1202B27580F075900F1202B2758045
:10027000C07590031202B27580007590001202B230
:1002800075A0FC75B03F1202B275A0F075B00F12E8
:1002900002B275A0C075B0031202B275A00075B0AD
:1002A000001202B2227580FF7590FF75A0FF75B035
:0F02B000FF227F147E647DC8DDFEDEFADFF622BA
:00000001FF