利用74hc595配合单片机做流水灯
利用74hc595协作单片机做流水灯:如有问题请加qq:97192511 验证信息:随风 对于一个单片机学习者,硬件和软件是分不开的,本人刚毕业不久,对于单片机有一点个人心得,现在把这些共享给大家,希望大手子勿喷。 首先来介绍下74hc595这个芯片:芯片资料网上许多,这些我就不单独粘出来了,稍后我会说下这个芯片的运用方法以刚好序图的理解。 上面这张图是我在做毕业设计时用到的原理图,其中Q0到Q7分别接LED,VCC接5V电源,GND接地P0.1,P0.2,P0,.3分别接51单片机的P0.1,P0.2,P0,.3。这三个io口分别加了上拉电阻,关于上拉电阻,以后我会再讲解。 下面来看看这个芯片的各个引脚的功能: Q0--Q7: 八位并行输出端。 Q7 : 级联输出端。可以将它接下一个595的SI,由于这个LED只用到一个595,所以将其悬空。 DS: 串行数据输入端。 74595的限制端说明: MR(10脚): 低点平常将移位寄存器的数据清零。 SHCP(11脚):上升沿时数据寄存器的数据移位。下降沿移位寄存器数据不变。 STCP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。 OE(13脚): 高电平常禁止输出(高阻态)。假如单片机的引脚不惊慌,用一个引脚限制它,可以便利地产生闪耀和熄灭效果。比通过数据端移位限制要省时省力。 74HC595各个引脚的功能: Q1~7 是并行数据输出口,即储寄存器的数据输出口 Q7 串行输出口,其应当接SPI总线的MISO接口 STcp 存储寄存器的时钟脉冲输入口 SHcp 移位寄存器的时钟脉冲输入口 OE的非 输出访能端 MR的非 芯片复位端 Ds 串行数据输入端 这幅图比较重要,是这个芯片的时序图,对于单片机来说,寄存器和时序图是特别重要的。 其中SHCP对应的是P0.3,STCP对应的是P0.2,DS对应的是P0.1.。 依据原理图,我们只用到了DS,STCP,SHCP三个引脚,下面我们来看看这三个引脚原委怎么样工作,看时序图要从左往右渐渐看 SHCP: 该引脚始终处于上升下降状态,所以叫做时钟信号,箭头向上表示上升沿有效。前面也说过,这个引脚的功能是上升沿时数据寄存器的数据移位。下降沿移位寄存器数据不变。 STCP: 对于这个引脚我们短暂不管他,一会讲到Q0和Q7的时候再看。现在我们先知道他的功能是上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。 DS: 我们也先不管,和Q0到Q7一起说。 OE和MR: 这两个引脚我们没有用到,所以对于这个原理图来说可以不用管,假如用到的话再去看其时序。 Q0到Q7: 数据输出端,上升沿表示该位输出,我们留意到,Q0到Q7是轮番输出的,而且是在SHCP从低到高的时候输出,也就是在上升沿输出,与此同时我们可以看到每一次Qx输出的时候STCP是从高到低改变。 下面是一个对应最上面的原理图的流水灯程序。595常用的是限制数码管和流水灯。 #include #include #define uchar unsigned char #define uint unsigned int sbit stcp=P0^2; sbit shcp=P0^3; sbit ds=P0^1; uint z,x,y; uchar bai,shi,ge; /********************************************* 延时程序,时间1ms *********************************************/ void delay(z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /********************************************* Led显示子程序 功能:led循环显示 简介:ds为八位数据,在shcp每一个上升沿从高位起先 按位输入,在stcp每一个上升沿进入存储寄存器 *********************************************/ void led() { uchar i,temp,j; temp=0 xa0; for(j=1;j<9;j++) { for(i=0;i<8;i++) { ds=temp //按位与,依次将高位送入 shcp=0; //由低到高 shcp=1; stcp=1; stcp=0; //由高到低 temp<<=1; //左移 } delay(500); temp=0 xa0; temp=_cror_(temp,j);//右移函数 } } void main() { while(1) { led(); } }