GPIO Seven Segment Display Interface
Program Statement: Interface four seven segment displays on GPIO’s of ARM7 LPC2148 and write a
C code to display count 0000 to 9999 on them with appropriate delay.

Solution:

# include<lpc214x.h>

void delay(void);

main()

{
         char num[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
         char t,j,h,i,k;
         int m;
         char num1[] = {0x00,0x00,0x00,0x00};
         char num2[] = {0x70,0xb0,0xd0,0xe0};
         int y;
         IO0DIR = 0x00ffff00;
         for(y=1;y<10000;y++)
         {
                  if(y<10)
                  {
                           num1[3]=num[0];
                           num1[2]=num[0];
                           num1[1]=num[0];
                           num1[0]=num[y];
                  }

                else if (y>= 10 && y <100)
                {
                          num1[3]=num[0];
                          num1[2]=num[0];
                          num1[1]=num[y/10];
                          num1[0]=num[y-((y/10)*10)];
                }

                else if (y>= 100 && y <1000)
                {
                          num1[3]=num[0];
                          num1[2]=num[y/100];
                          num1[1]=num[(y-((y/100)*100))/10];
                          num1[0]=num[y-((y/100)*100)-(((y-((y/100)*100))/10)*10)];
                }

                else
                {
                       num1[3]=num[y/1000];
                       num1[2]=num[(y-((y/1000)*1000))/100];

LPC2148 Lecture Notes ENT505                 Prof. Anish Goel                            Page 1
num1[1]=num[(y-((y/1000)*1000)-((y/100)*100))/10];
                         num1[0]=num[y-((y/1000)*1000)-((y/100)*100)-((y/10)*10)];
                  }



         for(m=0;m<2;m++)
         {
                for(t=0;t<4;t++)
                {
                         IO0SET = (num1[t] << 16) | (num2[t] << 8);
                         delay();
                         IO0CLR = (num1[t] << 16) | (num2[t] << 8);
                         delay();
                }
         }
}
}

void delay(void)
{
        long int t;
        for(t=0;t<30000;t++);
}



Serial Interface UART Block
Problem Statement: Write a program to send a string on serial port UART0 of LPC2148 continuously
at 9600 baud.

Solution Clue:

#include"LPC214x.h"

void Initialize(void);

/* Macro Definitions */
#define TEMT (1<<6);
#define LINE_FEED 0xA;
#define CARRIAGE_RET 0xD;

/************************* MAIN *************************/
int main()
{
int i;
char c[]="Philips LPC";
Initialize();
/* Print forever */
while(1)
{
i=0;

LPC2148 Lecture Notes ENT505                 Prof. Anish Goel                             Page 2
/* Keep Transmitting until Null character('0') is reached */
while(c[i])
{
U0THR=c[i];
i++;
}
U0THR=LINE_FEED;
U0THR = CARRIAGE_RET;

/* Wait till U0THR and U0TSR are both empty */

while(!(U0LSR & (1<<6)))

{}
}
}
/*************** System Initialization ***************/
void Initialize()
{
/* Initialize Pin Select Block for Tx and Rx */
PINSEL0=0x5;
/* Enable FIFO's and reset them */
U0FCR=0x7;
/* Set DLAB and word length set to 8bits */
U0LCR=0x83;
/* Baud rate set to 9600 */
U0DLL=0x10;
U0DLM=0x0;
/* Clear DLAB */
U0LCR=0x3;
}
/*********************************************************/

16x2 LCD Program Hint
#include<lpc214x.h>
#include<STDIO.H>

#define line0 0x80
#define line1 0xc0


void delay(void);
void delay1(void);
void comdisp(char);
void comdata(char);
void display(char*,char);

main()
{
         unsigned int x;

LPC2148 Lecture Notes ENT505                   Prof. Anish Goel   Page 3
IO0DIR=0xffffffff;
       comdisp(0x38);
       comdisp(0xf);
       comdisp(0x6);
       comdisp(0x87);
       comdisp(0x1);
       display("LPC 2148",line0);
       display("ARM 7",line1+3);

}

void display(char *dat,char addr)
{
        char count;
        comdisp(addr);
        for(count=0;dat[count];count++)
        {
                 comdata(dat[count]);
        }
}
void comdisp(char lcddata)
{
        char word = 0xf9;
        char word1 = 0xf1;
        IO0SET = (lcddata<<8) | word;
        delay1();
        IO0SET = IO0SET && word1;
        delay();
        IO0CLR = 0x0000;
}
void comdata(char lcddata)
{
        char word = 0xf3;
        char word1 = 0xfb;
        IO0SET = (lcddata<<8) | word;
        delay1();
        IO0CLR = ~(IO0SET && word1);
        delay();
        IO0CLR = 0xffff;
}
void delay(void)
{
        int t;
        for(t=0;t<1;t++);
}
void delay1(void)
{
        int t;
        for(t=0;t<1;t++);
}



LPC2148 Lecture Notes ENT505              Prof. Anish Goel   Page 4

ARM 7 LPC 2148 lecture

  • 1.
    GPIO Seven SegmentDisplay Interface Program Statement: Interface four seven segment displays on GPIO’s of ARM7 LPC2148 and write a C code to display count 0000 to 9999 on them with appropriate delay. Solution: # include<lpc214x.h> void delay(void); main() { char num[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; char t,j,h,i,k; int m; char num1[] = {0x00,0x00,0x00,0x00}; char num2[] = {0x70,0xb0,0xd0,0xe0}; int y; IO0DIR = 0x00ffff00; for(y=1;y<10000;y++) { if(y<10) { num1[3]=num[0]; num1[2]=num[0]; num1[1]=num[0]; num1[0]=num[y]; } else if (y>= 10 && y <100) { num1[3]=num[0]; num1[2]=num[0]; num1[1]=num[y/10]; num1[0]=num[y-((y/10)*10)]; } else if (y>= 100 && y <1000) { num1[3]=num[0]; num1[2]=num[y/100]; num1[1]=num[(y-((y/100)*100))/10]; num1[0]=num[y-((y/100)*100)-(((y-((y/100)*100))/10)*10)]; } else { num1[3]=num[y/1000]; num1[2]=num[(y-((y/1000)*1000))/100]; LPC2148 Lecture Notes ENT505 Prof. Anish Goel Page 1
  • 2.
    num1[1]=num[(y-((y/1000)*1000)-((y/100)*100))/10]; num1[0]=num[y-((y/1000)*1000)-((y/100)*100)-((y/10)*10)]; } for(m=0;m<2;m++) { for(t=0;t<4;t++) { IO0SET = (num1[t] << 16) | (num2[t] << 8); delay(); IO0CLR = (num1[t] << 16) | (num2[t] << 8); delay(); } } } } void delay(void) { long int t; for(t=0;t<30000;t++); } Serial Interface UART Block Problem Statement: Write a program to send a string on serial port UART0 of LPC2148 continuously at 9600 baud. Solution Clue: #include"LPC214x.h" void Initialize(void); /* Macro Definitions */ #define TEMT (1<<6); #define LINE_FEED 0xA; #define CARRIAGE_RET 0xD; /************************* MAIN *************************/ int main() { int i; char c[]="Philips LPC"; Initialize(); /* Print forever */ while(1) { i=0; LPC2148 Lecture Notes ENT505 Prof. Anish Goel Page 2
  • 3.
    /* Keep Transmittinguntil Null character('0') is reached */ while(c[i]) { U0THR=c[i]; i++; } U0THR=LINE_FEED; U0THR = CARRIAGE_RET; /* Wait till U0THR and U0TSR are both empty */ while(!(U0LSR & (1<<6))) {} } } /*************** System Initialization ***************/ void Initialize() { /* Initialize Pin Select Block for Tx and Rx */ PINSEL0=0x5; /* Enable FIFO's and reset them */ U0FCR=0x7; /* Set DLAB and word length set to 8bits */ U0LCR=0x83; /* Baud rate set to 9600 */ U0DLL=0x10; U0DLM=0x0; /* Clear DLAB */ U0LCR=0x3; } /*********************************************************/ 16x2 LCD Program Hint #include<lpc214x.h> #include<STDIO.H> #define line0 0x80 #define line1 0xc0 void delay(void); void delay1(void); void comdisp(char); void comdata(char); void display(char*,char); main() { unsigned int x; LPC2148 Lecture Notes ENT505 Prof. Anish Goel Page 3
  • 4.
    IO0DIR=0xffffffff; comdisp(0x38); comdisp(0xf); comdisp(0x6); comdisp(0x87); comdisp(0x1); display("LPC 2148",line0); display("ARM 7",line1+3); } void display(char *dat,char addr) { char count; comdisp(addr); for(count=0;dat[count];count++) { comdata(dat[count]); } } void comdisp(char lcddata) { char word = 0xf9; char word1 = 0xf1; IO0SET = (lcddata<<8) | word; delay1(); IO0SET = IO0SET && word1; delay(); IO0CLR = 0x0000; } void comdata(char lcddata) { char word = 0xf3; char word1 = 0xfb; IO0SET = (lcddata<<8) | word; delay1(); IO0CLR = ~(IO0SET && word1); delay(); IO0CLR = 0xffff; } void delay(void) { int t; for(t=0;t<1;t++); } void delay1(void) { int t; for(t=0;t<1;t++); } LPC2148 Lecture Notes ENT505 Prof. Anish Goel Page 4