资源描述:
《595驱动数码管》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、器件: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
2、一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。实验原理及内部结构:精品学习资料可选择pdf第1页,共5页-----------------------如图所示:74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各自的时钟输入(SH_CP和ST_CP),都是上升沿有效。当SH_CP从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当ST_CP从低到
3、高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。74HC595最多需要5根控制线,即SDA、SH_CP、ST_CP、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可精品学习资料可选择pdf第2页,共5页-----------------------实现对LE
4、D的控制。数据从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的阻
5、值来控制。P1口的P115、P116、P117用来控制LED的显示,分别接到ST_CP、SH_CP和SDA脚。实验内容:按下图连接器件:程序如下所示:#include#include#defineucharunsignedchar精品学习资料可选择pdf第3页,共5页-----------------------#defineuintunsignedintsbitSDA=P1^1;sbitSHIFT=P1^2;sbitST=P1^0;#defineNOP_nop_()ucharled[]={0x5b
6、,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;精品学习资料可选择pdf第4页,共5页--------
7、---------------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;}}精品学习资料可选择pdf第5页,共5页-----------------------