Interfacing 7segment with LPC2148


Guys today we are going to interface seven segment display with our LPC2148. First we will go into some basic information about seven segment.

It’s so called because it have seven blocks. Each block have a led and different pin to control the block as seen in the figure below

Here I am using a common cathode display which means that the ground pin is common to all the segments and to turn on a segment/led, we have to give high to the respective pin.
In case the display is  common anode, which means that Vcc is common to all the segments, and to turn on a segment/led, we have to give low to the respective pin.
Now let’s say I want to display 1, so I can do that by turning on segments ‘b’ and ‘c’ (you can also turn segments ‘f’ and ‘e’ on). To display 5, I have to turn on ‘a’, ‘f’, ‘g’, ‘c’ and ‘d’ and so on.
That’s all you need to know for seven segment display. It’s very simple and used widely.
Some Insight into the code-
We are going to do only basic operations here.
IODIR0 |= 0xff;     //  setting Port0.0 to Port0.7 as output
IOSET0 |= 0x06;    // to set segments 'b' and 'c' as high to display 1.
                      and so on.

I’ll use timer0 to use delay of 500ms between two corresponding digits.


 #include <lpc214x.h>
#include "pll.h"
#include "timer0.h"

char display[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67};

int main ()
PINSEL0 = 0;    // setting pinsel for normal io operations
IODIR0 |= 0xff;    // setting Port0.0 to Port0.6 as output
pll_init ();    // initialising pll
VPBDIV = 0x00;    // setting pclk = 15 MHz
timer0_init (15000);  // initialsing timer at 1ms as base
while (1)
for (int i=0;i<10;i++)
IOSET0 |= display[i];    // display digits 0 to 9
timer0_delay (500);    // delay of 500 ms
IOCLR0 |= display[i];    // clear pins




You can buy me a coffee sensor 🙂

download the CODE below

0 0 vote
Article Rating
Notify of
1 Comment
Oldest Most Voted
Inline Feedbacks
View all comments
Would love your thoughts, please comment.x