⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 周立功SMARTARM2300源码 SPI
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:		Litiantian
** Modified date:		2006-01-04
** Version:
** Descriptions:		使LPC2300系列ARM的SPI工作在主机模式下,操作74HC595。
**------------------------------------------------------------------------------------------------------
** Modified by:			Wuzhijian
** Modified date:		2007-08-24
** Version:				
** Descriptions:		对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by:		Litiantian	
********************************************************************************************************/

#include  	"config.h" 

#define 	SPI_CS       	(1 << 16) 				// P0.16口为片选脚
#define		CE_Low()		(IO0CLR |=  SPI_CS)		// 选中从器件
#define     CE_High()		(IO0SET |=  SPI_CS)			

/* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */
const uint32 LED_TBL[] = 
{
	0x00, 0xFF,										// 全部熄灭后,再全部点亮
	0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,	// 依次逐个点亮
	0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,	// 依次逐个叠加
	0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01,	// 依次逐个递减
	0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,	// 两个靠拢后分开
	0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81	// 从两边叠加后递减
};

/********************************************************************************************************
** 函数名称:  Delay
** 函数功能:  长软件延时
** 入口参数:  dly	延时参数,值越大,延时越久
** 出口参数:  无
********************************************************************************************************/
void  Delay(uint32  dly)
{  
    uint32  i = 0;
    for (; dly > 0; dly--) 
        for (i = 0; i < 50000; i++);
}

/*******************************************************************************************
** 函数名称:  SPIInit															
** 功能说明:  初始化LPC2300系列ARM的SPI引脚及寄存器				
** 入口参数:  无																
** 出口参数:  无																
*******************************************************************************************/
void  SPIInit(void)
{  
	/* 初始化SPI引脚 */
	PINSEL0  =	0;		
   	IO0DIR 	|=  SPI_CS;		// 设置SPI的片选引脚
   	PINSEL0	|= 	0xc0000000;	// 设置P0.15脚为SCK脚
   	PINSEL1	 =	(0x03 << 2) | (0x03 << 4);	// 设置P0.17、P0.18引脚为SPI引脚
		
	/* 初始化SPI寄存器 */		               
   	S0SPCCR  =	0x48;		// 设置SPI时钟分频	
 	S0SPCR   = 	(0 << 2) |	// SPI控制器每次传输发送和接收8位数据。
 				(0 << 3) |	// CPHA = 0, 数据在SCK 的第一个时钟沿采样
 				(0 << 4) |	// CPOL = 0, SCK 为高有效
 				(1 << 5) |	// MSTR = 1, SPI 处于主模式
 				(1 << 6) |	// LSBF = 0, SPI 数据传输MSB (位7)在先
 				(0 << 7);	// SPIE = 0, SPI 中断被禁止
}

/************************************************************************
** 函数名称:  SPISndByte													
** 函数功能:  通过硬件SPI接口发送一个字节					
** 入口参数:  data															
** 出口参数:  无																
************************************************************************/
void SPISndByte(uint8 data)
{
   	uint32 temp = 0;
    CE_Low();
    S0SPDR = data;
    while (0 == (S0SPSR & 0x80));	// 等待SPIF置位,即等待数据发送完毕
	temp   = S0SPSR;				// 通过读S0SPSR,清除SPIF标志
	CE_High();
}

/********************************************************************************************************
** 函数名称:  main
** 函数功能:  用SPI驱动流水灯显示
** 入口参数:  无																
** 出口参数:  返回0则表明程序出错		
** 调试说明:  需用杜邦线将P0.15~P0.18分别与SCLK、/CS、MISO、MOSI短接。														
********************************************************************************************************/
int main(void)
{  	
    uint32 i = 0;
    
    SPIInit();
    			       
    while (1)	
    { 
    	for (i = 0; i < 42; i++)
	  	{   
	  		Delay(20);			
	    	SPISndByte(LED_TBL[i]);
	  	} 
    }
    return (0);

}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -