您的位置 首页 软件

LPC ARM运用SPI总线操控8个LED灯

下面给出一个LPCARM7通过SPI总线控制8路流水等的实例,让大家对SPI总线传输、发送数据有一个清晰的了解。电路图如下:开发板通…

下面给出一个LPC ARM7经过SPI总线操控8路流水等的实例,让我们对SPI总线传输、发送数据有一个明晰的了解。

电路图如下:

开发板经过SPI总线操控74HC595驱动8盏LED灯
程序清单如下:
#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);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/274669.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部