技术标签: 74HC595 级联 单片机
首先介绍一下74HC595工作原理
不同厂家不同的型号的74HC595,它的符号命名会有所不同,但引脚规则是统一适用的,下面按我自己理解总结一下。
如下图:
13引脚:OE串行数据输入端使能端,低电平有效,接低电平/跳线帽接地。
11引脚:上升沿到达时(SRCLK由0变1),从最高位开始依次输出8位数据。
12引脚:RCLK为输出存储器锁存时钟线,只需记住当RCLK由0到1,即上升沿到达(产生一个正脉冲)时,进来的8位数据分别从1~7引脚输出。实现串行信号----->并行信号。
14引脚:相当于搬运工,串行数据输入;
10引脚:主复位,低电平有效,实验时将它接高电平。
脑字还是懵懵的?似懂非懂?那换一种通俗点的解释:
就像做冰糖葫芦,假设1串冰糖葫芦有8个枣(命名为0~7号),当11引脚上升沿到达时,拿出0号枣准备往棍子最底端串,即串行输入。
当12引脚上升沿到达时,0号枣被送往棍子下方第0个位置,14引脚代表将枣送入的那股推力(手),即搬运工的作用。
当8个枣(实验中指8位二进制数中的0和1)全部被串行输入到木棍上时。每个枣被依次串入的间隔时间就是上升沿之间的延迟,用两个_nop_();函数表示
等8个枣全部被串入时,即做完一串冰糖葫芦,传输完成,吃冰糖葫芦当然是横着吃(串转并)(有谁竖着吃…跳过此步>_>),最后一个吃到的就是第0号串入的枣,即串入的0–7号枣,对应"吃"/输出的7----0号枣。
这下应该清楚了74HC595“串入” “并出”的概念吧
例如:点亮左上角第一个二极管:DPh高电平,P0^7低电平
忙里偷闲做的【8*8】点阵 “爱心”“米字图” 亲测有效
#include "reg51.h" //注意这里使用“reg52.h"可能会出现重复定义错误,因为52.h中已定义过RCLK
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 ledduan[]={
0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};//每一列的7~0二极管状态
u8 ledwei[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//第1列到第8列位选
void delay(u16 i)
{
while(i--);
}
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++) //重复发送ledduan[i]中的段码,使每一列对应二极管亮
{
SER=dat>>7; //从最高位开始发送
dat<<=1; //左移依次左移1位,发送次高位,
SRCLK=1; //0-1,上升沿到达,发送一位数据(段码中的1位二进制值)
_nop_();
_nop_(); // 内置延时函数
SRCLK=0; //初始化SRCLK,重回低电平,为下一个上升沿输入做准备
}
RCLK=1; //RCLK从0到1,上升沿到达,输出前面接收的段码数据
_nop_();
_nop_();
RCLK=0; //初始化RCLK,重回低电平,为下一个上升沿输出做准备
}
void main()
{
u8 i;
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=ledwei[i]; //位选
Hc595SendByte(ledduan[i]); //发送段选数据
delay(100); //时间足够短,视觉暂留
Hc595SendByte(0x00); //消//消隐,将dat置回初值隐
}
}
}
#include "reg51.h" //注意这里使用“reg52.h"可能会出现重复定义错误,因为52.h中已定义过RCLK
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 ledduan[]={
0x99,0x5a,0x3c,0xff,0xff,0x3c,0x5a,0x99};//每一列的二极管状态
u8 ledwei[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//第1列到第8列
void delay(u16 i)
{
while(i--);
}
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)//重复发送ledduan[i]中的段码,使每一列对应二极管亮
{
SER=dat>>7; //从最高位开始发送
dat<<=1; //左移依次左移1位,发送次高位,
SRCLK=1; //0-1,上升沿到达,发送一位数据(段码中的1位二进制值)
_nop_();
_nop_(); // 内置延时函数
SRCLK=0; //初始化SRCLK,重回低电平,为下一个上升沿输入做准备
}
RCLK=1; //RCLK从0到1,上升沿到达,输出前面接收的段码数据
_nop_();
_nop_();
RCLK=0; //初始化RCLK,重回低电平,为下一个上升沿输出做准备
}
void main()
{
u8 i;
while(1)
{
for(i=0;i<8;i++)
{
P0=ledwei[i];
Hc595SendByte(ledduan[i]);
delay(200); //时间足够短,则图像看起来就是一个完整的图案
Hc595SendByte(0x00);//消隐,将dat置回初值
}
}
}
若发现错误,欢迎指出,共同进步,谢谢!
文章浏览阅读480次。P1075 [NOIP2012 普及组] 质因数分解题目描述已知正整数nn是两个不同的质数的乘积,试求出两者中较大的那个质数。输入格式一个正整数nn。输出格式一个正整数pp,即较大的那个质数。输入输出样例输入 #1复制21输出 #1复制7java:package com.kk.luogu;import java.util.Scanner;//P1075 [NOIP2012 普及组] 质因数分解public class P1075 { public stati_【noip2012普及组】质因数分解c++
文章浏览阅读116次。基于PysimpleGUI+pymysql建立的简单管理系统(6)_pysimplegui 管理系统
文章浏览阅读1.4w次,点赞7次,收藏58次。Jflow是一个国产的开源工作流引擎,与业务场景结合紧密,再带表单引擎,数据表较多,中文概念较多,可配置型性强,支持作为中间件模式的集成。配置点集中在,节点属性,流程属性,方向条件。概念名词比较清晰,文档全面。有qq群技术支持。流程设计器界面干净,从节点类型分类,分流,合流,分合流,子线程等等。表单与流程完美结合,与其它几款流程引擎设计理念不同。Jflow更适用,贴近用户操作。表单引擎中的精华是审核组件,满足国内审批要求的需求,退回,分合流审核,会签,并行处理,队列处理,概念清晰,容易理解。_工作流
文章浏览阅读1.3k次。可以参考深度学习笔记:在小数据集上从头训练卷积神经网络_笨牛慢耕的博客-程序员宅基地_小数据集训练ImageDataGenerator.flow_from_directory可以提取TFrecord数据格式。image_dataset_from_directory是更古老的东西也能作为TFrecord数据提取的工具,但是提取的是整个文件夹中的文件数据集,如果想要划分为训练集和验证集,可以尝试使flow_from_directory。示例如下:#使用原模块,subset参数.._如何从tfrecord拆出一个小数据集
文章浏览阅读274次。reversereverse不是排序方法,它只是数组颠倒方法,可以将数组的顺序颠倒过来。// 书中的例子,只是作为反向排序讲解,不够全面let values = [1, 2, 3, 4, 5]; values.reverse();console.log(values); // [5,4,3,2,1]let numbers = [5,1,2,6,3];numbers.reverse();console.log(numbers); // [3, 6, 2, 1, 5]let chars =_splice/sort/reverse js
文章浏览阅读7.4k次,点赞3次,收藏11次。 网上这类文章比较多,但是都不是很具体,刚好有门课结课论文要写这个,所以就总结了一下。以下的过程都是在ubuntu7.10上实际运行过的。第一次在csdn上写文章。写的不好还请见谅。
文章浏览阅读6.3k次,点赞2次,收藏9次。 前言:自定义FlaotView不需要任何权限,继承FrameLayout,通过WindowManager实现悬浮。资源文件:drawable、drawable-hdpi、layout菜单背景(menu_bg.xml):<?xml version="1.0" encoding="utf-8"?><selector ="http://s..._android floatview
文章浏览阅读1.7k次。使用 Matplotlib 除可以生成包含多条折线的复式折线图之外,它还允许在一张数据图上包含多个子图。调用 subplot() 函数可以创建一个子图,然后程序就可以在子图上进行绘制。subplot(nrows, ncols, index, **kwargs) 函数的 nrows 参数指定将数据图区域分成多少行;ncols 参数指定将数据图区域分成多少列;index 参数指定获取第几个区域。sub..._python plt.subplot
文章浏览阅读2.6k次。关于QT调试操作步骤 1.首先,用QtCreator打开Qt工程,然后点击左下角的电脑图标,再在弹出的菜单中选择“Debug”。 **2.接下来,在需要进行调试的代码部分设下断点。设断点的方法是在要设断点的代码行前的空白处点击鼠标。****3.如果想清除断点,则在该断点上再点击一下即可清除。**..._qtcreator 如何debug
文章浏览阅读1.1w次,点赞9次,收藏67次。1、什么是BIOS?BIOS是英文bai"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个daoROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。有人认为既然BIOS是"程序",那它就应该是属于软件,感觉就像自己常用的Word或Excel。但也很多人不这么认为,因为它与一般的软件还是有一些区别_bios
文章浏览阅读1.2w次,点赞7次,收藏88次。add远程仓库: git remote add origin [email protected]:zhang/vue_shop.gitgit push推送到远程仓库: git push -u origin master 并以master 分支保存git status 检查项目状态 > git add . 添加所有文件到暂存区 > git commit –m “描述” 在本地提交 > git push 上传 > git pull 拉取远程代码 > git reset 回退..._git基本操作命令
文章浏览阅读735次,点赞23次,收藏14次。有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!后有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊![外链图片转存中…(img-65Xx6NTa-1712987646672)]