Bài viết này nói về một mạch đếm đối tượng/đếm người đơn giản bằng cách sử dụng vi điều khiển 8051. Vi điều khiển AT89S51 thuộc họ 8051 được sử dụng ở đây. Mạch này có thể đếm số đối tượng đi qua một đường, số người đi qua một cổng/cửa và cũng có thể được sử dụng cho nhiều mục đích khác. Mạch có thể được chia thành hai phần chính, đó là phần cảm biến và phần hiển thị.
Phần cảm biến. Phần cảm biến bao gồm một đèn LED siêu sáng (có tiêu điểm), một cảm biến ánh sáng phụ thuộc vào trở kháng (LDR), bộ khuếch đại LM324 và các thành phần điện trở và tụ kèm theo. Đèn LED được đặt ở một bên của cửa và cảm biến LDR được đặt ở phía bên kia để ánh sáng từ LED chiếu trực tiếp lên LDR. Như bạn biết, trở kháng của LDR có mối quan hệ nghịch đảo với độ mạnh của ánh sáng chiếu vào nó. Điều chỉnh điện trở cố định R14 được điều chỉnh sao cho điện áp qua LDR dưới 1,5V khi nó được chiếu sáng. Điện áp này (được ghi nhãn là A trong sơ đồ mạch) được kết nối đến đầu vào ngược của opamp, được kết nối như một bộ so sánh với điện áp tham chiếu 1,5V (được đặt bằng R15 và R16). Tụ C1 được sử dụng để loại bỏ nhiễu hoặc bất kỳ tín hiệu nào gây ra việc kích hoạt sai. Kháng R13 được sử dụng để kiểm soát dòng qua LED.
Khi ánh sáng chiếu vào LDR, điện áp qua nó sẽ thấp hơn điện áp tham chiếu, vì vậy đầu ra của opamp vẫn ở mức cao. Khi tia sáng bị chặn, điện áp qua LDR vượt qua điện áp tham chiếu, vì vậy đầu ra của opamp giảm và nó chỉ ra sự đi qua.
Phần hiển thị. Đầu ra của opamp được đưa vào chân INTO (ngắt 0) của vi điều khiển. Vi điều khiển được lập trình để đếm số xung lưỡi âm nhận được tại chân INT0 và hiển thị nó trên màn hình hiển thị bảy đoạn ba số.
Sơ đồ mạch.
ORG 000H
SJMP INIT
ORG 003H // starting address of interrupt service routine (ISR)
ACALL ISR // calls interrupt service routine
RETI
INIT: MOV P0,#00000000B
MOV P3,#11111111B
MOV P1,#00000000B
MOV R6,#00000000B
MOV DPTR,#LUT
SETB IP.0 // sets highest priority for the interrupt INT0
SETB TCON.0 // interrupt generated by a falling edge signal at INT0 pin
SETB IE.0 //enables the external interrupt
SETB IE.7 //enables the global interrupt control
MAIN: MOV A,R6
MOV B,#100D
DIV AB
ACALL DISPLAY
SETB P1.0
ACALL DELAY
ACALL DELAY
MOV A,B
MOV B,#10D
DIV AB
ACALL DISPLAY
CLR P1.0
SETB P1.1
ACALL DELAY
ACALL DELAY
MOV A,B
ACALL DISPLAY
CLR P1.1
SETB P1.2
ACALL DELAY
ACALL DELAY
CLR P1.2
SJMP MAIN
ISR: INC R6 //interrupt service routine
RET
DISPLAY: MOVC A,@A+DPTR // display sub routine
CPL A
MOV P0,A
RET
DELAY: MOV R3,#255D // 1mS delay
LABEL: DJNZ R3,LABEL
RET
LUT: DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END
Chương trình được viết sao cho nó liên tục hiển thị giá trị hiện tại trong thanh ghi R6 trên màn hình hiển thị bảy đoạn ba số. Mỗi khi có một xung lưỡi âm hợp lệ (ngắt) tại chân INT0, chương trình nhánh đến quy trình phục vụ ngắt (quy trình con ISR). Quy trình con ISR tăng giá trị trong thanh ghi R6, sau đó quay trở lại vòng lặp MAIN và màn hình được cập nhật bằng giá trị mới.
Ghi chú. Toàn bộ mạch có thể được cung cấp điện từ nguồn DC 5V.
Cảm biến LDR phải được đặt trong một hộp để ánh sáng từ đèn LED chỉ chiếu vào nó
Hotline: 0979 466 469