Microcontroller & 7-Segments LED Display Interfacing By adminstrator Rev1.0 Copyright© 2007
Power consumption is the common problem you will encounter when your electronics project requires multiple seven-segments LED display, the electrical current required by the entire circuit will be the double if not the triple! Another problem is that for each digit you need a driver - decoder IC, which means more cost, more area and larger PCB! This tutorial will show you how to utilize the multiplexing technique in order to use only one 7-segments driver chip and to reduce the power consumption. The main idea here is to connect all the seven-segment LED display units with each other in parallel and turning only one unit at a time for a certain - very small time, and then move to the next unit. Therefore, the power consumption will be as if you have only one 7segment! If each unit is turned on for a 1 or 2 millisecond, the human eye will see all the 7-segment units as if it turned on at one time! A microcontroller will control the entire operation; it will turn on one seven-segment unit by means of transistor, and send the appropriate BCD code to the 7447 driver chip to be displayed on that unit. After 2ms, this unit will turned off and move to the next unit, turn it on and send the appropriate BCD code to the driver chip. Tip: Since the display is multiplexed, you may feel that the display is not bright enough. To get a brighter display, use smaller values than 150Ω in schematic below. However, be sure that you will not exceed the absolute maximum rating for 7-segment display current. In this project, we will use three 7-segment common anode display units, to display the numbers from 0 to 255, connected to 7447 driver chip and controlled by an AT89C2051 ("8051 family") microcontroller by means of 2N3906 PNP transistor. The controller will take the binary number on port 1 as input, convert it into BCD data and display the corresponding decimal number on the 7-segment LED display unit. 7447 driver - decoder chip is connected to P3.0 to P3.3 and P3.5 to P3.7 pins are connected to the three PNP
transistors, as shown in the schematic below:
MOV
P1,#0FFH
;MAKE P1 INPUT
MOV
A,P1
;GET BINARY DATA
MOV DIV
B,#100 AB
;PREPARE FOR DIVISION ;DIVIDE BY 100
ORL
A,#10000000B ;INCLUDE CONTROL BIT
MOV
R0,A
;STORE 100'S DIGIT IN R0
MOV
A,B
;GET THE FRACTION
MOV DIV
B,#10 AB
;PREPARE FOR DIVISION ;DIVIDE BY 10
ORL
A,#00100000B ;INCLUDE CONTROL BIT
MOV
R1,A
;STORE 10'S DIGIT IN R1
MOV
A,B
;GET FRACTION
ORL
A,#00010000B ;INCLUDE CONTROL BIT
LOOP:
MOV
P3,A
;DISPLAY 1'S DIGIT
CALL
DELAY
;DELAY 1 MS
MOV
P3,R1
;DISPLAY 10'S DIGIT
CALL
DELAY
;DELAY 1 MS
MOV
P3,R0
;DISPLAY 100'S DIGIT
CALL
DELAY
;DELAY 1 1M
SJMP
LOOP
;KEEP DOING THIS
DELAY:
;1 MILLISECOND DELAY ROUTINE
MOV repeat: MOV repeatt: DJNZ
R4,#2
DJNZ
R4,repeat
R5,#230 R5,repeatt
RET
How to convert Binary number into BCD number? Since microcontroller input is in binary format, and the output should be in BCD format, we have to convert the binary data into BCD data. As you can see in the assembly code below, this conversion based onto the following algorithm: - Divide the binary number by 100, the result will be the BCD hundreds digit. - Take the remaining number ("fraction") from the previous division and divide it by 10, the result will be the BCD tens digit. - The remaining number ("fraction") from the previous division will be the BCD ones digit. Assembly program for controlling multi 7-segments LED display by using microcontroller at the right side.