SPI主机实验---7段数码管显示

发布者:caijt最新更新时间:2016-07-18 来源: eefocus关键字:SPI  7段数码管显示 手机看文章 扫描二维码
随时随地手机看文章
1、功能:在7段数码管上显示一些字符

2、原理图:

SPI主机实验---7段数码管显示 - liuxin_arm - 嵌入式工程师成长之路

3、程序清单:

/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name:   main.c
** Last modified Date:  2011-04-24
** Last Version:  1.0
** Descriptions:  The main() function example template
**------------------------------------------------------------------------------------------------------
** Created by:   lxliu
** Created date:  2011-04-24
** Version:    1.0
** Descriptions:  The original version
**
********************************************************************************************************/
#include "config.h"

#define     HC595_CS   (1<<29)       //P0.29为74HC595的片选

/*************************************************************************
** 函数名称:DelayNS()
** 函数功能:长软件延时
** 入口参数:dly延时控制值,值越大,延时越长
** 出口参数:无
*************************************************************************/

void DelayNS(uint32 dly)
{
 uint32 i;
 for(;dly>0;dly--)
  for(i=0;i<50000;i++);
}

/*************************************************************************
** 函数名称:MSPI_Init()
** 函数功能:初始化SPI接口,设置为主机
** 入口参数:无
** 出口参数:无
*************************************************************************/
void MSPI_Init(void)
{
 PINSEL0 = (PINSEL0 & (~(0xFF<<8)))|(0x55<<8);
 S0PCCR = 0x52;                   
 S0PCR = (0<<3)|
       (1<<4)|
       (1<<5)|
       (0<<6)|
       (0<<7);
     
}


/*************************************************************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据
** 入口参数:data   待发送的数据
** 出口参数:返回值为读取的数据
*************************************************************************/
uint8  MSPI_SendData(uint8 data)
{  
    IO0CLR = HC595_CS;           // 片选74HC595
   
    S0PDR = data;
    while(0==(S0PSR & 0x80));  // 等待SPIF置位,即等待数据发送完毕
   
    IO0SET = HC595_CS;
    return(SPI_SPDR);
}


/*   此表为LED0~~F及LPC的字模  */
uint8 const DISP_TAB[19] = {
//   0      1         2     3      4       5       6      7      8      9    
 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,
//   A    B         C        D    E      F
 0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E,
//   L     P    C
  0xC7, 0x8C,0xC6 };

/* 此表为LPC2131字模 */
//                                               L     P         C        2     1         3        1
uint8 const LPC2131[7] = { 0xC7, 0x8C, 0xC6, 0xA4, 0xF9, 0xB0, 0xF9};
/********************************************************************************************************
** 函数名称:main()
** 函数功能:使用硬件SPI,74HC595驱动控制7段数码管显示。  
**     先显示0~F的字模,然后显示LPC2131字样。
********************************************************************************************************/
    uint8  rcv_data; 
int main (void)
{  
    uint8  i; 
 
    PINSEL0 = 0x00005500;                   // 设置SPI管脚连接
    PINSEL1 = 0x00000000;
    IO0DIR = HC595_CS;
   
    MSPI_Init();                     // 初始化SPI接口
    while(1) 
    {  
     /* 显示0~F字模 */
        for(i=0; i<16; i++)
        {
            rcv_data = MSPI_SendData(DISP_TAB[i]); // 发送显示数据
            DelayNS(80);                         // 延时
        }
        /* 显示LPC2131字样 */
                for(i=0; i<7; i++)
        {
            rcv_data = MSPI_SendData(LPC2131[i]); // 发送显示数据
            DelayNS(80);                         // 延时
        }

    }
 
    return 0;
}

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

 

4、Debug

     (1)寄存器程序中使用的时候应该加上编号:SPCCR,SPCR应该写为:S0PCCR,S0PCR

       (2)  S0PCCR,S0PCR这两个寄存器不要写错了。

             在调试的时候,程序一直停在 while(0==(S0PSR & 0x80));  这一行,仔细检查这一行代码,并没有发现错误,最后发现是S0PCCR,S0PCR这两个寄存器写反了

关键字:SPI  7段数码管显示 引用地址:SPI主机实验---7段数码管显示

上一篇:有关I2C占空比寄存器设置问题
下一篇:SD卡读取bmp图片移植调试完成

推荐阅读最新更新时间:2024-03-16 15:00

