0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >LED应用 > 基于LPC2103微控制器实现LED数码管的显示设计方案

基于LPC2103微控制器实现LED数码管的显示设计方案

来源: elecfans
2020-05-14
类别:LED应用
eye 206
文章创建人 拍明

原标题:基于LPC2103微控制器实现LED数码管的显示设计方案

  SPI( Serial Peripheral Interface) 总线是Motorola公司提出的一个同步串行外设接口, 允许MCU与各种外围器件以串行方式进行通信、数据交换。SPI可以同时发出和接收串行数据, 它只需4条线就可以完成MCU与各种外围器件的通信。一般使用的4条线为:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。这些外围器件可以是简单的TTL移位寄存器、复杂的LCD显示驱动器、Flash、RAM、A/D转换器、网络控制器及其他MCU等。

  1、 LPC2103中的SPI功能特性

  LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,内部具有2个完全独立的SPI控制器,采用全双工的数据通信方式,最大数据位速率为外设时钟Fpclk的1/8。与SPI总线接口有关的专用寄存器有:(1)SPCR控制寄存器。该寄存器包含一些可编程位来控制SPI总线的功能,而且在数据传输之前进行设定,主要有时钟相位控制、时钟极性控制、主从模式选择、字节传输移动方向及SPI中断使能;(2)SPSR状态寄存器(为只读寄存器)。用于监视SPI功能模块的状态,包括一般性功能和异常情况。主要用途是检测数据传输是否完成,通过判断SPIF位来实现,其他位用于指示异常情况;(3)SPDR数据寄存器。为SPI提供数据的发送和接收,处于主模式时,向该寄存器写入数据,将启动SPI数据传输。串行数据的发送和接收通过内部移位寄存器来实现;(4)SPCCR时钟计数器寄存器。用于设置SPI时钟分频值,SPI处于主模式时,该寄存器用于控制时钟速率,即SPI总线速率,寄存器值为1位SCK时钟所占用的PCLK周期数,并且值为偶数,必须不小于8;(5)SPINT中断标志寄存器。包含了SPI的中断标志位,由数据传输完成及发生模式错误来引发。

  1.1 SPI电气连接

  利用SPI总线可在软件的控制下构成各种系统,如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。在大多数应用场合, 可使用1个MCU 作为主机来控制数据,并向1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。同一时刻只允许有1个主机操作总线。在数据传输过程中,总线上只能有1个主机和1个从机通信。在一次数据传输中,主机总是向从机发送1个字节数据,而从机也总是向主机发送1个字节数据[3]。图1为SPI在主模式下控制2个SPI从机的硬件连接图。

  

基于LPC2103微控制器实现LED数码管的显示设计

  1.2 SPI数据传输

  在SPI数据传输中,SPCR控制寄存器的CPHA和CPOL位作用非常关键。CPHA为时钟相位控制,该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束,该位为1,时钟前沿数据输出,后沿数据采样;为0,时钟前沿数据采样,后沿数据输出。CPOL为时钟极性控制,为1时,SCK为低电平有效;为0时,SCK为高电平有效。

  图2为SPI的4种不同数据传输格式时序,描述的是8位数据传输。该时序图水平方向分成3部分:(1)描述SCK和SSEL信号;(2)描述CPHA为0时的MOSI和MISO信号;(3)描述CPHA为1时的MOSI和MISO信号。SSEL信号为低电平,说明SPI工作在从模式。其中,MOSI和MISO信号中的bit1~bit8表示传输的第几位数据。

  

  2、 74HC595扩展I/O接口电路

  SPI是一个串行输入输出的接口,使用串转并的接口芯片可以实现扩展I/O口。74HC595芯片为一种常用的8位串转并移位寄存器芯片,本系统利用74HC595来驱动静态共阳LED数码管。74HC595的主要优点:具有数据存储寄存器,在移位过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。LPC2103工作在SPI主模式下。

  图3为74HC595逻辑图。图中,SI为串行数据输入引脚,用来连接LPC2103的MOSI功能引脚;SCK为移位寄存器的时钟输入,连接LPC2103串行时钟线SCK;

为清移位寄存器引脚;RCK为锁寄存器锁存时钟引脚;即输出触发端与SSEL连接;

为输出使能引脚;SQH为串行数据输出引脚,连接MISO;QA~QH引脚为并行输出。当

为高电平、

