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); } } }
Nguồn:http://www.7segone.com/
Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn
đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON
HotLine: 0972 800 931 or 0938 838 404 Ms Duyên