0% found this document useful (0 votes)
8 views3 pages

ExptNo9 - SPI

The document provides a code implementation for interfacing an 8-digit seven-segment display with an LPC2148 microcontroller using the MAX7221 SPI-based multidigit driver. It includes functions for initializing SPI, sending commands and data, and configuring the PLL for clock settings. The main function sets up the display and enters an infinite loop to maintain the operation.

Uploaded by

Pranav Aiwale
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views3 pages

ExptNo9 - SPI

The document provides a code implementation for interfacing an 8-digit seven-segment display with an LPC2148 microcontroller using the MAX7221 SPI-based multidigit driver. It includes functions for initializing SPI, sending commands and data, and configuring the PLL for clock settings. The main function sets up the display and enters an infinite loop to maintain the operation.

Uploaded by

Pranav Aiwale
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Interfacing of 8 digit seven segment display to LPC2148 using SPI based multidigit driver

MAX7221

#include<lpc21xx.h>

unsigned char spi_rec;

void spi_ini(void);
void spi_tr1(unsigned int x);
char spi_re(void);
void spi_tr(unsigned char cmd,unsigned char data);
void spi_str(unsigned char *str);

int ar0[10]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };


int ar1[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};

void pll(void);

void delay_ms(unsigned int x);

int main()
{
//int i;
PINSEL0=0X00000000;
IO0DIR=0XFFFFFFFF;
pll();
spi_ini();
spi_tr(0x0a,0x0f);
spi_tr(0x09,0xff);
spi_tr(0x0b,0x07);
spi_tr(0x0c,0x01);
spi_tr(0x01,0x08);
spi_tr(0x02,0x07);
spi_tr(0x03,0x06);
spi_tr(0x04,0x05);
spi_tr(0x05,0x04);
spi_tr(0x06,0x03);
spi_tr(0x07,0x02);
spi_tr(0x08,0x01);
while(1)
{
}
}

void pll()
{
/*PLL IS CONFIGURED TO GET 60HZ pCLK*/
PLLCFG=0X24; // SET PSEL=2 AND MSEL=5
PLLCON=0X01; //PLL IS ACTIVE BUT NOT YET CONNECT
PLLFEED=0XAA; //FEED SEQUENCE
PLLFEED=0X55; //FEED SEQUENCE
while((PLLSTAT & 0X400)==0); //WAIT FOR FEED SEQUENCE TO BE INSERTED
PLLCON=0X03; // PLL HAS BEEN ACTIVE AND BEING CONNECTRD
VPBDIV=0X00; // SET PCLK SAME AS FCCLK
PLLFEED=0XAA; //FEED SEQUENCE
PLLFEED=0X55; //FEED SEQUENCE
}

void spi_ini()
{
PINSEL0 |=0x1500; /* P0.4, P0.5, P0.6, P0.7 are set as SCK, MISO, MOSI and GPIO */
//IODIR0 |= 0X80; /* SSEL is output */
//IOSET0 |=0X80; /* set SSEL to high */
S0SPCCR=8; /* SPI clock prescale register minimum value is 8. */
S0SPCR=0x0030; /* Device select as master, Set data to 8-bit, CPOL = 0, CPHA = 0*/
}

void spi_tr1(unsigned int x)


{
S0SPDR =x;
while ( !(S0SPSR & 0x80) ); /* Wait until the SPIF bit is set to indicate trabsfer complete */
}

char spi_re()
{
while ( !(S0SPSR & 0x80) ); /* Wait until the SPIF bit is set to indicate trabsfer complete */
spi_rec= S0SPDR;
return spi_rec;
}

void spi_str(unsigned char *str)


{
while(*str!='\0')
{
spi_tr1(*str);
str++;
}
}

void spi_tr(unsigned char cmd,unsigned char data)


{
IO0CLR=(1<<7); //enable transmission
spi_tr1(cmd);
spi_tr1(data);
IO0SET=(1<<7); // disable transmission
}
void delay_ms(unsigned int x)
{
int i;
while(x--)
{
for(i=0;i<100;i++);
}
}

You might also like