使能接低时,SCK产生一个上升沿,SI引脚当前电平值将在移位寄存器中左移1位,在下一个上升沿到来时移位寄存器中的所有位都会向左移1位,同时SQH引脚也会串行输出移位寄存器中的高位的值。当RCK产生上升沿时,移位寄存器的值将会被锁存到锁存器里,并从QA~QH引脚输出。

  

  图4为SPI接口与74HC595的连接原理图。其中QA~QH分别连接共阳LED数码管的8个段。在SPI输出1个字节的数据时,SSEL产生1个低电平,SPI主机串行地发该字节的各个位,各个位都依次被锁存在74HC595的移位寄存器内,当1个字节的数据传输完成后,SSEL由低电平变为高电平,从而使74HC595的移位寄存器的值被锁存到74HC595的锁存器并从其QA~QH引脚输出;在SPI输出1个字节数据的同时,74HC595移位寄存器之前的值也通过MISO引脚被SPI主机读回。

  

  3、 软件设计

  软件设计包括:进行I/O口初始化,设置SPI引脚连接,启用LPC2103的SPI 0总线,设置GPIO的P0.4、P0.5、P0.6、P0.7为SPI 0总线的SCK0、MISO0、MOSI0、SSEL0特殊功能,置74HC595片选端的I/O口为输出功能。其代码如下:

  PINSEL0=0x00005500; //设置SPI引脚连接

  PINSEL1=0x00000000;

  IODIR=HC595_CS; //设置片选端I/O口为输出

  3.1 SPI总线操作初始化

  图5为SPI总线操作流程图。使用LPC2103的SPI总线主模式下实现对74HC595的数据传输,用来驱动外围LED数码管。设置SPI时钟,在SPI主模式下,SPCCR寄存器控制SCK的频率,SPI速率为Fpclk / SPCCR。通过SPCR控制寄存器设置时钟相位、时钟极性、主模式控制、字节移动方向及SPI中断使能等。代码实现如下:

  

  Void MSpiIni(void)

  { SPI_SPCCR = 0x52; //设置SPI时钟分频

  SPI_SPCR = (0《《3)| //CPHA=0,数据再从SCK的第一时钟沿采样

  (1《《4)| //CPOL=1,SCK为低有效

  (1《《5)| //MSTR=1,SPI处于主模式

  (0《《6)| //LSBF=0,SPI数据传输MSB(位7)在先

  (0《《7); //SPIE=0,SPI中断被禁止

  }

  3.2 SPI总线主模式下数据发送过程

  首先选择从机,设置片选。选择74HC595为从机,置片选端SSEL为低有效。将发送的数据写入SPDR,发送出去。等待SPIF置位,即数据发送完毕。最后可从SPDR读取收到的数据。以下为发送函数:

  uint8 MSendData(uint8 data)

  { IOCLR=HC595_CS; //片选端,由LPC2103指定的I/O口置位

  SPI_SPDR=data;

  while(0==(SPI_SPSR&0x80)); //等待SPIF置位,即等待数据发送完毕

  IOSET=HC595_CS; //片选置高无效,结束发送

  return(SPI_SPDR); //返回接收到的数据

  }

  3.3 控制LED数码管主函数

  主函数使用LPC2103的SPI接口输出给74HC595,用来控制LED数码管显示。DISP_TAB[ ]为LED显示0-F字模的16进制码表。MSendData( )实现每一字节数据的发送。

  #define HC595_CS 0x00000100 //P0.8口为74HC595的片选

  uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

  int main(void)

  { uint8 rcv_data;

  uint8 i;

  PINSEL0=0x00005500; //设置SPI引脚连接

  PINSEL1=0x00000000;

  IODIR=HC595_CS; //设置LPC2103片选I/O口为输出功能

  MSpiIni( ); //初始化SPI接口

  while(1)

  { for (i=0;i《16;i++)

  {rcv_data=MSendData(DISP_TAB[i]); //发送显示数据

  DelayNS(50); //延时

  }

  }

  return(0);

  }

  基于SPI总线的数据通信技术已经广泛应用在MCU与各种外围设备的串行通信中。如存储系统、A/D转换系统、网络控制器和多MCU构成的分布式系统。本文给出了74HC595芯片驱动LED数码管显示的电路,采用SPI总线技术实现对LED显示的数据传输,方便快捷、准确性高、速度快,满足了复杂微控制系统对外围设备控制的要求。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案