c语言循环移位寄存器,[转载]关于移位寄存器74HC164的使用

移位寄存器74HC164多用于扩展IO口,下面是我使用时的心得:

74HC164的几点说明:

1.74HC164是串行输入,并行输出的;

2.它的并行输出其实是有延时的,只是延时时间小,可以认为是并行输出;

74hc164封装和真值表:

a4c26d1e5885305701be709a3d33442f.png

真值表中文解释说明

H-高电平 L

-低电平 X -任意电平

↑-低到高电平跳变(上升沿有效)

QA0,QB0,QH0 -规定的稳态条件建立前的电平

QAn,QGn -时钟最近的↑前的电平

看真值表的第三条和第五条:就可以知道,在保持clear为 H,

clock为↑状态下,AB都为H时,移位寄存器移入H,而当移位寄存器移入L时,必须令B为L,而A不受约束。所以可以把AB断相连再接入单片机数据端口。还有一种是A脚直接接高电平,B脚连入单片机数据端(P2_7)

时序图:

a4c26d1e5885305701be709a3d33442f.png

1. 首先区分输入输出信号。这里CLEAR、A、B、CLOCK是输入信号,Qa~Qh是输出信号;

2. 拿尺子开始扫描……

2.1.

首先可以看到CLEAR的下降沿后输出全部置低电平。结合后面的一个CLEAR下降沿,可以得出结论:当CLEAR输入下降沿时,无论A、B、CLOCK状态为何,输出全部拉低;

2.2.

尺子向右移动……找到Qa的第一个上升沿,可以看到这个上升沿是与CLOCK的上升沿对齐的,可以得出结论:输出在逻辑上与上升沿同步。此时将会注意到在此之前已经有3个上升沿但输出始终为低电平,尺子移动分别比较这3个上升沿,其A、B输入分别为10、01,于是可以得出结论:Qa

= A · B。

2.3.

尺子继续向右移动……可以分别看出在随后的CLOCK上升沿处,Qa全部按照A与B进行输出,从而验证以上结论。此外Qb~Qh的波形为Qa波形依次移位得到。

使用它的通用驱动C语言源代码:

//在每一个上升沿输出脚SDO状态移一位,CLK为时钟输入脚,CLK为输入脚,

//一般同连一脚,保持相同电平状态,与运算之后仍为该状态

void ind_light_disp(uint ind_num)//点亮哪一位,就置1

{

uint i,j;

i = 0x80;

for(j=0; j<8; j++)

{

if((i&ind_num) == i)

{

CLK = 0; //此处与下面的CLK = 1结合产生一个上升沿

SDO = 0;

CLK = 1;

}

else

{

CLK = 0;

SDO = 1;

CLK = 1;

}

i >>= 1;

}

delay(10000);//此处延时很重要,不延时可能会出现闪烁现象

}

一个使用电路图(点亮一些灯):

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值