第二十篇SPI与74HC595.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二十篇SPI与74HC595

第二十篇 SPI与74HC595 SPI,全称为Serial Peripheral interface,意思是“串行外围设备接口”,主要应用在:EEPROM,FLASH,实时时钟,AD转换器灯。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。 传输原理:每个SCK边沿(上升沿或下降沿,需要事先设定),MISO或MOSI会被采样一次,连续八次,就可以传输一个字节。 其接口配置示例如下: 下面介绍LPC2000的SPI接口: 以LPC2103的SPI0为例: 引脚的对应关系为:SCK0——P0.4,MISO0——P0.5,MOSI0——P0.6,SSEL0——P0.7 LPC2000的SPI接口的功能模块如下图: 图中五个功能分别对应着5个寄存器: SPCR——SPI Control Register,SPI控制寄存器,用于控制SPI的功能 SPSR——SPI Status Register,SPI状态寄存器,用于显示当前SPI的状态。 SPDR——SPI Data Register,SPI数据寄存器,用于发送和接收数据,向其写入字节,就会自动发送,接收数据也从它里面取出。 SPCCR——SPI Clock Counter Register,SPI时钟计数器寄存器,用于控制主机SPI总线速率SCK。Fspi=Fpclk/SPCCR SPINT——SPI Interrupt Flag,SPI中断标志寄存器,包含SPI接口的中断标志。 展开来说,我们会用到: CPHA——SPCR[3],时钟相位控制位,CPHA=0, 数据在SCK的第一个时钟沿采样;CPHA=1, 数据在SCK的第二个时钟沿采样。我们这里用前者。 CPOL——SPCR[4],控制时钟的极性,为0时:空闲时为低电平,有效时为高电平。反之依然,如下图: MSTR——SPCR[5],控制模式选择:MSTR=1,处于主模式;MSTR=0,处于从模式。 LSBF——SPCR[6],控制字节的移动方向,LSBF=1,低位在先传;LSBF=0,高位在先传。 SPIE——SPCR[7],中断使能,这里我们不用中断。 SPIF——SPSR[7],SPI传输完成标志,为1时,表示一次传输完成。 由于74HC595不是标准的SPI器件,MISO0和SSEL0未用到,但是我们仍然可以用SPI总线向74HC595发送数据。 程序如下: //***************************************************************************************************** //功能:LPC2103利用SPI接口对74HC595进行写操作 //说明: //用两片74HC595(U1和U2)分别控制四位数码管(U1)的显示和选位(U2), //为了减少连线,两片74HC595串联(U2的Q7输出到U1的MOSI),这样连续向U2的MOSI写 //两个字节(第一个是要显示的数字,第二个是位选),就可以显示了。这样LPC2103 //用三个口(SCK连SH_CP,MOSI连DS,P0.7连ST_CP)就可以操作此四连共阴数码管。 #includeLPC2103.H #define SCK 14??//移位时钟 #define MOSI 16???//数据 #define ST_CP 17??//字节输出时钟 #define u8 unsigned char void SPI_Init(void); void display(u8 data,u8 n); void send(u8 byte); void delay(unsigned int i); //注意:这是共阳数码管的码表,但用在共阴数码管上,两者之间转换容易,把数据取反即可 u8 table[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; int main() { ??? SPI_Init(); ??? while(1) ??? { ??????? display(0x5,1);??????? //在1位显示数字5 ??????? delay(1000000); ??????? display(0xA,2); ??????? delay(1

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档