通过SPI接口协议实现DSP与其它设备的通信
摘要:介绍了SPI通信协议,给出了将TI公司生产的TMS320C5402 DSP用于SPI协议通信的串口配置方法和接口电路设计,同时给出了串口McBSP的配置程序。 关键词:多通道缓冲串行口 McBSP TMS320C5402 μPD780308 SPI DSP 1 引言 随着信息技术革命的深入和计算机技术的飞速发展,DSP技术也正以极快的速度被应用到科技和国民经济的各信领域。在很多工程开发设计中,由于要求实现单片DSP与单片DSP、多片DSP芯片以及及其它处理芯片之间的通信,因此,怎样更高效、 更便捷的实现这些通信,已成为广大DSP应用者首先要解决的一个问题。 本文根据笔者在工程应用和调试方面用TI的DSP TMS3
[应用]
兆易创新推出全新SPI NOR Flash —GD25WDxxCK产品系列
业界领先的半导体供应商兆易创新GigaDevice(股票代码 603986)宣布全新的SPI NOR Flash --- GD25WDxxCK产品系列正式量产,它是业界首款采用1.5mm´1.5mm USON8最小封装,并支持1.65V至3.6V的低功耗宽工作电压的产品。作为GigaDevice久经市场验证的1.8V、2.5V、3.0V SPI NOR Flash产品系列的有效补充,这款全新的宽电压、超小尺寸产品系列进一步丰富了GigaDevice的Flash Memory产品线,为物联网、可穿戴、消费类及健康监测等对电池寿命和紧凑型尺寸要求严苛的应用提供了优异的选择。 “随着新兴应用的发展,尤其是电池供电的应用领域,愈来愈多
[电源管理]
基于ARM板s3c2440---SPI协议
SPI简介 SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200。 简单的说,就是SPI是一种告诉的协议,相当于IIC,只是IIC是两根线(时钟线SCL,数据地址线SDA)而SPI是四根线(SCK时钟信号,DO输出线,DI输入线,CSn片选信号),同样可以挂在多个SPI高速设备。 数据传输 数据传输由CPOL,CPHA两个控制器决定,CPOL决定电平启示状态是低电平还
[单片机]
基于ARM板s3c2440---<font color='red'>SPI</font>协议
SPI接口的工作原理及优缺点分析
  SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。   1. 接口   SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:   1) SCLK:串行时钟,用来同步数据传输,由主机输出;   2) MOSI:主机输出从机输入数据线;   3) MISO:主机输入从机输出数据线;   4) SS:片选线,低电平有效,由主机输出。   在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三
[嵌入式]
<font color='red'>SPI</font>接口的工作原理及优缺点分析
如何通过一个差分接口来延长SPI总线
本文将介绍如何通过一个差分接口来延长串行外设接口 (SPI) 总线,而这可以应用在支持远程温度或压力传感器的系统的设计。 在SPI应用中,主控器件和受控器件间的距离相对较近,而信号也通常不会传递到印刷电路板 (PCB) 之外。SPI信号类似于单端、晶体管-晶体管逻辑 (TTL) 信号,根据应用的不同,运行速率可高达100Mbps。一条SPI总线由四个信号组成:系统时钟 (SCLK) ,主器件输出从器件输入 (MOSI) ,主器件输入从器件输出 (MISO) 和芯片选择 (CS) 。主控器件提供SCLK,MOSI和CS信号,而受控器件提供MISO信号。图1显示了一条标准SPI总线的总线架构。 图
[嵌入式]
如何通过一个差分接口来延长<font color='red'>SPI</font>总线
AVR MEGA8 通过 SPI 总线读写 93C46
AVR MEGA8 通过 SPI 总线读写 93C46,主要是练习SPI总线的使用而已,93C46的驱动相当的简单,这个代码也很好写,调试也不难,冷藏了一段时间的代码了,也懒得整理,copy出来就算了,随便看看就算了。 /* * 项目:SPI总线驱动93C46 * 平台:AVR MEGA8 + WinAVR * 作者:Etual / Etual@163.com * 日期:2008-8-18 */ SPI访问部分代码: ///////////////////////////////////////////////// // pin assignment #define SS PB2 //chip se
[单片机]
STM32F030C6+nrf24l01 SPI配置
void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI1_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //PB13:SCK PB14:MISO PB15:MOSI GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_
[单片机]
基于增强型SPI接口的大容量Flash扩展实现
1 引言 随着信息时代的到来,各种信息的集成和交互越来越频繁。运动控制系统中需要处理和存储的信息量也与日俱增,大部分运动控制系统的核心器件MCU自身已经集成了较大容量的存储器(与以前MCU相比),但仅仅依靠MCU自身的存储器一般很难满足系统对大容量存储的要求,因此必须找到高效的方法实现对系统存储容量的扩展。 SPI是一个高效、数据位数可编程设置的高速输入/输出串行接口,几乎所有MCU生产厂商都提供对SPI接口的支持,目前高速SPI接口的时钟频率已达到60MHz甚至更高,SPI接口一般只用4根连接线即可完成所有的数据通讯和控制操作,因此不占用MCU的数据总线和地址总线,极大的节约了系统的硬件资源,是一种经济实用的扩展系统
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved