51单片机-74HC595移位寄存器
目录
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)
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移位寄存器相关推荐
- 51单片机 74HC595应用实例+Proteus仿真
51单片机 74HC595应用实例+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #include <intrins.h> #defi ...
- 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟
基于51单片机+74HC595移位寄存器+8位数码管时钟 Proteus仿真 实例代码 #include "at89x52.h" sbit SHCP =P0^1; // 移位寄存器 ...
- 【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制
目录 硬知识 IO 口扩展方式-串转并 74HC595 芯片介绍 硬件设计 测试源码 HC74595.c HC74595.h main.h 实验现象 SPI控制 普中51-单核-A2 STC89C52 ...
- 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间
基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间 Proteus仿真 实例代码 #include "at89x52.h" /**74hc595引脚定义 ...
- 51单片机开发:通过74HC595控制LED点阵
1.LED点阵介绍 (1)LED点阵就是多个LED发光二极管的集合,在单个LED的发光原理上没有任何区别: (2)上面是16x16的LED点阵,总共有16x16=256个LED灯,由32个引脚来控制, ...
- 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记
使用74HC595芯片驱动LED点阵屏的使用笔记 1.控制显示LED点阵屏的思路 2.74HC595芯片的学习 2.1.74HC595芯片是什么? 2.2.74HC595芯片各引脚解释以及分析 2.3 ...
- 51单片机七段数码管显示时钟无按键控制—①—74HC595版
参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...
- 51单片机8*8点阵屏、取模软件的使用
取模软件网盘提取 链接:https://pan.baidu.com/s/1YYQo_tZNCXlo9uWVbtsNdg 提取码:jfbr 74HC595芯片原理图: 两片595芯片级联驱动点阵屏只需要 ...
- 【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展
目录 硬知识 IO 扩展芯片 TCA6416A TAC6416A 的寄存器 IO 输入寄存器 IO 输出寄存器 IO 反相寄存器 IO 方向寄存器 TCA6416A 的操作 TCA6416A 写数据 ...
最新文章
- 7-9 职工排序题 (20 分)
- 计算机网络原理关于实验中几个指令使用的复习——网络层
- Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
- day15 java的final
- 20145236 《Java程序设计》 第6周学习总结
- ldd3笔记_3_编译模块【ZT】
- rabbitmq原理 php,Rabbitmq基本原理
- TensorFlow在美团外卖推荐场景的GPU训练优化实践
- bzoj 4548: 小奇的糖果 bzoj 3658: Jabberwocky(双向链表+树状数组)
- linux下解压java压缩包报错
- ERP : 服装行业解决方案
- HTTP、HTTPS常用的默认端口号
- 2019年全国大学生电子设计竞赛D题简易电路特性测试仪试题
- 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...
- 《泛型编程与stl》
- 【codevs 1376】帕秋莉·诺蕾姬
- 数据分析师应该干些什么
- 古文观止卷七_諫太宗十思疏_魏徵
- 使用SPM固定执行计划
- 换源解决pip超时问题: pip._vendor.urllib3.exceptions.SSLError