Dẫn nhập
Trong các công viên lớn hay trong các hội chợ triển lãm ngoài trời, hội hoa xuân, nhà hàng bên bờ sông hay bến tàu...Các nơi này không thể thiếu các dãy đèn màu nhấp nháy, làm tăng vẽ mỹ lệ hấp dẫn cho khách đến dạo chơi. Trước đây các dãy đèn này được điều khiển bởi các khóa điện lá kim, đặt nằm chung quanh các đĩa lồi lõm, nó được đóng mở theo các bánh cam kéo quay bởi một motor AC, chổ lồi sẽ có tác dụng đóng mạch làm sáng đèn và chổ lõm sẽ có tác dụng làm hở mạch để tắt đèn. Cách điều khiển cơ học này có nhiều khuyết điểm, do có ma sát nên độ bền kém, thay đổi chậm, ít kiểu nhấp nháy, phát ra tia lữa tạo xung nhiễu mạnh,...Ngày nay, người thợ điện tử nào cũng đều biết có thể dùng TRIAC làm khóa điện bán dẫn đóng mở các dãy đèn vài ngàn Watt một cách nhẹ nhàng, do không dùng nguyên lý cơ học nên độ bền cao, gọn nhẹ, không phát tia lữa điện nên ít gây nhiễu vô tuyến, và có thể tạo nhịp tắt mở nhanh hơn quán tính của đèn. Hiện nay trên thị trường cũng đã có bán hộp điều khiển 6 dãy đèn bóng 220V dùng 6 TRIAC với quy trình điều khiển tắt mở dùng một vài ic logic dời bit họ 74xx. Kiểu mạch này còn đơn điệu, có kiểu dáng nhấp nháy không đa dạng. Cách hay nhất là chúng ta dùng một ic lập trình như AT89C51, hay ít chân hơn với AT89C2051 đề lập trình, tạo ra nhiều nhiều kiểu dáng nhấp nháy lạ mắt, cấu trúc mạch không những còn gọn hơn, mà còn ít tốn kém hơn nữa, dễ thay đổi chương trình, dễ bảo trì. Ở đây, tôi ngồi nhớ lại các kinh nghiệm đã làm và sẽ viết lại các cách thức dùng ic lập trình AT89C51, cho kết hợp với nhiều TRIAC để làm các dãy đèn màu trang trí cho các hội hoa xuân, cho xe hoa, cho các công viên lớn và nhất là cho các cuộc triển lãm được tổ chức ở ngoài trời. Tôi nghĩ bài viết sẽ có ích với các Bạn thợ điện tử có làm thêm công việc trang trí đèn quảng cáo.
Trước hết hãy nói đến cách tạo ra các dãy đèn màu
1. Tìm hiểu tác dụng đóng mở của transistor và SCR
Hình vẽ cho thấy chúng ta dùng các transistor NPN và PNP làm các khóa điện đóng mở dòng cấp cho bóng đèn bằng mức volt cao thấp đặt trên chân B.
Trong mạch: Với transistor NPN, bóng đèn đặt trên chân C, transistor sẽ dẫn điện khi chân B được cấp mức volt cao, cao hơn chân B. Với transistor PNP thì transistor sẽ dẫn điện khi mức volt chân B xuống thấp, thấp hơn chân E. Transistor chỉ là loại khóa điện đơn hướng, dòng qua tải chỉ chảy theo một chiều, transistor là khóa điện không có tính tự giữ, sự tắt mở của bóng đèn trên chân C thay đổi theo mức volt thấp cao trên chân B.
Chúng ta xem các transistor loại hai mối nối BJT có cấu trúc tương đương với 2 diode, Bạn xem hình, do vậy đo kiểm tra các transistor là đo kiểm tra tính thuận nghịch của 2 diode. Nếu cả 2 diode đều tốt là transistor tốt.
SCR cũng là một khóa điện bán dẫn đóng mở theo mức áp trên cực cổng Gate, và SCR cũng là một khóa điện đơn hướng nhưng có tính tự giữ. Người ta có thể dùng 2 transistor hỗ bổ ráp đẳng hiệu như một SCR.
Hình vẽ cho thấy, cách dùng 2 transistor ráp thành một SCR, Bạn thấy dòng IB của Q2 sẽ là dòng IC của Q1 và dòng IB của Q1 là dòng IC của Q2. Nên khi Q2 ngưng dẫn, nó không cấp dòng IBcho Q1, và khi Q1 ngưng dẫn nói cũng sẽ không cấp dòng IB cho Q2. Điều này cho thấy khi Q2 tắt, Q1 cũng tắt và khi Q2 dẫn thì Q1 cũng dẫn, do vậy nó có thể dùng như một khóa điện đơn hướng có tính tự giữ như SCR.
Nguyên lý làm việc của SCR như sau:
Hình vẽ cho thấy, khi cực cổng (tức chân B của Q2) không được cấp mức volt mòi, áp dương, Q2 tắt thì Q1 cũng tắt và đèn LP1 không sáng. Nếu cực cổng được cấp mức áp dương, Q2 sẽ dẫn điện, dòng IC của Q2 lại chính là dòng IB của Q1, Q1 dẫn sẽ cấp lại dòng IB cho Q2 và giữ cho Q2 luôn ở trạng thái bão hòa dù cho lúc này không còn mức áp mòi trên chân B của Q2 nữa. Q3 cũng có cách làm việc tương tự.
Trong mạch, các điện trở R1, R2 (10K) duǹg để tăng độ ổn định nhiệt. Chúng at cũng có thể lấy chân B của transistor Q1 làm cực cổng, tuy nhiên cực cổng này ḱch chạy với mức volt thấp. Tóm lại khi đèn đã sáng thì nó sẽ luôn sáng do tính tự giữ. Muốn tắt đèn chúng ta phải làm tắt SCR, như cho ngắt nguồn hay cho nốt tắt ngang SCR.
Cách đo kiểm tra các SCR: Bạn dùng một Ohm kế, lấy thang đo Rx1 để có dòng chảy trên dây đo lớn. Khi đặt dây đỏ trên chân K (cho bơm dòng vào chân K) và dây đen trên chân Anode (cho hút dòng ra trên chân A), kim sẽ không lên vì không có dòng chảy qua SCR. Bây giờ "tìm cách" cho chân cổng G chạm nhẹ vào chân Anode, kim sẽ lên, SCR đã vào trạng thái dẫn điện, và lúc này cho bỏ chân cổng ra khỏi chân Anode, kim vẫn tiếp tục lên, do khi SCR đã dẫn điện nó có tính tự giữ nên tiếp tục dẫn điện.
Tôi dùng 4 hình ghép lại tạo hình động trên, dùng hình này để Bạn thấy hoạt động của các SCR khác với các transistor. Hình động này có 4 trình tự:
Trình tự 1: Khi S1 đóng kín, và S2 ở mức áp thấp 0V, lúc này transistor Q1 tắt và SCR Q2 cũng tắt nên các đèn LP1, LP2 đều không sáng.
Trình tự 2: Khi S1 đóng kín, S2 chuyển lên mức áp cao, lúc này chân B của transistor Q1 có phân cực, Q1 dẫn đèn LP1 sáng, lúc này cực cổng của SCR Q2 được cấp mức áp mòi, Q2 dẫn và đèn LP2 sáng.
Trình tự 3: Khi S1 đóng kín, S2 trở lại mức áp thấp 0V, lúc này chân B của Q1 mất áp phân cực, Q1 tắt và đèn LP1 tắt. Chân cổng của SCR Q2 cũng mất mức áp mòi, nhưng do có tính tự giữ nên Q2 vẫn ở trạng thái dẫn điện, và đèn LP2 vẫn sáng.
Trình tự 4: Lúc này S1 cho hở mạch, S2 ở mức áp thấp, và khi S1 trở lại đóng kín mạch, lúc này cả Q1 và Q2 đều tắt nên cả LP1, LP2 đều không sáng.
2. Sự khác biệt giữa SCR và TRIAC
* Qua phần trên chúng ta thấy SCR là một khóa điện bán dẫn, mở bằng mức áp mòi trên cực cổng và nó có tính tự giữ. Nhưng SCR là một khóa điện đơn hướng.
* TRIAC có cấu trúc tương đương như hai SCR ghép như hình vẽ, nên TRIAC cũng là khóa điện bán dẫn, cũng có tính tự giữ, nhưng TRIAC là khóa điện song hướng, hai chiều, dòng điện có thể chảy qua TRIAC theo cả hai chiều.
Cách đo kiểm tra TRIAC, cũng làm giống như cách đo của SCR, trong cách đo TRIAC, khi Bạn đảo chiều TRIAC, và cho kích cực cổng, nó cũng sẽ vào trạng thái dẫn điện, trong khi đó thì SCR lạ không dẫn điện.
Trong bước 1: Dây đen của Ohm kế trên chân MT2, dây đỏ trên chân MT1, kim không lên, cho chân Gate chạm nhẹ vào chân MT2, kim lên, lúc này để hở chân Gate kim vẫn lên vì có tính tự giữ.
Trong bước 2: Đảo ngược TRIAC, dây đỏ của Ohm kế trên chân MT2, dây đen trên chân MT1, cho chân Gate chạm nhẹ vào chân MT1, kim lên, lúc này để hở chân gate kim vẫn lên vì có tính tự giữ.
TRIAC có 4 cách dùng, Bạn xem hình sau:
Trong 4 cách dùng này, cách 1 là nhạy nhất và cách 4 là kém nhạy nhất. Theo thứ tự: cách 1 → cách 2 → cách 3 → cách 4.
3. Dùng PSpice tìm hiểu nguyên lý làm việc của TRIAC
Trong hình này, chúng ta dùng TRIAC 2N6342, trên chân MT2 cho gắn các dãy dây đèn, các đèn thường là các bóng 5W cho mắc song song và nối thẳng vào đường nguồn 220V. Vậy khi TRIAC dẫn điện nó sẽ cấp dòng cho các dãy đèn sáng. Mạch dùng các điện trở tụ điện R4 - C2 và R5 - C1 để tạo điện áp mòi cực cổng Gate để kích mở TRIAC. Tùy theo góc mở lớn hay nhỏ mà lượng điện cấp cho các dãy đèn nhiều hay ít, chúng ta điều chỉnh các điện trở trong mạch có thể làm thay đổi mức sáng của các dãy đèn. Để hiểu rõ loại mạch này hơn, chúng ta sẽ dùng đến phần mềm PSpice để phân tích mạch.
Để tra tìm tư liệu các loại linh kiện điện tử, Bạn có thể vào trang web này để tìm.
Bạn vào trang web này để truy tìm tư liệu.
Trước hết trong trang vẽ của Capture CIS của OrCAD, chúng ta vào các thư viện của PSpice để lấy ra linh kiện và vẽ sơ đồ mạch điện như hình vẽ.
Vẽ xong, chúng ta cho liên thông với trình PSpice và chạy PSpice để khảo sát nguyên lý hoạt động của mạch. Kết quả chúng ta có đồ thị như hình sau:
Hình này cho thấy:
* Nguồn cấp cho mạch là 220V AC, tần số 50Hz (đường biểu diễn màu xanh V1:+). Tùy theo góc mở sớm hay trể, lượng điện cấp cho tải sẽ thay đổi (đường biểu diễn màu đỏ X1:MT2). Nếu bạn thay đổ trị của R4 - C2 và R5 - C3, góc mở của TRIAC sẽ thay đổi.
* Dùng cây dò dòng, chúng ta thấy được dòng điện chảy ra trên chân MT2 (đường biểu diễnmàu xanh I(X1: MT2)).
* Dùng cây dò công suất W chúng ta thấy được công suất cấp cho tải (đường biểu diễm màu xanh W(R1)). Chúng ta cũng có thể tính lượng điện trung bình cấp cho tải (đường biểu diễn màu đỏ AVG(W(R1))).
Cũng trên mạch này, chúng ta dùng các đầu dò để xem:
* Điện áp trên chân MT2, khi TRIAC dẫn điện điện áp trên chân MT2 ở mức bằng 0V.
* Điện áp trên chân R4, hay trên tụ C2. Dạng tín hiệu bậc 1, cho thấy tụ C2 xả điện nhanh hơn, điện áp xuống nhanh.
* Điện áp trên chân R5 hay trên tụ C1. Dạng tín hiệu bậc 2, cho thấy tụ C1 xả chậm hơn, mức áp xuống chậm hơn.
Điều khiển các dãy đèn màu với ic AT89C51
TRIAC và bit đóng mở của ic AT89C51. Sơ đồ mạch điện dùng một cảng của ic lập trình AT89C51 để điều khiển 8 dãy đèn màu.
Sơ đồ mạch điện cho thấy, chúng ta thiết kế một bộ với 8 dãy đèn dùng cho một cảng của ic lập trình AT89C51. Để tạo tính cách ly giữa bo điều khiển và bo đèn chúng ta dùng cách truyền tín hiệu qua opto, trên mỗi đường dùng một Led chỉ thị để xác định trạng thái làm việc của dãy đèn. Toàn phần ráp trên một bo mạch, nó có thể kết nối với các cảng của các ic lập trình, như AT89C2051, AT89C51...
Phân tích mạch:
Mạch điện cho thấy: Trên bo đèn do chúng ta dùng mạch kích thích ráp với các transistor pnp và npn nên phải ráp thêm một mạch nguồn nuôi nhỏ để có áp DC cấp nguồn cho các mạch điện này. Nguồn gồm một biến áp T1, dùng để hạ áp AC và dùng 4 diode nắn dòng để đổi dòng điện xoay chiều ra dạng dòng điện dạng xung một chiều, cho dòng điện nạp vào một tụ hóa lớn C16=2200µF để có mức áp DC ổn định. Ở đây đặt một Led chỉ thị và một điện trở hạn dòng R47=1K.
Mạch thúc với quang transistor có trong các opto ISO4, khi quang transistor bị chiếu sáng, nó sẽ dẫn điện, dòng điện chảy ra trên chân C, kích dẫn 1 transistor pnp Q10, trong mạch chúng ta hạn dòng chân B với điện trở R20=10K, cũng dùng điện trở R19=10K để tăng độ ổn định nhiệt. Khi transistor pnp Q10 dẫn điện, nó kích dẫn transistor npn Q11, và khi transistor Q11 dẫn điện, dòng điện chảy ra trên chân C sẽ làm sáng Led chỉ thị và cấp dòng cho cực cổng và kích dẫn TRIAC Q12, điện trở R23=100 dùng để hạn dòng cực cổng. Ở đây cũng dùng điện trở hạn dòng chân B với R22=2.2K và dùng điện trở R21=5.6K để tăng hệ số ổn định nhiệt.
Tóm lại, mạch làm việc như sau: Khi chân ra của một cảng xuất bit 0, mức áp thấp sẽ làm sáng Led trong opto, quang transistor bị kích thích, nó dẫn điện và kích dẫn các transistor pnp, npn và kích dẫn TRIAC, TRIAC cấp dòng làm sáng dãy đèn màu gắn trên chân MT2. Nếu ic lập trình xuất bit 1 với mức volt cao, sẽ không có dòng cấp cho Led trong opto, Led tắt, TRIAC không được cấp dòng kích thích ở cực cổng nó sẽ làm tắt dãy đèn màu trên chân MT2.
Dùng hình động để cho thấy nguyên lý hoạt động của mạch.
* Khi ic lập trình xuất bit 0, Led trong opto sáng, các transistor Q4, Q5 dẫn điện, cực cổng của TRIAC được cấp dòng mòi, TRIAC dẫn điện vả cấp dòng làm sáng các dãy đèn trên chân MT2.
* Khi ic lập trình xuất bit 1, Led trong opto tắt, các transistor Q4, Q5 ngưng dẫn, cực cổng của TRIAC không được cấp dòng mòi, TRIAC không dẫn điện và làm tắt các dãy đèn trên chân MT2.
Mạch điện cơ bản chạy ic AT89C51.
Muốn dùng ic lập trình AT89C51 để điều khiển các dãy đèn, Bạn hãy ráp các phần mạch cơ bản như hình trên:
* Dùng đường nguồn 5V có độ ổn định tốt cấp cho ic. Chân 20 cho nối masse, chân 40 cho nối với nguồn 5V.
* Trên chân số 9 gắn tụ 10µF và điện trở 8.2K tạo chức năng reset mỗi khi bo được cấp điện.
* Trên chân 18, 19 gắn thạch anh định tần, ở đây dùng thạch anh 12MHz, vậy chu kỳ lệnh là 1µs, gắn 2 tụ nhỏ 33pF bù nhiệt ổn tần.
* Trên chân 31 cho lên mức áp 5V để khai báo là chỉ dùng bộ nhớ trong.
* Trên cảng p0 dùng thanh 8 điện trở 10Kx8 cho treo áp để ổn định mức bit 1 đối với cảng này.
Với các mạch điện như trên, ic lập trình AT89C51 sẽ sẳn sàng chạy các câu lệnh mà Bạn đã cho nạp vào bộ nhớ EEPROM của nó. Các bit cho xuất nhập trên 4 cảng, loại cảng 8 bit, đó là cảng p0, p1, p2, p3.
Bây giờ công việc còn lại của chúng ta là viết các chương trình nguồn dùng để điều khiển các dãy đèn màu làm việc thẳng với đường nguồn nhà đèn 220V.
Viết các chương trình nguồn.
Chúng ta biết để làm sáng một dãy đèn thì dùng bit 0 và để tắt một dãy đèn thì dùng bit 1. Do vậy chúng ta có thể chọn bit trên các đường ra bằng câu lệnh set bit (setb) hay clear bit (clr). Cũng có thể dùng lệnh move (mov) để mỗi câu lệnh cùng lúc tác động vào 8 bit.
Phần 1: hãy viết chương trình nguồn ở cấp độ đơn giản trực quan.
org 0000h
start:
call kieu_1
call kieu_2
mov r7, #10
tiep_tuc:
call kieu_3
djnz r7, tiep_tuc
call kieu_4
call kieu_2
jmp start
;
kieu_1:
mov p1, #00000000b
call delay
mov p1, #00011000b
call delay
mov p1, #00111100b
call delay
mov p1, #01111110b
call delay
mov p1, #11111111b
call delay
ret
;
kieu_2:
mov p1, #11111111b
call delay
mov p1, #01111111b
call delay
mov p1, #10111111b
call delay
mov p1, #11011111b
call delay
mov p1, #11101111b
call delay
mov p1, #11110111b
call delay
mov p1, #11111011b
call delay
mov p1, #11111101b
call delay
mov p1, #11111110b
call delay
mov p1, #11111111b
ret
;
kieu_3:
mov p1, #11111111b
call delay
mov p1, #11111110b
call delay
mov p1, #11111101b
call delay
mov p1, #11111011b
call delay
mov p1, #11110111b
call delay
mov p1, #11101111b
call delay
mov p1, #11011111b
call delay
mov p1, #10111111b
call delay
mov p1, #01111111b
call delay
mov p1, #11111111b
call delay
ret
;
kieu_4:
mov p1, #01111111b
call delay
mov p1, #00111111b
call delay
mov p1, #00011111b
call delay
mov p1, #00001111b
call delay
mov p1, #00000111b
call delay
mov p1, #00000011b
call delay
mov p1, #00000001b
call delay
mov p1, #00000000b
call delay
mov p1, #00000001b
call delay
mov p1, #00000011b
call delay
mov p1, #00000111b
call delay
mov p1, #00001111b
call delay
mov p1, #00011111b
call delay
mov p1, #00111111b
call delay
mov p1, #01111111b
call delay
mov p1, #11111111b
call delay
mov p1, #00000000b
call delay
call delay
mov p1, #11111111b
call delay
mov p1, #00000000b
call delay
call delay
mov p1, #11111111b
call delay
mov p1, #00000000b
call delay
call delay
mov p1, #11111111b
call delay
mov p1, #00000000b
call delay
call delay
mov p1, #11111111b
call delay
mov p1, #00100010b
call delay
mov p1, #01001000b
call delay
mov p1, #00001001b
call delay
mov p1, #00100101b
call delay
mov p1, #01001010b
call delay
mov p1, #10010100b
call delay
mov p1, #01101001b
call delay
call delay
ret
;
delay:
mov r7, #10
v_r6: mov r6, #200
v_r5: mov r5, #250
djnz r5, $
djnz r6, v_r5
djnz r7, v_r6
ret
end
Ghi nhận:
Trong chương trình nguồn này, chúng ta chủ yếu dùng câu lệnh mov để đặt 8 bit cho xuất ra trên cảng p1. Ứng với bit 0 là dãy đèn sáng và bit 1 là dãy đèn sẽ tắt. Dùng đoạn chương trình làm trể để có nhịp nhấp nháy rõ nét. Các kiểu nhấp nháy viết thành các chương trình con cho đặt tên nhãn là kiểu 1, kiểu 2, kiểu 3, kiểu 4..., và khi muốn dùng kiểu nhấp nháy nào thì dùng câu lệnh call để gọi ra. Qua các câu lệnh trên Bạn thấy dùng ic lập trình để định kiểu nhấp nháy của các dãy đèn cực kỳ đơn giản. Phải không?
Đoạn chương trình này Bạn có thể viết trong trang văn bản của trình MIDE-51, viết xong, Bạn đặt cho nó một cái tên với họ là .asm, rồi gõ phím F9 để cho dịch các câu lệnh ra dạng mã viết ở dạng hệ thập lục phân, các mã lệnh này đặt trong file có họ là .hex. Bây giờ Bạn dùng hộp nạp ROM, cho nạp các câu mã lệnh này vào nằm trong bộ nhớ EEPROM của ic AT89C51, thế là xong chuyện, bây giờ cho gắn ic AT89C51 vào bo thực hành, Bạn sẽ thấy các Led chỉ thị trên bo nhấp nháy theo đúng các câu lệnh mà Bạn đã soạn. Và nếu gắn các dãy đèn vào bo Bạn sẽ thấy cả một trời sao nhấp nháy đúng theo ý muốn của Bạn. Thích không?
Hình này cho thấy chương trình nguồn đã được viết trong trang văn bản của M-IDE for MSC51 và sau đó cho dịch ra file .hex để cho nạp các câu mã lệnh vào bộ nhớ trong của ic AT89C51.
File .hex có nội dung như sau:
:100000001200151200347F0A12006EDFFB1200ABE3
:1000100012003480EB759000120175759018120172
:100020007575903C12017575907E1201757590FF83
:10003000120175227590FF12017575907F1201757E
:100040007590BF1201757590DF1201757590EF12F2
:1000500001757590F71201757590FB120175759019
:10006000FD1201757590FE1201757590FF22759055
:10007000FF1201757590FE1201757590FD120175E4
:100080007590FB1201757590F71201757590EF125E
:1000900001757590DF1201757590BF12017575902D
:1000A0007F1201757590FF1201752275907F120104
:1000B0007575903F12017575901F12017575900F3F
:1000C000120175759007120175759003120175750F
:1000D0009001120175759000120175759001120161
:1000E0007575900312017575900712017575900F63
:1000F00012017575901F12017575903F120175758B
:10010000907F1201757590FF1201757590001201B4
:10011000751201757590FF120175759000120175C9
:100120001201757590FF120175759000120175121C
:1001300001757590FF12017575900012017512011D
:10014000757590FF120175759022120175759048B2
:10015000120175759009120175759025120175755A
:10016000904A12017575909412017575906912018B
:1001700075120175227F0A7EC87DFADDFEDEFADF88
:02018000F62265
:00000001FF
Phần 2: Dùng bảng để tạo ra các dạng nhấp nháy cho các dãy đèn.
Trong đoạn chương trình nguồn này chúng ta tạo dạng nhấp nháy của các dãy đèn bằng cách đặt các bit 0 vào các đoạn mã tạo ra trong bảng, và dùng câu lệnh movc a, @a+dptr để lấy các đoạn mã này xuất ra trên các cảng tùy chọn để tắt mở đèn theo thiết kế của Bạn.
org 0000h
start:
clr a ; xóa trị trong thanh ghi a
mov dptr, #kieu_1 ; đặt bảng kiểu 1 vào thanh ghi con trỏ dptr
mov r6, #20 ; chọn số lần nhấp nháy là 20
llai1: mov r7, #10 ; trong kiểu chớp này có 10 mẫu
ttuc1: call outp1 ; cho xuất mã lấy trong bảng ra cảng p1
djnz r7, ttuc1 ; dò trị r7, làm lại 10 lần
clr a ; cho xóa trị trong thanh ghi a
djnz r6, llai1 ; dò trị trong r6, lập lại 20 lần
jmp start ; quay lại từ đầu
outp1: ; chương trình cho xuất mã trên cảng p1
movc a, @a+dptr ; lấy mã trong bảng theo trị của a, mã cho cất vào a
mov p1, a ; xuất mã lấy được ra cảng p1 để tắt mở đèn theo bit
call delay ; gọi trình làm chậm
inc a ; tăng trị trong a lên +1 để lấy mã tiếp theo
ret ; quay lại sau câu lệnh call outp1
kieu_1: ; đặt tên bảng là kiểu 1, kiểu này có 10 mẫu
db 11111111b
db 11111110b
db 11111101b
db 11111011b
db 11110111b
db 11101111b
db 11011111b
db 10111111b
db 01111111b
db 11111111b
delay: ; chương trình làm chậm
mov r5, #10
v_r4: mov r4, #50
v_r3: mov r3, #200
djnz r3, $
djnz r4, v_r3
djnz r5, v_r4
ret
end ; dừng biên dịch tại dòng này
Phát triển thành một chương trình nguồn dài hơn.
org 0000h
start: ; đặt tên nhãn cho lệnh nhẩy
clr a ; xóa sạch thanh ghi a
mov dptr, #kieu_1 ; đặt bảng nháy kiểu 1 vào thanh ghi địa chỉ
mov r6, #20 ; định số lần lập lại là 20
llai1: mov r7, #10 ; số mã trong bảng kiểu 1 là 10
ttuc1: call outp1 ; cho xuất mã tắt mở đèn trên cảng p1
djnz r7, ttuc1 ; dò trị trong r7, lập lại 10 lần
clr a ; trả trị thanh ghi a về 0
djnz r6, llai1 ; dò trị trong r6, cho nháy kiểu 1 20 lần
; viết tương tự như trên, cho xuất mã trên p2
clr a
mov dptr, #kieu_2
mov r6, #20
llai2: mov r7, #9
ttuc2: call outp2
djnz r7, ttuc2
clr a
djnz r6, llai2
; viết tương tự như trên, cho xuất mã trên p0, p1, p2, p3
clr a
mov dptr, #kieu_4
mov r6, #10
llai3: mov r7, #11
ttuc3: call outp0p1p2p3
djnz r7, ttuc3
clr a
djnz r6, llai3
; viết tương tự như trên, cho xuất mã trên p0
clr a
mov dptr, #kieu_3
mov r6, #5
llai4: mov r7, #10
ttuc4: call outp0
djnz r7, ttuc4
clr a
djnz r6, llai4
jmp start
; trình cho xuất mã trên p0
outp0:
movc a, @a+dptr
mov p0, a
call delay
inc a
ret
; trình cho xuất mã trên p1
outp1:
movc a, @a+dptr
mov p1, a
call delay
inc a
ret
; trình cho xuất mã trên p2
outp2:
movc a, @a+dptr
mov p2, a
call delay
inc a
ret
; trình cho xuất mã trên p3
outp3:
movc a, @a+dptr
mov p3, a
call delay
inc a
ret
; trình cho xuất mã trên 4 cảng p0, p1, p2, p3
outp0p1p2p3:
movc a, @a+dptr
mov p0, a
mov p1, a
mov p2, a
mov p3, a
call delay
inc a
ret
; tạo các bảng mã, định hình các kiểu nhấp nháy
kieu_1: ; 10 mau
db 11111111b
db 11111110b
db 11111101b
db 11111011b
db 11110111b
db 11101111b
db 11011111b
db 10111111b
db 01111111b
db 11111111b
kieu_2: ; 9 mau
db 11111111b
db 01111110b
db 10111101b
db 11011011b
db 11100111b
db 11011011b
db 10111101b
db 01111110b
db 11111111b
kieu_3: ; 10 mau
db 11111111b
db 11111110b
db 11111100b
db 11111000b
db 11110000b
db 11100000b
db 11000000b
db 10000000b
db 00000000b
db 11111111b
kieu_4: ; 11 mau
db 11111111b
db 00000000b
db 00011000b
db 00111100b
db 01111110b
db 11111111b
db 00000000b
db 10000001b
db 11000011b
db 11100111b
db 11111111b
delay:
mov r5, #10
v_r4: mov r4, #50
v_r3: mov r3, #200
djnz r3, $
djnz r4, v_r3
djnz r5, v_r4
ret
end
Trong cách viết này, Bạn dễ dàng định hình cho các kiểu nhấp nháy của các dãy đèn, trước hết hãy tạo bảng mã, mỗi mã 8 bit, sau đó định kiểu nhấp nháy, muốn dãy đèn nào sáng thì đặt bit 0, muốn tắt thì đặt bit 1. Sau cùng đếm xem trong bảng có bao nhiêu mẫu mã để khai báo số lần lấy mã cho xuất ra trên các cảng.
Sau khi đã có chương trình nguồn, cho dịch ra các dòng mã hệ thập lục phân, nạp các dòng mã này vào nằm trong bộ nhớ ROM của các ic lập trình là xong chuyện. Đơn giản quá phải không?
Tạm kết
Qua bài viết trên, Bạn thấy chỉ với một kiểu mạch điện không quá phức tạp, chúng ta đã biết cách dùng các ic lập trình để điều khiển nhiều dãy đèn nhấp nháy treo trong các công viên lớn, hay trang trí cho các nhà hàng ngoài trời. Tôi nghĩ công việc này cũng mang đến nhiều thu nhập cho các Bạn trẻ thích nghiên cứu ứng dụng của môn điện tử. Khi có dịp chúng ta sẽ tiếp tục mở rộng đề tài này. Chào!Bây giờ chúng ta sẽ chuyển qua một bài mới. Mong Bạn luôn thích vào trang web nhà phuclanshop.com để cùng nhau trao đổi, học tập và cầu tiến bộ.
Người soạn mời Bạn vào xem...
vivian.wang.yun
Kinh doanh linh kiện và thiết bị ngành điện tử và điều khiển điện