目录

1.74HC595芯片介绍

1.1.引脚定义

1.2.工作原理

2.实际应用

2.1.控制数码管

2.2.点阵屏显示图形

2.3.点阵屏显示动画

3.知识点

3.1.位变量(sbit/bit)

3.2.字模提取


1.74HC595芯片介绍

74HC595芯片是一个串行输入,并行输出设备。其内部包括一个8位移位寄存器、一个存储器以及三态输出门电路,其中移位寄存器和存储器都有相互独立的时钟,每当移位寄存器输入时钟SHCP上升沿来临之时,数据被移出。

1.1.引脚定义

引脚定义,怎么命名,并没有个统一的规则,所以每个人在绘制芯片引脚图时,根据个人习惯命名可能都不一样(如:14号引脚(DS/SER),10号引脚(MR/SCLR),11号引脚(SHCP/SCK),12号引脚(STCP/RCK)等);虽然命名可能不一样,但引脚的功能确是一样;

1.2.工作原理

工作方式1:将DS的数据,通过SHCP产生上升沿,一位位的移入移位寄存器;然后再有STCP产生一个上升沿,将移位寄存器的数据送入存储寄存器;再通过OE低电平使能,将对应的数据给到工作引脚;这,只是74HC595常见的工作方式之一,也是本篇的重点;

  • 数据输入:串行数据从DS口输入,要将DS上的数据移入移位寄存器,需要时钟驱动,即SHCP每产生一个上升沿,DS上的数据往移位寄存器送入一位,先送低位,后送高位,经过8个上升沿后,8bit全部送入移位寄存器;
  • 数据锁存:就是要将移位寄存器里边的数据,送入存储寄存器,即时钟信号STCP产生一个上升沿,就可完成此操作;
  • 数据输出:使能信号OE为低电平,存储寄存器的8bit数据(一个字节)就在Q7-Q0并行输出,并输出的数据会被锁存起来

功能汇总:除了以上介绍的方式1之外,74HC595芯片的功能有以下

2.实际应用

2.1.控制数码管

功能需求:通过74HC595控制P2口(前提:可以通过移位寄存器控制P2口)

程序设计:根据74HC595芯片的工作原理,我们知道,最关键的引脚其实只有三个,分别是串行数据输入引脚DS、移位寄存器时钟输入引脚SHCP、储存寄存器时钟输入引脚STCP;所以代码怎么写,无非就是配置这几个引脚,定义串行数据输入的子函数,以及运行所需要的主函数;

#include <REGX52.H>//*配置引脚,根据原理图
sbit STCP=P3^5;//储存寄存器时钟输入引脚配置
sbit SHCP=P3^6;//移位寄存器时钟输入引脚配置
sbit DS=P3^4;  //串行数据输入引脚配置//*子函数,定义需要输入的串行数据
void _74HC595_WriteByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++)      //当i>8时,跳出循环,即次函数循环8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每运行1次,数据整体右移一位SHCP=1;           //SHCP上升沿时,DS的数据写入移位寄存器SHCP=0;}STCP=1;               //STCP上升沿时,数据从移位寄存器转存储存寄存器STCP=0;
}//*主函数
void main()
{SHCP=0;                  //移位寄存器时钟信号初始化STCP=0;                  //储存寄存器时钟信号初始化_74HC595_WriteByte(0x48);//74HC595写入0x48(0100 1000)while(1){}
}

2.2.点阵屏显示图形

功能需求:通过74HC595芯片,控制LED点阵屏,显示所需静态画面

硬件电路:从原理图可以看出,点阵屏的电路,也是个矩阵电路;想点亮其中哪颗或哪几颗灯,其实就是段选和位选的过程;

程序设计:相比上一个用例,点阵屏的驱动,其实就是增加了点阵LED灯的段选和位选子函数;

