预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

器件:74hc595.引脚说明:SDA:数据输入口。SH_CP:数据输入控制端,在每个SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第9个上升沿,数据开始从QS移出。ST_CP:数据置入锁存器控制端。Q0~Q7:数据并行输出端。数据从SDA口送入74HC595,在每个SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给ST_CP一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。实验原理及内部结构:如图所示:74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各自的时钟输入(SH_CP和ST_CP),都是上升沿有效。当SH_CP从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当ST_CP从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。74HC595最多需要5根控制线,即SDA、SH_CP、ST_CP、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可实现对LED的控制。数据从SDA口送入74HC595,在每个SH_CP的上升沿,SDA口上的数据移入寄存器,在SH_CP的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给ST_CP一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。。LED的亮度用PR1~PR3的阻值来控制。P1口的P115、P116、P117用来控制LED的显示,分别接到ST_CP、SH_CP和SDA脚。实验内容:按下图连接器件:程序如下所示:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitSDA=P1^1;sbitSHIFT=P1^2;sbitST=P1^0;#defineNOP_nop_()ucharled[]={0x5b,0x3f,0x3f,0x6f};ucharselect[]={0x0fe,0xfd,0xfb,0xf7};uchari=0;voidInit(){SDA=0;SHIFT=0;ST=0;}voiddelay(){ucharjj;for(jj=0;jj<200;jj++);while(jj--);}voiddisplay(uchardat){ucharii;ucharsdata=dat;for(ii=0;ii<8;ii++){if(sdata&0x80){SDA=1;elseSDA=0;sdata<<=1;SHIFT=0;NOP;NOP;SHIFT=1;NOP;NOP;}ST=1;NOP;NOP;ST=0;}voidmain(){Init();while(1){delay();delay();P2=select[i];display(led[i]);i=(i+1)%4;}}