保持寄存器和输入寄存器的区别_串行移位寄存器74HC595

74HC595是8位串行移位寄存器,其中带有移位寄存器和存储寄存器,这两个寄存器分别采用不同的时钟控制。串行数据输入到内部8位移位寄存器然后再并行输出。

01

74HC595内部结构

566b857fbf71ae828e15166924c0cf44.png

如图所示为74HC595的内部结构图,首先14引脚DS为串行移位数据线,串行数据由DS处输入。11号引脚SH_CP为移位寄存器的时钟输入。12号引脚ST_CP为存储寄存器的时钟输出。Q7'为级联输出端,Q0-Q7为8位数据输出。

ef803e36459f869903a470134c406971.png

接下来对74HC595的各引脚功能进行描述。

Q0~Q7:8位数据输出。

OE:使能端,高电平时禁止输出,此处直接接地。

MR:数据清零端,低电平时将移位寄存器清零,此处直接接高。

Q7':级联输出端,级联时接下一个595的DS端。

DS:串行数据输入端。

ST_CP:存储寄存器的时钟输入。上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中数据保持不变。应用时通常将ST_CP置为低电平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。

SH_CP:移位寄存器的时钟输入。上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变。

02

74HC595时序图

4658a05583cdd8857ca278e989a70181.png

例如要传输一个8位数据:01001100,DS为串行数据输入端,只有在SH_CP为下降沿的时刻数据DS波形才能变化,上升沿时读数据,如图中的开始处SH_CP为下降沿,此时传输DS第一个数据0,接下来一直到结束端处传输完成最后一个0。然后只有在ST_CP为上升沿时便会将移位寄存器中的数据copy一份存储到存储寄存器中,实现串并转换。如图中ST_CP处的上升沿此时检测到上升沿便开始读取串行传输的数据。

而移位的原理如下图所示:

3a92bf9639aac555ee4deb03b41b50f9.png

写入的数据在寄存器中依次右移,采用8个时钟移位,1个时钟周期进行存储。在D7端那个将溢出的数据便是在D7'输出的数据,此处D7'输出的数据也就是级联时下一个74HC595的输入数据。

0f102974d7b9e28553cea439a1dc5e93.png

如图所示为两片74HC595的级联图。两片74HC595级联,共用SH_CP移位寄存器的时钟线和ST_CP存储寄存器的时钟线。

03

程序撰写

ddf242c54cb8ff387a1243af825e0477.png

首先便是对各端口进行定义,至于sel位选信号和seg的段选信号是接下来要控制数码管所用到的,位选是选择哪一只数码管进行显示,段选是要显示的内容,此处便不加描述。

7aa4c0ed2fec21a303fef1579038b0cf.png

这部分程序是四分频,FPGA的外接晶振频率为50MHz,此处对其四分频然后使用。

3b694366346bac8faeb73152298fd07e.png b5d18a15dfc25efa2118de0026563996.png

这部分便是使用状态机来传输数据,首先是模拟SH_CP和ST_CP的时序,然后在SH_CP的每一个下降沿处发送一个数据,最后在结尾处给ST_CP一个上升沿,读取数据实现串并转换。

b3eeb9bcd9f6f3a289e8513287e063da.png

仿真部分的程序如图所示,位选信号sel给一个0000_0001,段选信号给一个1100_0000,接下来看仿真图。

1f025608d2e037e3451c835a84808bcf.png

图中的3个光标处,前两个光标之间传输的便是seg的信号,后两个光标之间的信号之间传输的便是sel的信号。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页