logo

Loading...
  • Home
  • Categories
  • Manufacturers
  • Products
  • PROJECTS
  • TUTORIAL
  • CODE LIBRARY
  • Blogs
  • Contact us
  1. Home
  2. Blogs
  3. TRAFFIC LIGHT CONTROLLER

TRAFFIC LIGHT CONTROLLER

4 July 2011
4 min read
131 views

Traffic Lights usually contain three lamps: red, amber and green. Here is a small project wherein you can control the Traffic Light of a four way intersection using a single controller. Consider four roads ROAD A, B, C and D and their corresponding signals red, amber and green each represented by a LED. So in all there are 12 LED’s each of which is connected to a controller pin.

In this code the duration of all green signals are the same and the duration of all amber signals are same. This duration is defined by DURATION_GREEN which is 10 seconds and DURATION_AMBER which is 2 seconds.

For generating delay we will be using Timer 0 in 16 bit INTERRUPT mode to generate One second delay. We load TH0 & TL0 with a specific value & on every clock cycle TH0 & TL0 increments by 1 and when the TIMER overflows from FFFF to 0000 a Timer0 overflow flag is set & interrupt is generated. The maximum delay that can be generated using TIMER 0 in any mode is 65535 clock cycles & since we are using 12MHz crystal the maximum delay is 65.535ms. But we require 1second delay. So we generate 50ms delay using TIMER 0 & when 20 such delays have been generated we come to know that one second has elapsed. So basically 0.05ms X 20 =1 second. So we use a RAM location “multiplier” load it with 20 and whenever the timer overflows the ram location multiplier isdecremented by one. Thus when multiplier becomes zero we come to know that one second has elapsed.

Another RAM location “current_signal_duration” is used it contains the total number of seconds for which the current signal has to be turned ON. This RAM location is decremented every time one second has elapsed so when current_signal_duration becomes zero we come to know that it’s time to Turn OFF the current signal and move to the next signal.

//Define the Port PINS


a_red bit p0.0

a_amber bit p0.1

a_green bit p0.2

b_red bit p0.3

b_amber bit p0.4

b_green bit p0.5

c_red bit p0.6

c_amber bit p0.7

c_green bit p2.7

d_red bit p2.6

d_amber bit p2.5

d_green bit p2.4

//Define RAM Locations


multiplier equ 30h

current_signal_duration equ 31h

//DEFINE BIT ADDRESS

signal_f bit 00h ;if 1 then switch to next signal

//DEFINE Constants

MULTIPLIER_DEFAULT DATA 20

DURATION_GREEN DATA 10

DURATION_AMBER DATA 2

//TIMER SUBROUTINES

timer:

push acc

push b

push psw

push dph

push dpl

clr TF0

mov th0,#3ch

mov tl0,#0B0h

call check_timer

pop dpl

pop dph

pop psw

pop b

pop acc

reti

check_timer:


djnz multiplier,r1_check_timer

mov multiplier,#MULTIPLIER_DEFAULT ;One second ended reload value

djnz current_signal_duration,r1_check_timer

setb signal_f ;signal duration ended move to nxt signal

r1_check_timer:

ret

//MAIN Program


org 0000h

jmp main

org 000bh

jmp timer

org 0030h

main:


mov multiplier,#MULTIPLIER_DEFAULT

setb EA ;Enable Interrupt

setb ET0 ;Enable timer 0 Interrupt

clr signal_f

mov th0,#3ch

mov tl0,#0B0h

setb tcon.4 ;start timer

loop:

mov current_signal_duration,#DURATION_GREEN

clr a_green

setb a_amber

setb a_red

setb b_green

setb b_amber

clr b_red

setb c_green

setb c_amber

clr c_red

setb d_green

setb d_amber

clr d_red

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_AMBER

setb a_green

clr a_amber

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_GREEN

setb a_amber

clr a_red

clr b_green

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_AMBER

setb b_green

clr b_amber

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_GREEN

setb b_amber

clr b_red

clr c_green

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_AMBER

setb c_green

clr c_amber

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_GREEN

setb c_amber

clr c_red

clr d_green

jnb signal_f,$

clr signal_f

mov current_signal_duration,#DURATION_AMBER

setb d_green

clr d_amber

jnb signal_f,$

clr signal_f

ajmp loop

$include(timer.inc)

End

For learning how to interface LED to 8051 microcontroller please click here

Back
newsletter image

Join our mailing list

Get bits and bytes of noise free Information

*No Noise(spam) only Information

Get In Touch

Office

DNA Solutions, Flat no 1, Raja Jeet Recidency, p no 61 Sr no 102, Wadala Shivar Indira nagar, Nashik, 422009, Maharashtra, India

Shop

FH11-12, Thakker Bazar NEW CBS, Nashik, 422002, Maharashtra, India

Got Questions? Call us at

Neha (Rest of India): 7972667515, 8412906903

Prachi (Nashik): 8669102120

site@example.com

Information

  • FAQs
  • About Us
  • Shipping & Delivery
  • Returns & Cancellation
  • Privacy Policy
  • Payment Information
  • Terms & Conditions
  • Contact us
  • Products
  • Blogs
Cities Cover

Shivaji Nagar | Namrup | Thane | Pilani | Ballia | Darbhanga | Kannur | Junagadh | Jaisalmer | Jamshedpur | Itanagar | Amravati | Navi Mumbai | Durgapur | Dahod | Pimpri | Madurai | Agra | Mangalore | Kalyan | Port Blair | Davangere | Kochi | Pondicherry | Mathura | Kalyan | Raigad | Thane | Nagpur | Bhubaneswar

*Note : We provide GST Tax Bill for claiming Tax Input Credit. GST bill will be provided in the name of DNA Solutions (GST No: 27BGPPS9522M1ZF) or DNA Solutions Private Limited (GST No: 27AAFCE7605R1Z).

COPYRIGHT © 2026 DNA Solutions, INDIA . ALL RIGHTS RESERVED.

footer-logos