Trước đây chủ đề đèn giao thông khá là “hot”, rất nhiều các đồ án làm về chủ đề này. Do đó mà đến thời điểm này cho dù đây không còn là vấn đề mới mẻ nữa nhưng nó vẫn mang một sức hút khá mạnh đối với các bạn học điện tử. Nhất là đổi với các bạn mới bắt đầu với vi xử lý.
Vì những lý do đó mà 7segone đã tổng hợp và thu thập có chọn lọc code đèn giao thông trên một số diễn đàn và trang mạng. Dưới đây sẽ là code đèn giao thông viết cho dòng chip 8051 viết bằng 2 ngôn ngữ – một dòng chíp thông dụng và cơ bản mà ai cũng từng nghe thấy khi bước chân vào vi xử lý.
Code Assembry
org 000H
sjmp main
org 0BH
mov TH0,0D8H
mov TL0,0EFH
inc R0
reti
xanh_1 equ 30H
do_1 equ 31H
xanh_2 equ 32H
do_2 equ 33H
vang equ 34H
main:
mov TMOD,#01
mov TH0,#3CH
mov TL0,#0AFH
clr TF0
setb TR0
mov IE,#82H
start:
mov P0,#21H ;xuat led do2 xanh1
mov xanh_1,#25
mov do_1,#36
mov xanh_2,#33
mov do_2,#28
mov vang,#3
mov R1,xanh_1
mov R2,do_2
loop_1:
mov R0,#0
lcall chuyen_BCD
again_1:
lcall xuat_led
cjne R0,#20,again_1
dec R2
djnz R1,loop_1
mov P0,#22H ;xuat led vang sang
mov R1,vang
loop_2: mov R0,#0
lcall chuyen_BCD
again_2:
lcall xuat_led
cjne R0,#20,again_2
dec R2
djnz R1,loop_2
mov P0,#0CH ;xuat led xanh2 do 1 sang
mov R1,do_1
mov R2,xanh_2
loop_3:
mov R0,#0EFH
lcall chuyen_BCD
again_3:
lcall xuat_led
cjne R0,#20,again_3
dec R1
djnz R2,loop_3
mov P0,#14H ;vang2 sang
mov R2,vang
loop_4:
mov R0,#0
lcall chuyen_BCD
again_4:
lcall xuat_led
cjne R0,#20,again_4
dec R2
djnz R1,loop_4
ljmp start
chuyen_BCD:
mov A,R1
mov B,#10
div AB
mov 50H,A
mov 51H,B
mov A,R2
mov B,#10
div AB
mov 52H,A
mov 53H,B
xuat_led:
mov DPTR,#123H
mov A,50H
movc A,@A+DPTR
mov P2,A
mov P3,#01H
lcall delay
mov P3,#00H
mov A,51H
movc A,@A+DPTR
mov P2,A
mov P3,#02H
lcall delay
mov P3,#00H
mov A,52H
movC A,@A+DPTR
mov P1,A
mov P3,#04H
lcall delay
mov P3,#00H
mov A,53H
movc A,@A+DPTR
mov P1,A
mov P3,#08H
lcall delay
mov P3,#00H
delay: mov R6,#100
lap: djnz R6,lap
ret
org 123H
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
end
Code C
Đối với code C dưới đây được viết với 2 Led 7 đoạn, cụ thể: Đèn đỏ sáng 20 giây, sau đó đèn xanh sáng 15 giây và cuối cùng đèn vàng sáng 5 giây.
Với các tính năng như vậy các bạn có thể linh hoạt thay đổi thời gian và có thể sửa đổi và thêm chức năng để ứng dụng vào đèn giao thông một cách dễ dàng.
#include"main.h"
#include"..\lib\delay.h"
unsigned char code Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
// Khai bao ket noi
sbit DEN_DO = P0^0;
sbit DEN_VANG = P0^1;
sbit DEN_XANH = P0^2;
#define LED_CHUC P2
#define LED_DVI P3
void main()
{
signed char i;
while(1)
{
// Den do
DEN_DO = 0; // Bat den do
DEN_XANH = 1;
DEN_VANG = 1;
for(i=20;i>=0;i--)
{
LED_CHUC = Code7Seg[i/10];
LED_DVI = Code7Seg[i%10];
Delay_ms(1000);
}
// Den xanh
DEN_DO = 1;
DEN_XANH = 0;
DEN_VANG = 1;
for(i=15;i>=0;i--)
{
LED_CHUC = Code7Seg[i/10];
LED_DVI = Code7Seg[i%10];
Delay_ms(1000);
}
// Den vang
DEN_DO = 1;
DEN_XANH = 1;
DEN_VANG = 0;
for(i=5;i>=0;i--)
{
LED_CHUC = Code7Seg[i/10];
LED_DVI = Code7Seg[i%10];
Delay_ms(1000);
}
}
}
Không có nhận xét nào:
Đăng nhận xét