单片机芯片解密#74+#74

第一部部分用于快速查阅使用,详细的使用见文章第二部分
14脚:DS(SER),串行数据输入引脚
13脚:OE,& 输出使能控制脚,它是低电才使能输出,所以接GND
12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。
11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。
10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。
9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit&挤出去&,就是从这里出去的。用于595的级联。
Qx:并行输出引脚
VCC:2V~6V,5V最好
I Qn:+- 35mA
第一个从SER送入的bit将会从Q7出去。
74HC595介绍
一张图片和一段文字,哪种信息传递方式给人的第一视觉冲击是最大的?我想大家心中都有答案。
这也是我文章标题的来由。废话就到这里,下面我就用图片来分析595这个chip。
74HC595的最重要的功能就是:串行输入,并行输出。3态高速位移寄存器(好腻害的说)
595里面有2个8位寄存器:移位寄存器、存储寄存器
移位寄存器
在我看来,74HC595的移位寄存器工作方式就像shou qiang弹夹。但是子弹的发射(移位寄存器中的数据转储到存储寄存器),又像是【散x弹】(因为是并行输出嘛)
为什么说和弹夹很像呢?
1、串行输入,已进入的位数据依次下移(所以叫移位寄存器) & & & & | & & 子弹也是一颗一颗上的,先上的子弹,被后上的慢慢往下压。
2、第一个输入的位,是并行输出的最后一个位 & & & & & & & & & & & & &| & & 最先进入弹夹的子弹,最后射出。
74HC595的引脚图
14脚:DS,又叫SER &英文全称是:Serial data input ,顾名思义,就是串行数据输入口。
595的数据来源只有这一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。
假如,我们要将二进制数据 输入到595的移位寄存器中,下面来上一张动态图,模拟了前2个位输入的情景。
这个图有7帧,做了很久,毕竟不是做美工的。可谓术业有专攻,闻道有先后啊,还是要虚心学习 :)
这个数据完全输入后是这样的
我们还要注意一个脚:11脚,(shift register clock input) &移位寄存器时钟引脚。上升沿有效。
首先我们要介绍这个引脚的作用。
我们知道51单片机的工作离不开晶振,他使CPU的工作步调稳定有序,就像跑步时喊1,2,1的那个人。
那么这里的位移寄存器时钟也是同样的道理,当一个新的位数据要进来时,已经进入的位数据就在移位寄存器时钟脉冲的控制下,整体后移,让出位置。
上升沿:电平从低到高的那个过程。移位寄存器时钟在上升沿这个过程中才起作用。
存储寄存器
到这里我们已经大致讲了怎么上子弹,也把子弹上齐了。下面来将怎么将子弹打出去,也就是怎么将移位寄存器的数据转移到存储寄存器
存储寄存器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接受带到我们
开始输入的一个字节的数据。所谓存储寄存器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要595不断电,也没有新 的
数据从移位寄存器中过来,数据就一直不变且有效。新的数据过来后,存储寄存器中的数据就会被覆盖更新。
12脚: (storage register clock input ) &存储寄存器时钟
数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。
自此,我们已经讲解了一个595正常情况下的工作流程,下面写一个程序,让8个LED保持&亮暗亮暗.... 间隔的效果。
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 & 分别接 &8个LED正极
14脚SER 接 单片机P3.4
11脚SCK 接 单片机P3.6
12脚RCK接 &单片机P3.5
13脚OE接GND
10脚MR接VCC
9脚闲置不接
#include&reg51.h&
#include&intrins.h&
typedef unsigned char
typedef unsigned int uint;
/**********函数声明********************/
void SendTo595(uchar byteData);/***********************************/
sbit SER = P3^4;
//p3.4脚控制串行数据输入
sbit SCK = P3^6;
//串行输入时钟
sbit RCK = P3^5;
//存储寄存器时钟
void main()
SendTo595(85);
//85的二进制:
//功能:发送一个字节的数据给595,再并行输出
void SendTo595(uchar byteData)
for(;i&8;i++)
SER = byteData&&7;
//大家自己考量这2句
byteData= byteData&&1;
//上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
//变为低电平,为下次准备
/*位移寄存器数据准备完毕,转移到存储寄存器*/
//上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
见识到595的厉害了吧。138译码器通过3个输入口控制8个输出口,而且还只能是特定的8个输出值,
而595只用了一个输入口就可以输任意的8位数据。可谓短小精悍。
啥?你觉的1位控制8位输出还不够?让你的595串联起来吧!打造成加特林机关枪。
在上面的程序中用到的9脚,没用起作用,如果要让2个595串联起来的话,就需要它了。
想一下,我们将移位寄存器的8个位填满后,再往移位寄存器中塞一个会怎么样?也许你想到了。
对!移位寄存器的最后一个位数据会被挤出去,从哪里出去?就是从9脚输出的。如果我们把第一个595的
9脚连接到第二个的串行数据输入脚SER,那么,就形成了595的级联。这样,如果我们用2个595组合成了一个新的超级595,
这个草鸡595的移位寄存器和存储寄存器的容量都翻倍了,1口控制16口,有木有!你还可以继续级联下去!
最后还遗留2个 595 的脚没说
13脚OE &输出使能控制脚,如果它不工作,那么595的输出就是高阻态,595就不受我们程序控制了,这显然违背我们的意愿。
OE的上面画了一条线,表示他是低电平有效。于是我们将他接GND。
10脚MR ,位移寄存器清空脚,他的作用就是将位移寄存器中的数据全部清空,这个很少用到,所以我们一般不让他起作用,他
也是低电平有效,于是我们给他接VCC。
终于写完了,希望帮到大家。以后还会继续讲解其它的74系列的逻辑芯片,尽请期待!
如有错误欢迎指出。 :)
Views(...) Comments()51单片机+74HC154芯片+74HC595点阵 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机+74HC154芯片+74HC595点阵
16:39:40  
做了一个64*16的点阵,仿真上已经实现了,还没有焊接,麻烦看一下实际电路做出来可能存在什么问题,该如何改进,谢谢
16:52:31  
要加74HC245这个比较重要
16:55:37  
走过路过 走过路过
09:30:26  
要加74HC245这个比较重要
现在已经焊接好了,非常暗,接了上拉电阻,不过效果依然很差,还有什么办法可以了
11:03:44  
修改限流电阻,灯暗说明电流太小
10:10:35  
16*16的没成功。。。
10:11:59  
话说你不放个原理图什么的怎么看啊!
12:38:05  
灯暗是电流不够,限流电阻调小点,或者单独供一个大电流的电源,根据你的LED参数来匹配。
6个问题&&&&&&&&5745个浏览
6个问题&&&&&&&&3208个浏览
8个问题&&&&&&&&4698个浏览
每天选一个需要解决的问题,大家一起来帮忙。
授人玫瑰,手有余香
本次讲解答的问题例举:
1、NB-IoT有哪些技术特点和难点?
2、NB-IoT技术对物联网市场将带来什么样的影响。
3、NB-IoT物理层有哪些组成部分?
4、NB-IoT技术如何实现低功耗?
Powered by51单片机+74HC595驱动数码管程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机+74HC595驱动数码管程序
这里是电路图:
完整的源码和图纸下载地址:&
下面是51单片机驱动74hc595芯片的程序:&&&&&
#include &reg52.h&&&&&&&&&&&&&&&&&&&&&&&&&&& //包含51单片机的头文件
#include &stdio.h&
#define uint unsigned int
#define uchar unsigned char
//sbit sin_595&&& =P1^0;
//sbit rclk_595&& =P1^1;
//sbit sclk_595&& =P1^2;
//sbit s_clr&&&&& =P1^3;
sbit& a_cp_595&& =P2^4;&&&&& //串行移位时钟脉冲& sh_cp_595
sbit& b_cp_595&& =P2^3;&&&&& //输出锁存器控制脉冲 st_cp_595
//sbit& _oe_595&&& =P1^5;&&&&& //8位并行输出使能/禁止(高阻态)
sbit& ds_595&&& =P2^2;&&&&& //串行数据输入
extern uchar& datas[6];&&& //存放6个数码管的显示数字
uchar& ledcode[]={
&0xC0,&&// 0
&0xF9,&&// 1
&0xA4,&&// 2
&0xB0,&&// 3
&0x99,&&// 4
&0x92,&&// 5
&0x82,&&// 6
&0xF8,&&// 7
&0x80,&&// 8
&0x90,&&// 9
&0x88,&&// A
&0x83,&&// B
&0xC6,&&// C
&0xA1,&&// D
&0x86,&&// E
&0x8E&&// F
void delay(uint z)
&uint t1,y;
&for(t1=z;t1&0;t1--)
&&for(y=110;y&0;y--);
void led_display(void)
&& uchar i,j;
&& uchar bdata movebit[6];
&&& //_oe_595=0;&&&&&&&&&&&&&&&&&&&&&&&& //选中数码管
&& for(i=0;i&6;i++)
&& movebit[i]=ledcode[datas[i]];
& // P1=0;
&& delay(1);
&& for(i=0;i&6;i++)&&&&&&&&&&&&&&&&&&&&&&&& //数据移位
&& test=movebit[i];
&& for(j=0;j&8;j++)
&& testb=test&0x80;
&& test=test&&1;
&& if(testb)
& & ds_595=1;
&ds_595=0;
&a_cp_595=1;
& &a_cp_595=0;
&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //数据移位&
& &b_cp_595=0;
& &b_cp_595=1;
& &b_cp_595=0;
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved

我要回帖

更多关于 单片机 74ls138 的文章

 

随机推荐