纯小白写的文章,如有问题,欢迎评论区讨论,反驳,指正。
如果你只想了解74HC595如何使用,建议只看2.3。
1、控制显示LED点阵屏的思路
通过查看普中A2开发板的原理图(图1)可以知道,通过P0(P0_0、P0_1…P0_7)口和DPa、DPb…DPh来控制哪一颗LED点亮。我这个开发板上的点阵模块没有按照他给的原理图上的方向来放,根据我的测试,我的LED点阵模块应该是他给的模块逆时针旋转180°的方向,如图2所示。
举个例子:如果我想让第三行第四列的灯被点亮,那么我需要给DPc通高电平(1),给P0_4通低电平(0),即可让目标灯点亮。
图1 普中A2开发板中LED点阵原理图:
图2 更改后的LED点阵原理图:
思路有了,那我们现在来看看怎么控制DPa、DPb…DPh和P0_0、P0_1…P0_7输入,P0口比较容易,这里就不做讲解。通过原理图可知,通过74HC595芯片来控制DPa、DPb…DPh的输入(图3),所以我们的问题就变成了如可去控制74HC595芯片,那下面就重点对74HC595芯片进行学习。
图3 74HC595(串转并)模块:
2、74HC595芯片的学习
2.1、74HC595芯片是什么?
我认为74HC595芯片是用三个输入端去控制N个输出端的芯片,同时让输出端一次性进行N个信号输出。我们这里只需要同时输出八个信号即可,如果想输出十六个、二十四个等等,那么就需要拓展74HC595(就是再接几块这样的芯片,一块能输出八个,需要多少个就外接多少个)。
如果理解困难的话,建议就把它认为成3个IO的输入去控制N个IO的输出即可。
2.2、74HC595芯片各引脚解释以及分析
在原理图中可以看到有带上划线的OE(不会打那个符号,下文简称为-OE-),RCLK,带上划线的SRCLR(下文简称-SRCLR-) ,SRCLK,SER,GND,VCC,QA,QB…QH,QH`。
-OE-:较为正式的叫法是“输出使能控制脚”,也就是使能按键。我理解的使能是,如字面意思,“使”谁“能”干什么,这里就可以理解为使74HC595能工作。因为带了个上划线,所以当给这个引脚通低电位的时候,那就是可以开始工作。
RCLK:较为正式的叫法是“锁存寄存器时钟”。其我理解的意思就是将要输出的数据给锁定起来,并且从实际功能上可以发现,当这里给到1后,会将数据输出出去,输出给QA,QB…QH。一般简写为”RCK“。
-SRCLR-:较为正式的叫法是“移位寄存器清零管脚”。我的理解是当给这里输入低电平时,它会将移位寄存器进行清零,因为原理图上给它直接通了高电位,我不知道怎么改,所以并没有测试出它的具体效果。
SRCLK:较为正式的叫法是”移位寄存器时钟,上升沿移位”。我的理解是将已经输入的数据进行移位,给即将准备输入的数据腾位置,让新的数据能够放进来。一般简写为”SCK“。
SER:较为正式的叫法是“串行输出端”。我的理解是就是即将要输入的数据,也就是要被储存起来的0或1。
GND:这个都肯定知道,逻辑地。
VCC:这个就是逻辑电源。
QA,QB…QH:较为正式的叫法是“并行数据输出端”,这个就是对应的输出,就是一次性将8位数据并行输出的。
QH’:可通过这里去拓展输出,需要输出多少位就外接8的倍数个。比如我需要输出24位,那我这一块本来就能输出8位,只需要再外接两块,加起来就是输出24位,具体怎么外扩,我没有工具,没有测试过,但从网上收集到的资料来看,只要将它们的RCLK、SRCLK、SER接起来即可。
单看以上这么多参数不是很好理解,那就举个例子,让上面这些数据能够连起来去理解。
我们用霰弹枪来举例,如果我们一把霰弹枪能够一次性打出八颗子弹(这里不是指一次性打出来八颗弹珠,而是一梭子就是八颗子弹,在不重新装弹的情况能够一次性打出八颗子弹),我们使用这把霰弹枪之前,需要先将保险丝打开,也就是将使能-OE-接地,使它能够被使用;接着就是给枪里装子弹,我们需要给霰弹枪弹舱一次装入一颗子弹,也就是对应的SER=0或1,然后再装下一颗,在装下一颗的时候,我们需要将上一颗子弹压入,这个压入的动作其实就对应我们的SCK,装载够八颗的时候,我们就可以发射了,按下扳机(就是RCK=1),枪响,子弹出膛,第一次射出也就是对应的QH,第二次就是QF,第三次…,八次射击完成,也就是数据发送完毕。如果一杆枪不够用的话,就是用工具将两杆枪连到一起,这里的工具就是QH‘,由于我没用过,所以下面不再举例。
这个例子是从别人的文章里学的,我给他完善了一下,又加入了我的理解,感觉还可以,原例子来自:https://blog.csdn.net/weixin_41445387/article/details/80500046
2.3、74HC595芯片工作原理
我感觉工作原理还是得配图来理解才可以,所以我们下面直接用图来看吧,见图4。
图4 74HC595芯片工作原理流程图:
其实我感觉上面这张图讲的挺详细的。
2.4、74HC595模块接线
通过图3可知,如果想让74HC595工作,那么就需要将OE接地,那么对应J24就应该如图5连接:
图5
2.5、74HC595对应的代码:
#include <REGX52.H>
#include <intrins.h>
sbit SCK = P3^6; //移位
sbit RCK = P3^5; //输出
sbit SER = P3^4; //输入
/**
*@effect: 这个方法一次将给到的Byte输出给被控制端
*@Byte: 要传出的8位数据
*@return: 无
**/
void send74HC595Byte(char Byte)
{
char i ;
for (i = 0;i < 8;i++)
{
SER = Byte>>7; //输入给74HC595
Byte = Byte<<1; //这两行代码可以从左向右去拿数据。如果输入的是1001 0110,那么第一次循环就会
//拿到1,第二次就会拿到0,第三次0,第四次1...
SCK = 1; //移位
_nop_();
_nop_(); //两个振荡(机器)周期,等下移位这个动作
SCK = 0; //结束移位
}
RCK = 1; //将数据输出
_nop_();
_nop_(); //两个振荡(机器)周期,等下输出这个动作
RCK = 0; //结束数据输出
}
3、51单片机上使用LED点阵屏
到此我们已经能够控制点阵屏上任意一盏灯的亮灭了,那么就简单的在单片机上显示个字母R吧。
根据图(图6)可知,亮标点的灯即可,那么程序如下:
图6
对应程序:
//LED点阵屏显示图形
//在LED点阵屏上显示字母R
//这里的具体知识我写在了博客上,见链接:
//
#include <REGX52.H>
#include <intrins.h>
#include <DELAY.H>
sbit SCK = P3^6; //移位
sbit RCK = P3^5; //输出
sbit SER = P3^4; //输入
/**
*@effect: 这个方法一次将给到的Byte输出给被控制端
*@Byte: 要传出的8位数据
*@return: 无
**/
void send74HC595Byte(char Byte)
{
char i ;
for (i = 0;i < 8;i++)
{
SER = Byte>>7; //输入给74HC595
Byte = Byte<<1; //这两行代码可以从左向右去拿数据。如果输入的是1001 0110,那么第一次循环就会拿到1,第二
//次就会拿到0,第三次0,第四次1...
SCK = 1; //移位
_nop_();
_nop_(); //两个振荡(机器)周期,等下移位这个动作
SCK = 0; //结束移位
}
RCK = 1; //将数据输出
_nop_();
_nop_(); //两个振荡(机器)周期,等下输出这个动作
RCK = 0; //结束数据输出
P0 = 0xff; //将P0口置为0,防止下次操作时,点亮整排灯
}
void main()
{
while(2>1)
{
send74HC595Byte(0xff);
P0_5 = 0;
send74HC595Byte(0x98);
P0_4 = 0;
send74HC595Byte(0x94);
P0_3 = 0;
send74HC595Byte(0x92);
P0_2 = 0;
send74HC595Byte(0x61);
P0_1 = 0;
}
}
效果见图7。
图7:
4、遇到问题(正在更新)
5、参考文章
CSDN:
①https://blog.csdn.net/weixin_41445387/article/details/80500046
②https://blog.csdn.net/qq_51523386/article/details/114282584
③https://blog.csdn.net/qlexcel/article/details/117159467
B站:
①https://www.bilibili.com/video/BV1Mb411e7re?p=21 (这个老师讲的特别好,强烈建议看一看他讲的这块,链接粘贴进去就是那个视频(9-1,9-2))文章来源:https://www.toymoban.com/news/detail-449386.html
6、第一次写博客杂感
大早上起来在翻74HC595的使用方法的时候,脑子一热,不如我自己总结个,再写一篇,虽知道这一写就是一整天,从早上弄到吃晚饭,甚至遇到问题的模块还没写(遇到的问题有点迷糊,还不能完美解决,所以没写出来)。
我看好多文章都谈到了“时序”,因为我是刚开始接触这些东西,所以时序图我并不懂(以前是纯机械的,所以数电模电,信号没学过),我就没往上加,哪位大神如果知道时序图怎么看,怎么学的话,我希望能私信我,给我些建议,要是大神太忙就算了,毕竟一个人的时间、精力就那么多嘛,哈哈。
码了一天,码了4500字,这比写论文还累啊,就为了把74HC595模块为了搞的比较明白,花了三四天的时间,有点小痛苦,哈哈,但回过头来看还是挺值的。文章来源地址https://www.toymoban.com/news/detail-449386.html
到了这里,关于【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!