Thông báo! Chúng tôi đang cố gắng khôi phục lại các link download, các bạn vui lòng tải lại sau (dự kiến 10/12/2022 hoàn thành). Cảm ơn các bạn!

Code + Mạch mô phỏng đèn giao thông

TuanPi | 24.3.15 | | |
.
Code c mạch đèn giao thông
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

Code c mạch đèn giao thông
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

7segone | File .Hex 7segone | File Mô phỏng

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.
Code c mạch đèn giao thông

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);
  }
 }
}

Lên đầu trang