#include <REGX52.H>
#include "Delay.h"//*配置引脚,根据原理图
sbit STCP=P3^5;//储存寄存器时钟输入引脚配置
sbit SHCP=P3^6;//移位寄存器时钟输入引脚配置
sbit DS=P3^4;  //串行数据输入引脚配置//*子函数,定义需要输入的串行数据
void _74HC595_WriteByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++)      //当i>8时,跳出循环,即次函数循环8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每运行1次,数据整体右移一位SHCP=1;           //SHCP上升沿时,DS的数据写入移位寄存器SHCP=0;}STCP=1;               //STCP上升沿时,数据从移位寄存器转存储存寄存器STCP=0;
}//*子函数,通过控制点阵屏的段选和位选,来控制想要的图形
void MatrixLED_ShowColumn(unsigned char Column,Data)//定义变量列(位选)和行(段选)
{_74HC595_WriteByte(Data);//段选,通过74HC595的串行数据输入口DS控制P0=~(0x80>>Column);      //位选,通过向右移一位的方式,去控制点阵屏的8列Delay(1);                //延时1msP0=0xFF;                 //消影,P0口置高电平
}//*主函数
void main()
{SHCP=0;STCP=0;while(1){MatrixLED_ShowColumn(0,0x80);//位选第1列,段选显示0x80MatrixLED_ShowColumn(1,0xF0);//位选第2列,段选显示0xF0MatrixLED_ShowColumn(2,0x48);//位选第3列,段选显示0x48MatrixLED_ShowColumn(3,0x66);//位选第4列,段选显示0x66}
}

2.3.点阵屏显示动画

功能需求:通过74HC595芯片,控制LED点阵屏,显示所需静态画面

硬件电路:从原理图可以看出,点阵屏的电路,也是个矩阵电路;想点亮其中哪颗或哪几颗灯,其实就是段选和位选的过程;

#include <REGX52.H>
#include "Delay.h"//*配置引脚,根据原理图
sbit STCP=P3^5;//储存寄存器时钟输入引脚配置
sbit SHCP=P3^6;//移位寄存器时钟输入引脚配置
sbit DS=P3^4;  //串行数据输入引脚配置//*子函数,定义需要输入的串行数据
void _74HC595_WriteByte(unsigned char Byte)
{unsigned char i;for(i=0;i<8;i++)      //当i>8时,跳出循环,即次函数循环8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每运行1次,数据整体右移一位SHCP=1;           //SHCP上升沿时,DS的数据写入移位寄存器SHCP=0;}STCP=1;               //STCP上升沿时,数据从移位寄存器转存储存寄存器STCP=0;
}//*子函数,通过控制点阵屏的段选和位选,来控制想要的图形
void MatrixLED_ShowColumn(unsigned char Column,Data)//定义变量列(位选)和行(段选)
{_74HC595_WriteByte(Data);//段选,通过74HC595的串行数据输入口DS控制P0=~(0x80>>Column);      //位选,通过向右移一位的方式,去控制点阵屏的8列Delay(1);                //延时1msP0=0xFF;                 //消影,P0口置高电平
}//*数组,编辑需要显示的图形文字
unsigned char Animation[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x1F,0x20,0x40,0x80,0x00,0x2F,0x00,0x80,0x40,0x20,0x1F,0x20,0x40,0x80,0x00,0x2F,0x00,0x30,0x48,0x84,0x42,0x21,0x42,0x84,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};//*主函数
void main()
{//*定义所需变量unsigned char i,Offset,Count;SHCP=0;                  //移位寄存器时钟信号初始化STCP=0;                  //储存寄存器时钟信号初始化while(1){for(i=0;i<8;i++){MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;//*相当于有一个延时,扫描10遍,当Count>10的时候,Offset++,偏移一位//*那这能不能用Delay函数代替呢???if(Count>10){Count=0;Offset++;if(Offset>32)//Offset可以偏移多少位,根据实际显示的内容设置,因为我们需要显示的内容是8*32的,所以当Offset>32的时候,回到第1位{Offset=0;}}}
}

3.知识点

3.1.位变量(sbit/bit)

        在 C51 中,允许用户通过位类型符定义位变量。位类型符有两个:bit 和 sbit;可以定义两种位变量

bit 位类型符:用于定义一般的可位处理位变量;它的格式如下:

bit 位变量名;

sbit 位类型符:用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号;格式如下:

sbit 位变量名=位地址;
  • 如位地址为位直接地址,其取值范围为 0x00~0xff;
  • 如位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义;字节地址与位号之间、特殊功能寄存器与位号之间一般用“^”作间隔;如74H595的引脚配置:
//*配置引脚,根据原理图
sbit STCP=P3^5;//储存寄存器时钟输入引脚配置
sbit SHCP=P3^6;//移位寄存器时钟输入引脚配置
sbit DS=P3^4;  //串行数据输入引脚配置

3.2.字模提取

针对点阵屏要显示的内容,我们可以通过一些辅助的手段,提取所需字模,简单有效;如下就是2.3点阵屏显示动画的字模内容;

51单片机-74HC595移位寄存器相关推荐

  1. 51单片机 74HC595应用实例+Proteus仿真

    51单片机 74HC595应用实例+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #include <intrins.h> #defi ...

  2. 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟

    基于51单片机+74HC595移位寄存器+8位数码管时钟 Proteus仿真 实例代码 #include "at89x52.h" sbit SHCP =P0^1; // 移位寄存器 ...

  3. 【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制

    目录 硬知识 IO 口扩展方式-串转并 74HC595 芯片介绍 硬件设计 测试源码 HC74595.c HC74595.h main.h 实验现象 SPI控制 普中51-单核-A2 STC89C52 ...

  4. 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间

    基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间 Proteus仿真 实例代码 #include "at89x52.h" /**74hc595引脚定义 ...

  5. 51单片机开发:通过74HC595控制LED点阵

    1.LED点阵介绍 (1)LED点阵就是多个LED发光二极管的集合,在单个LED的发光原理上没有任何区别: (2)上面是16x16的LED点阵,总共有16x16=256个LED灯,由32个引脚来控制, ...

  6. 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记

    使用74HC595芯片驱动LED点阵屏的使用笔记 1.控制显示LED点阵屏的思路 2.74HC595芯片的学习 2.1.74HC595芯片是什么? 2.2.74HC595芯片各引脚解释以及分析 2.3 ...

  7. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  8. 51单片机8*8点阵屏、取模软件的使用

    取模软件网盘提取 链接:https://pan.baidu.com/s/1YYQo_tZNCXlo9uWVbtsNdg 提取码:jfbr 74HC595芯片原理图: 两片595芯片级联驱动点阵屏只需要 ...

  9. 【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展

    目录 硬知识 IO 扩展芯片 TCA6416A TAC6416A 的寄存器 IO 输入寄存器 IO 输出寄存器 IO 反相寄存器 IO 方向寄存器 TCA6416A 的操作 TCA6416A 写数据 ...

最新文章

  1. 7-9 职工排序题 (20 分)
  2. 计算机网络原理关于实验中几个指令使用的复习——网络层
  3. Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
  4. day15 java的final
  5. 20145236 《Java程序设计》 第6周学习总结
  6. ldd3笔记_3_编译模块【ZT】
  7. rabbitmq原理 php,Rabbitmq基本原理
  8. TensorFlow在美团外卖推荐场景的GPU训练优化实践
  9. bzoj 4548: 小奇的糖果 bzoj 3658: Jabberwocky(双向链表+树状数组)
  10. linux下解压java压缩包报错
  11. ERP : 服装行业解决方案
  12. HTTP、HTTPS常用的默认端口号
  13. 2019年全国大学生电子设计竞赛D题简易电路特性测试仪试题
  14. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...
  15. 《泛型编程与stl》
  16. 【codevs 1376】帕秋莉·诺蕾姬
  17. 数据分析师应该干些什么
  18. 古文观止卷七_諫太宗十思疏_魏徵
  19. 使用SPM固定执行计划
  20. 换源解决pip超时问题: pip._vendor.urllib3.exceptions.SSLError

热门文章

  1. 云时代阿里服务器的演进与展望
  2. 178、锐捷交换机恢复出厂和各种基本配置
  3. Select之多表查询
  4. 【自动化毕业设计】基于机械视觉控制的板球控制装置
  5. 教程 | 阿克曼结构移动机器人的gazebo仿真(一)
  6. android 开红包动画,Android实现红包雨动画效果
  7. GitHub 上这个「计算机科学」自学指南火了!
  8. [DirectX]Assimp环境配置
  9. 成都java培训要多少钱
  10. 青少年CTF - Crypto - 一起下棋 Wp WriteUp