595驱动数码管.docVIP

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

器件: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 #define uchar unsigned char #define uint unsigned int sbit SDA?=???P1^1; sbit SHIFT? =? P1^2; sbit ST? =? P1^0; #define NOP _nop_() uchar led[] = {0x5b,0x3f,0x3f,0x6f}; uchar select[] = {0x0fe,0xfd,0xfb,0xf7}; uchar i=0; void Init(?) { ? SDA = 0; ? SHIFT = 0; ? ST = 0; } void delay() { ?uchar jj; ?for(jj=0;jj200;jj++); ?while(jj--); } void display(uchar dat) { ? uchar ii; ? uchar sdata=dat; ? for(ii=0;ii8;ii++) { ?if(sdata0x80) { SDA=1; ? else SDA = 0; ??? sdata=1; ??? SHIFT =0; ??? NOP; ??? NOP; ??? SHIFT = 1; ?? NOP; ?? NOP; ? } ? ST = 1; ? NOP; ? NOP; ?

文档评论(0)

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

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

1亿VIP精品文档

相关文档