LPC2103 spi口驱动74595 8位数码管显示实验

电子说

1.2w人已加入

描述

LPC2103 spi口驱动74595 8位数码管显示实验

//

//系统设置: Fosc、Fcclk、Fcco、Fpclk

//#define Fosc 12000000

//#define Fcclk (Fosc * 5)

//#define Fcco (Fcclk *4)

//#define Fpclk (Fcclk / 4) * 4

//Fpclk=60000000

接线说明: 使用 3根 1P杜邦线连接核心板 P04/P06/P07口接底板 JP26

具体接线为:P04-SHCP,P06-DS , P07-STCP。

跳线说明:短接 J70

实验现象:数码管先逐段扫描,然后显示0-9

*************************************************************

#define IN_MAIN

#include "config.h"

#include "LPC2103_lian.H"

#include "ADC.h"

#include "ExtInterrupt.h"

#include "I2C.h"

#include "IAP.h"

#include "Legacy_GPIO.h"

#include "RTC.h"

#include "SPI.h"

#include "SSP.h"

#include "Time.h"

#include "UART.h"

#include "WatchDog.h"

#include "ISR.h"

#pragma import(__use_no_semihosting_swi)

#define rclk_0() IO0CLR=IO0CLR|p07 //74959锁存时钟

#define rclk_1() IO0SET=IO0SET|p07

const uint8 tb[]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,

};

const uint8 smg_text[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};

const uint8 smg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x00,};

// 0 1 2 3 4 5 6 7 8 9 all

const uint8 smg_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,};

uint8 c;

uint8 d;

void IRQ_Exception(void)

{

}

//**********************函数定义************************

void delay(uint32 dly);

void spiinit(void);

uint8 senddata_mspi(uint8 uiData);

//**********************主函数**************************

void Main(void)

{

TargetInit(VPBDIV_DATA, PLLCFG_DATA, MAMTIM_DATA); // don't delete

while((PLLSTAT & (1 << 10)) == 0); // can delete

p04_sck0;

p06_mosi0;

p05_miso0;

p07_gpio; //将端口设置为gpio口

gpio_out(p07); //设置为输出

delay(1);

spiinit();

for(d=0;d<8;d++)

{

for(c=0;c<8;c++)

{

rclk_0();

senddata_mspi(smg_bit[d]);

senddata_mspi(smg_text[c]);

rclk_1();

delay(200);

}

}

while(1)

{

for(c=0;c<11;c++)

{

rclk_0();

senddata_mspi(smg_bit[8]);

senddata_mspi(smg[c]);

rclk_1();

delay(200);

delay(200);

delay(200);

}

}

}

//*********************初始化SPI接口********************

void spiinit(void)

{

SPI_SPCCR=8; //设置SPI时钟分频,该值必须为大于等于8的偶数(该值越大,spi时钟越低)

SPI_SPCR =0<<2 | //每次传输8位数据

0<<3 | //CPHA=0,第一边沿采样.CPHA=1,第二边沿采样

0<<4 | //spi总线空闲时,CPOL=1,时钟为高电平.CPOL=0,时钟为低电平

1<<5 | //MSTR=1,设置为主模式

0<<6 | //LSBF=0,SPI传输MSB在先

0<<7 ; //SPIE=0,SPI中断禁止

}

//******************spi主机发送接收数据*****************

uint8 senddata_mspi(uint8 uiData)

{

SPI_SPDR=uiData;

while((SPI_SPSR&0x80)==0); //等待数据发送完毕

return(SPI_SPDR);

}

//************************延时**************************

void delay(uint32 dly)

{

uint32 i;

for(;dly>0;dly--)

{

for(i=0;i<5000;i++);

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分