使用74HC595实现IO口的扩展

合集下载

玻璃外墙自动清洁机器人(验证机)_本科毕业设计论文

玻璃外墙自动清洁机器人(验证机)_本科毕业设计论文

本科毕业论文(设计)题目:玻璃外墙自动清洁机器人(验证机)学院:物理与电子科学学院专业:电子信息科学与技术诚信承诺我谨在此承诺:本人所写的毕业论文《玻璃外墙自动清洁机器人(验证机)》均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。

承诺人(签名):2013 年 4 月20 日玻璃外墙自动清洁机器人(验证机)摘要:本文主要介绍了玻璃外墙自动清洁机器人的设计背景、设计思路、制作过程、工作原理、验证过程以及使用方向。

由于限于实验室条件以及对设计思路可行性的不确定性,所以决定先做一个验证机,即验证方案的可行性和对后期产品的设计提供方案。

玻璃外墙机器人在制造过程中主要使用了以下器件和材料,方管铝合金,自攻螺丝钉,铝板,DC5V步进电机,超大吸盘,微型抽气机,8mm丝杆,5mm空气导管,无线模块,5V直流电源模块,74HC595以及单片机。

玻璃外墙机器人主要是由铝合金搭建主框架,这样可以在不降低机器人强度的情况下减轻重量。

机器人铝合金结合部以铝片加自攻螺丝钉加固,运动部分使用8mm丝杆加齿轮以控制运动,动力则采用DC5V步进电机的转动带动机器人运转,在工作时,以微型抽气机抽出超大吸盘内的空气以使机器人吸在玻璃墙幕上,整个机器人使用51单片机来控制驱动,使用74HC595对单片机的I/O口进行扩展,机器人用220V交流电转5V直流电源模块供电,以确保步进电机能达到额定电流,提供强劲的动力,再用无线模块控制机器人的状态,使得机器人稳定有序的工作。

可以适合全玻璃结构的建筑体以及建筑中部分的玻璃墙面的清洁工作,它可以在无人干预的情况下完成指定玻璃墙面的清洁,替代传统的人工室外清理,。

使用玻璃外墙自动清洁机器人可以最大化的降低人的危险和劳动强度,提高工作效率,降低成本。

它还具有越障功能,对于有起伏有其他装饰材料的玻璃墙幕同样适合,同时它还能转弯,不光能垂直上下,还能向左向右移动真正做到清洁无死角。

74hc595工作原理

74hc595工作原理

74hc595工作原理
74HC595是一个8位移位寄存器,通过串行输入和并行输出实现数据在多个器件之间的传输。

其工作原理如下:
1. 初始化:将ST_CP(存储器件时钟)和SH_CP(移位寄存器时钟)置为低电平,并将OE(输出使能)置为高电平。

2. 数据输入:将数据通过SER(串行输入)引脚输入到第一个74HC595的串行输入端。

3. 移位寄存器时钟:将SH_CP引脚从低电平变为高电平,数据会从SER引脚移位到移位寄存器中,每一次时钟上升沿移位一位。

4. 存储器件时钟:将ST_CP引脚从低电平变为高电平,在上升沿时,移位寄存器中的数据会被存储到存储器件中。

5. 并行输出:存储器件中的数据可以通过QA-QH引脚并行输出,每个引脚代表一个位,QH为最高有效位。

6. 循环移位:可以通过将OE引脚置为低电平,再进行一次存储器件时钟和移位寄存器时钟的操作,实现数据循环移位的效果。

总的来说,74HC595通过移位寄存器实现数据的串行输入和并行输出,可以通过控制时钟信号的触发来移位、存储和输出
数据。

这使得它可以扩展微控制器的IO口数量,广泛应用于LED显示、数码管显示、驱动继电器等数字控制场景中。

74HC595芯片对单片机IO口的扩展原理与应用

74HC595芯片对单片机IO口的扩展原理与应用

2020年第4期信息与电脑China Computer & Communication软件开发与应用74HC595芯片对单片机IO 口的扩展原理与应用杨恒敏(江苏联合职业技术学院扬州分院,江苏 扬州 225003)摘 要:单片机在使用过程中存在IO 端口有限的性能缺陷,笔者针对利用74HC595芯片扩展单片机IO 口的基本原理进行了详细分析,围绕流水灯效果、电子游戏扑克机、16×32LED 点阵显示器3个层面,探讨了单片机IO 口扩展的具体设计方案与实现路径,以期为顺利解决单片机IO 口紧缺问题提供借鉴。

关键词:74HC595芯片;单片机;IO 口扩展中图分类号:TP368.1 文献标识码:A 文章编号:1003-9767(2020)04-120-03Expanding Principle and Application of 74HC595 Chip to IO Port of SingleChip MicrocomputerYang Hengmin(Yangzhou Branch of Jiangsu Union Technical Institute, Yangzhou Jiangsu 225003, China)Abstract: There are limited performance defects of IO ports in the use of single-chip microcomputers. This article analyzesthe basic principles of using 74HC595 chip to expand the single-chip IO ports. At the level, the specific design scheme and implementation path of the expansion of the IO port of the single-chip microcomputer are discussed, in order to provide a reference for the smooth solution of the shortage of the IO port of the single-chip microcomputer.Key words: 74HC595 chip; single chip microcomputer; IO port expansion0 引言当前在使用单片机的过程中常面临IO 端口紧缺的问题,74HC595芯片作为一种通用位移缓存器,可实现8位串行输入/输出或并行输出,其电路连接方式与代码编程较为简单、驱动能力较强,并且凭借存储寄存器可保障在移位过程中并排输出端口数据不变,易于实现对单片机IO 口的扩展,具备良好的应用价值。

使用74HC595实现IO口的扩展

使用74HC595实现IO口的扩展

使用74HC595实现I/O口的扩展一、实验目的1. 了解74HC595〔串入并出〕基本原理和使用2. 了解数码管的基本原理和驱动方式3. 学会使用74HC595来驱动静态数码管二、实验器材C51单片机开发板〔含74HC595芯片,静态数码管〕1块8PIN排线1根数据线1根三、实验原理1.数码管数码管是一种半导体发光器件,其基本单元是发光二极管。

数码管按段数分为七段数码管和八段数码管〔还有一种“米”字型的数码管,其段数更多〕,八段数码管比七段数码管多一个发光二极管单元〔多一个小数点显示〕,其基本原理是:将所有LED的一端〔正极、负极均可〕连在一起作为一个公共端,然后通过分别控制这组LED的另一个端口来使部分LED点亮,从而达到显示一定字形的目的。

〔1〕数码管的分类按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

我们在实际使用中一定要搞清楚数码管是共阴极的还是共阳极的。

〔2〕数码管段、位引脚的确定〔以4位8段数码管为例〕数码管引脚测量分三步:极性判断〔共阳极还是共阴极〕、公共端判断〔位选端口〕、段码端判断〔段选端口〕。

首先要确定数码管是共阴极还是共阳极的:找一个3到5V的直流电源,准备几个1K或者几百欧姆的电阻。

将电源的正极串接一个电阻后连在数码管的任意一个脚上,然后将电源的负极逐个接到数码管的其余引脚上,观察数码管的某一段是否会点亮,如果全部引脚试过都没有亮的,那么将电源正极〔串电阻〕换一个引脚再试,直到有一个LED发光,这时固定电源负极不动,电源正极〔串电阻〕逐个接到数码管的其余引脚上,如果有8段LED都亮,说明该数码管是共阴极的。

74HC595做IO口扩展

74HC595做IO口扩展
Q1~7
是并行数据输出口,即储寄存器的数据输出口
Q7'
串行输出口,其应该接 SPI 总线的 MISO 接口
STcp(Rck) 存储寄存器的时钟脉冲输入口
SHcp(Sck) 移位寄存器的时钟脉冲输入口
OE 非 (G)
输出使能端
MR 非(sclr) 芯片复位端
Ds
串行数据输入端
else IO0CLR = spi_ds; data <<= 1; IO0SET = spi_shcp; } IO0SET = spi_stcp; }
74HC595 简单工作原理
74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分 别的时钟。数据在 SCHcp 的上升沿输入,在 STcp 的上升沿进入的存储寄存器中去。如果两 个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移 位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并 行 8 位的,具备三态的总线输出,当使能 OE 时(为低电平),存储寄存器的数据输出到 总线。
附子程序:
void hc595send_data(uint8 data)//要传输的数据,建议用数组的方法来查询 {
uint8 i; IO0CLR = spi_stcp; 12 脚 for(i=0;i<8;i++) {
IO0CLR = spi_shcp; 11 脚 if((data&0x80)!=0)IO0SET = spi_ds;
程序说明: 每当 spi_shcp 上升沿到来时,spi_ds 引脚当前电平值在移位寄存器中左移一位,在下一个 上升沿到来时移位寄存器中的所有位都会向左移一位,同时 Q7'也会串行输出移位寄存器 中高位的值,这样连续进行 8 次,就可以把数组中每一个数(8 位的数)送到移位寄存器; 然后当 spi_stcp 上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从 Q1~7 引脚 输出。

74hc595的引脚功能和作用

74hc595的引脚功能和作用

74hc595的引脚功能和作用描述74HC59574HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。

移位寄存器和存储器是分别的时钟。

数据在SHcp 的上升沿输入,在STcp的上升沿进入的存储寄存器中去。

如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。

三态。

[编辑本段]特点8位串行输入/8位串行或并行输出存储状态寄存器,三种状态输出寄存器可以直接清除100MHz的移位频率[编辑本段]输出能力并行输出,总线驱动;串行输出;标准中等规模集成电路595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

[编辑本段]参考数据CPD决定动态的能耗,PD=CPD×VCC×f1+∑(CL×VCC2×f0) F1=输入频率,CL=输出电容f0=输出频率(MHz)Vcc=电源电压[编辑本段]引脚说明符号引脚描述Q0…Q7 15,1,7 并行数据输出GND 8 地Q7’9 串行数据输出MR 10 主复位(低电平)SHCP 11 移位寄存器时钟输入STCP 12 存储寄存器时钟输入OE 13 输出有效(低电平)DS 14 串行数据输入VCC 16 电源[编辑本段]功能表输入输出功能SHCP STCP OE MR DS Q7’Qn ××L ↓×L NC MR为低电平时仅仅影响移位寄存器×↑L L ×L L 空移位寄存器到输出寄存器××H L ×L Z 清空移位寄存器,并行输出为高阻状态↑×L H H Q6 NC 逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态移入,例如,以前的状态6(内部Q6”)出现在串行输出位。

基于arduino的74HC595扩展I

基于arduino的74HC595扩展I

基于arduino的74HC595扩展I/O口方案辽工电子2013.5.174HC595内部原理图图注:G在实际使用中可以悬空,但将导致输出电压不稳。

可以常为低电平,即开通状态。

图示时序图传送的数据是“010”,两种时序图其结果是一样的,因为74595是上升沿读数的。

在arduino上的程序为(蓝色字体代码固定,可做循环):#define CLK 12//NO.11#define SER 13//NO.14#define RCK 11//NO.12#define G 10//NO.13#define RCLR 9//NO.10void setup() {pinMode(CLK, OUTPUT);pinMode(SER, OUTPUT);pinMode(RCK, OUTPUT);pinMode(G, OUTPUT);pinMode(RCLR, OUTPUT);}void loop() {digitalWrite(RCLR, HIGH); //un use it digitalWrite(G, HIGH); //close itdigitalWrite(RCK, LOW); //twice clkis still low//begin send itdigitalWrite(CLK, LOW);digitalWrite(SER, LOW);delay(1);digitalWrite(CLK, HIGH);delay(1); //1digitalWrite(CLK, LOW);digitalWrite(SER, HIGH);delay(1);digitalWrite(CLK, HIGH);delay(1); //2digitalWrite(CLK, LOW);digitalWrite(SER, LOW);delay(1);digitalWrite(CLK, HIGH);delay(1); //3//end itdigitalWrite(G, LOW); //open itdigitalWrite(RCK, HIGH); //give oneanotherdelay(1);digitalWrite(RCK, LOW); //return itwhile(1);//it's real end}这样输出的结果为0100,0000。

74hc595的引脚功能和作用

74hc595的引脚功能和作用

描述74HC59574HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。

移位寄存器和存储器是分别的时钟。

数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。

如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。

三态。

[编辑本段]特点8位串行输入/8位串行或并行输出存储状态寄存器,三种状态输出寄存器可以直接清除100MHz的移位频率[编辑本段]输出能力并行输出,总线驱动;串行输出;标准中等规模集成电路595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

[编辑本段]参考数据CPD决定动态的能耗,PD=CPD×VCC×f1+∑(CL×VCC2×f0) F1=输入频率,CL=输出电容f0=输出频率(MHz)Vcc=电源电压[编辑本段]引脚说明符号引脚描述Q0…Q7 15,1,7 并行数据输出GND 8 地Q7’ 9 串行数据输出MR 10 主复位(低电平)SHCP 11 移位寄存器时钟输入STCP 12 存储寄存器时钟输入OE 13 输出有效(低电平)DS 14 串行数据输入VCC 16 电源[编辑本段]功能表输入输出功能SHCP STCP OE MR DS Q7’ Qn × × L ↓ × L NC MR为低电平时仅仅影响移位寄存器× ↑ L L × L L 空移位寄存器到输出寄存器×× H L × L Z 清空移位寄存器,并行输出为高阻状态↑ × L H H Q6 NC 逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态移入,例如,以前的状态6(内部Q6”)出现在串行输出位。

最详细的74HC595芯片使用方法介绍

最详细的74HC595芯片使用方法介绍

最详细的74HC595芯片使用方法介绍2010-01-17 00:07:05 来源: 电子工程师论坛Arduino采用的ATmega168芯片带12个数字I/O管脚,其中每个都可以对一个数字量进行控制,从而实现类似于点亮一个发光二极管这样的功能。

在实际的工程应用里,有时我们可能会遇到需要对更多的数字量进行控制的场合,比如同时控制16个发光二极管,这时Arduino自带的数字I/O管脚就不够用了,必须进行相应的扩展。

其中一种可行的办法就是借助74HC595这样一个8位串入并出移位寄存器,这个芯片能够多个级连起来一起使用,因此理论上能够通过Arduino上有限的几个管脚(最少三个)产生任意多个的数字输出。

74HC595同数据相关的引脚可以分为三类:DS:串行数据输入,接Arduino的某个数字I/O引脚。

Q0~Q7:8位并行数据输出,可以直接控制8个LED,或者是七段数码管的8个引脚。

Q7′:级联输出端,与下一个74HC595的DS相连,实现多个芯片之间的级联。

74HC595同控制相关的引脚一共有四个:SH_CP:移位寄存器的时钟输入。

上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变。

ST_CP:存储寄存器的时钟输入。

上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中的数据保持不变。

应用时通常将ST_CP置为低点平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。

MR:重置(RESET),低电平时将移位寄存器中的数据清零,应用时通常将它直接连高电平(VCC)。

OE:输出允许,高电平时禁止输出(高阻态)。

引脚不紧张的情况下可以用Arduino的一个引脚来控制它,这样可以很方便地产生闪烁和熄灭的效果。

实际应用时可以将它直接连低电平(GND)。

对于一个最简单的74HC595应用来讲,可以用Arduino的三个数字I/O端口分别控制DS、SH_CP和ST_CP,然后将MR和OE分别接VCC和地。

三分钟完全掌握利用74HC595在串行口扩充8位的并行输出接口

三分钟完全掌握利用74HC595在串行口扩充8位的并行输出接口

三分钟完全掌握利用74HC595在串行口扩充8位的并行输出接口74HC595和74LS164一样,也是串入并出的移位寄存器。

它们经常出现在单片机系统中,用来扩充并行输出接口。

看过一些资料,送往74HC595的串行信号,基本上都是用单片机并行接口的某个位,模拟SPI的时序,输出出来的。

这种方法,灵活性是它的优点,速度低是它的缺点。

如果使用51单片机的串口方式0,就可以得到更高的速度和更简练的编程方法。

在一般的单片机教材上,讲到串口方式0的时候,都给出了用164扩充并口的方法。

但是对595这个后起之秀,介绍甚少。

其实,595和164的功能是一样的,只是多了一个更新输出的控制引脚。

下面,做而论道介绍使用四片74HC595扩充四个8位接口、驱动数码显示器的方法。

电路如下所示:注意:电路图中省略了限流电阻。

实际制作时,在每个段,串联1K左右的电阻即可。

这个显示电路,是属于静态显示的方法,不需要经常的调用显示子程序,使用起来非常方便。

这个显示电路,仅仅画出了四片595,实际上,可以仿照现在电路的结构,继续级连下去。

当然,级连过多,会导致信号不稳定,那就要加上驱动电路了。

这个显示电路,实际上也就是LED点阵屏幕上,显示一行的驱动电路。

如果配上16行的译码电路,就可以驱动1632的点阵屏幕了。

用74HC595驱动数码管的程序如下。

;用595并行输出带动4个数码显示器。

;=============================================ORG 0000HSJMP START;-----------------------------------------------------------------。

74HC595芯片详细注解及驱动程序批注

74HC595芯片详细注解及驱动程序批注

74HC595:74HC595是一个8位串行输入、并行输出的移位寄存器和8位输出锁存器。

并行输出为三态输出。

寄存器和锁存器有各自的时钟输入SCLK(SH_CP)和SLCK(ST_CP);都是上升沿有效,当SCLK由低到高变化时,串行输入数据(SDA)移入寄存器。

当SLCK由低到高变化时,寄存器数据置入锁存器。

74HC595 作为一款常用的高速CMOS 数字芯片,经常被用作以下用途:1、作为CMOS 结构的芯片,驱动能力还是可以的,因此常用来驱动LED 点阵屏;2、串转并,在单片机 IO 口不足时可以扩展IO 口使用;& [1 b! T. c, ^& Q1 B: ]主要特点:1、三态门输出,即高低电平、高阻态;5 V6 S& g0 J2 A( d4 K, m2、CMOS 结构,驱动能力比较强,一般可以用来直接驱动点阵屏;: P/ @3 w2 f& z3、串转并输出,可用来扩展单片机IO 口;4、SPI 协议;. u5 @ \" R* y) N! r/ k' j5、可级联多片;Q0--Q7: 八位并行输出端,可以直接控制数码管的8个段。

//QA-QHQ7': 串行数据输出端,级联输出端。

将它接下一个595的DS端。

//Q’HDS(14脚): 串行数据输入端,级联的话接上一级的Q7'。

//SERMR(10脚): 低电平时将移位寄存器的数据清零。

通常接到VCC防止数据清零。

SH_CP(11脚):上升沿时数据寄存器的数据移位。

下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

我通常都选微秒级)///移位脉冲引脚//SCKST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

74hc595的引脚功能和作用

74hc595的引脚功能和作用

描述74HC59574HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。

移位寄存器和存储器是分别的时钟。

数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。

如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。

三态。

[编辑本段]特点8位串行输入/8位串行或并行输出存储状态寄存器,三种状态输出寄存器可以直接清除100MHz的移位频率[编辑本段]输出能力并行输出,总线驱动;串行输出;标准中等规模集成电路595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

[编辑本段]参考数据CPD决定动态的能耗,PD=CPD×VCC×f1+∑(CL×VCC2×f0) F1=输入频率,CL=输出电容f0=输出频率(MHz)Vcc=电源电压[编辑本段]引脚说明符号引脚描述Q0…Q7 15,1,7 并行数据输出GND 8 地Q7’ 9 串行数据输出MR 10 主复位(低电平)SHCP 11 移位寄存器时钟输入STCP 12 存储寄存器时钟输入OE 13 输出有效(低电平)DS 14 串行数据输入VCC 16 电源[编辑本段]功能表输入输出功能SHCP STCP OE MR DS Q7’ Qn × × L ↓ × L NC MR为低电平时仅仅影响移位寄存器× ↑ L L × L L 空移位寄存器到输出寄存器×× H L × L Z 清空移位寄存器,并行输出为高阻状态↑ × L H H Q6 NC 逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态移入,例如,以前的状态6(内部Q6”)出现在串行输出位。

74HC595芯片做单片机IO扩展proteus仿真

74HC595芯片做单片机IO扩展proteus仿真

74HC595芯片做51单片机IO扩展PROTEUS仿真最近有个小活需要用到IO扩展,经搜索资料,有很多方式,比如MCP23017/MCP23S17、74HC595、8255A、74HC164、74HC138等,经对比我选择74HC595,MCP23017/MCP23S17相对功能更好些,可以做输入输出使用,74HC595只能用作输出,8255A采用并行口扩展,74HC164的缺点是没有输出寄存器,移位过程中输出端数据不稳定,且没有串行输出接口。

一、74HC595芯片介绍595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

芯片引脚定义图:/MR(10脚): 低电平时将移位寄存器的数据清零。

通常接到VCC防止数据清零。

SH_CP(11脚):上升沿时数据寄存器的数据移位。

Q0->Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

我通常都选微秒级)ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

/OE(13脚): 高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力。

二、PROTEUS仿真按下图在PROTEUS中做好连线Keil下编写C51程序如下:#include<reg52.h>typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;sbit ST_CP = P2^7; //输出时钟sbit DS = P2^6; //串行数据输入sbit SH_CP = P2^5; //输入时钟uint16_tled_buff[]={0xfffe,0xfffd,0xffb,0xfff7,0xffef,0xffdf,0xffbf, 0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};void send_byte16(uint16_t byte16)//发送16位数据{uint8_t i=0;for(i=0;i<16;i++){if((byte16<<i)&0x8000){DS = 1;SH_CP = 0;SH_CP = 1;}else{DS = 0;SH_CP = 0;SH_CP = 1;}}ST_CP = 0;ST_CP = 1;}/*** @brief :1MS延时函数* @note :12MHz 下1MS延时 */static void drv_delay_1ms( ) {uint16_t Ms = 1;uint32_t j = 80;while( Ms-- ){while( j-- );}}/*** @brief :MS延时函数* @Ms:延时的MS数*/void drv_delay_ms( uint16_t Ms ) {while( Ms-- ){drv_delay_1ms( );}}void main(){uint8_t i=0;while(1){for(i=0;i<16;i++){send_byte16(led_buff[i]);drv_delay_ms(1000);send_byte16(0xffff);drv_delay_ms(1000);}}}程序思路:循环16次,在每次时钟ST_CP的上升沿循环串行写入数据到内部寄存器,最后在SH_CP上升沿将寄存器数据并行输出。

74HC595芯片做单片机IO扩展proteus仿真

74HC595芯片做单片机IO扩展proteus仿真

74HC595芯片做51单片机IO扩展PROTEUS仿真最近有个小活需要用到IO扩展,经搜索资料,有很多方式,比如MCP23017/MCP23S17、74HC595、8255A、74HC164、74HC138等,经对比我选择74HC595,MCP23017/MCP23S17相对功能更好些,可以做输入输出使用,74HC595只能用作输出,8255A采用并行口扩展,74HC164的缺点是没有输出寄存器,移位过程中输出端数据不稳定,且没有串行输出接口。

一、74HC595芯片介绍595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

芯片引脚定义图:/MR(10脚): 低电平时将移位寄存器的数据清零。

通常接到VCC防止数据清零。

SH_CP(11脚):上升沿时数据寄存器的数据移位。

Q0->Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

我通常都选微秒级)ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

/OE(13脚): 高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力。

二、PROTEUS仿真按下图在PROTEUS中做好连线Keil下编写C51程序如下:#include<reg52.h>typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;sbit ST_CP = P2^7; //输出时钟sbit DS = P2^6; //串行数据输入sbit SH_CP = P2^5; //输入时钟uint16_tled_buff[]={0xfffe,0xfffd,0xffb,0xfff7,0xffef,0xffdf,0xffbf, 0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};void send_byte16(uint16_t byte16)//发送16位数据{uint8_t i=0;for(i=0;i<16;i++){if((byte16<<i)&0x8000){DS = 1;SH_CP = 0;SH_CP = 1;}else{DS = 0;SH_CP = 0;SH_CP = 1;}}ST_CP = 0;ST_CP = 1;}/*** @brief :1MS延时函数* @note :12MHz 下1MS延时 */static void drv_delay_1ms( ) {uint16_t Ms = 1;uint32_t j = 80;while( Ms-- ){while( j-- );}}/*** @brief :MS延时函数* @Ms:延时的MS数*/void drv_delay_ms( uint16_t Ms ) {while( Ms-- ){drv_delay_1ms( );}}void main(){uint8_t i=0;while(1){for(i=0;i<16;i++){send_byte16(led_buff[i]);drv_delay_ms(1000);send_byte16(0xffff);drv_delay_ms(1000);}}}程序思路:循环16次,在每次时钟ST_CP的上升沿循环串行写入数据到内部寄存器,最后在SH_CP上升沿将寄存器数据并行输出。

74HC595对单片机IO口的扩展及应用

74HC595对单片机IO口的扩展及应用

74HC595对单片机IO口的扩展及应用作者:曹少科杨晴陈海宇王硕来源:《科技风》2019年第13期摘要:74HC595是美国国家半导体公司生产的通用位移寄存器芯片,它可以实现8位串行输入输出或者并行输出,操作方便简单,可以很容易的完成对单片机IO口的扩展。

[1]本文主要是介绍用74HC595芯片来扩展IO口详细原理,并利用此方法进行实验,实现流水灯效果。

关键词:单片机;74HC595;扩展IO口;流水灯上世纪70年代到80年代期间,单片机凭借着它体积小,低功耗,性价比高的优势,被越来越多的人所使用,并被广泛运用于各个领域。

但随着科技不断地进步与发展,我們对于单片机的应用更加广泛,我们也慢慢发现了51单片机的一些缺点,即IO端口有限,很多人在运用单片机时总会出现IO口不够用的现象,而74HC595芯片刚好能弥补此缺陷,大量扩展单片机的IO口。

174HC595芯片的选择74HC595是硅结构的CMOS器件,能实现串入转并入,数据通过一个IO串口输入后经过74HC595后将数据8位并行输出。

[2]74HC595与74HC164芯片功能基本相同,但前者价格更低廉,驱动能力更强,操作简单,但因为74HC595有存储寄存器,所以在移位的过程中,并排输出端口的数据保持不变。

所以选用74HC595芯片来扩展51单片机IO口比较合适。

2扩展方案2.1硬件连接与实现原理若要以74HC595芯片实现对IO口的扩展,首先需要定义一个单片机I0口与74HC595芯片DS相连,以此来控制串行数据的输入。

而移位寄存器和存储寄存器是不同的时钟,当SH_CP处于上升沿时,数据会输入到移位寄存器中,当ST_CP处于上升沿时会传入的存储寄存器中。

因此两个时钟需要分别进行连接,移位寄存器有串行输入DS引脚、串行输出引脚Q7’和低电平复位引脚MR。

存储寄存器有并行数据输出引脚Q0~Q7和低电平输出有效OE引脚。

所以用MR进行复位时,只是将位移寄存器中的数据清除,而不必担心存储寄存器中的数据有所变化。

使用74系列芯片IO扩展及总线驱动

使用74系列芯片IO扩展及总线驱动

使用74系列芯片作为I/O并行扩展的方法以及总线驱动芯片的使用方法使用74系列芯片作为I/O并行扩展的常见于过去单片机I/O口不够的情况,而且是需要大量的内存和程序存储器严重不足的情况下。

开关量输出的扩展经常使用的芯片是74LS273/74LS373/74LS573/74LS574等;这些芯片的共同特点是具有数据锁存的功能;开关量输入的扩展经常使用的芯片是74LS244/74LS245/74LS240等;这些芯片的特点是三态门,可以把多个芯片的输出,并联在一起而不会互相影响;通过138、139、153等译码选通芯片,把RD/WR/地址的高位信号(高3位或者高4位,看单片机系统中的芯片的数量)接到译码芯片,把译码芯片的输出接到锁存器的锁存输入,或者缓冲器的选通输入。

下面以74LS138为例。

要特别注意到,对245、574、273等使用TTL芯片以RAM方式做I/O扩展的,跟8255、8155、8253、8251、62256等系列芯片不一样的地方,就是:1)8255、8155、8253、8251、62256等芯片本身有wr、rd、ce等信号,所以138的地址译码输出,可以直接接到CE;但是,245、574、273等芯片,没有wr或者rd信号,因此,如果系统中有这样的芯片扩展,就需要把wr或者rd加入到138中;2)对于245或者244,要把数据读到数据总线上,芯片的数据的使能端必须是WR和地址译码数据的混和;3)对于要把数据总线上的数据,锁存到574或者273的数据输出端口上,必须锁存器的LE,是地址和wr的混和;因此,138的接法是:1、A15-》138的A2(3)2、A14-》138的A1(2)3、A13-》138的A0(1)4、RD和WR接74LS00,00的输出接138的E3(6)5、138的输出接245的E或者574的CLK;这样,使用MOVX a,@dptr的时候,才能在245的E上出现带地址的RD信号;使用MOVX@dptr,A的时候,才能在574的CLK上出现带地址的WR信号;参见574的真值表,可见,E应该接低电平;373、573与273、574有所区别:1、573是从低-》高-》低,在从高-》低的瞬间,锁存数据;但是,在高电平的时候,数据是直通的,所以也可以使用这个特性做缓冲器,把LE直接接高电平;OE是三态门,直接接地;2、但是138的输出是,当地址的输入有效的时候,是低电平,其它时间是高电平,所以在时序上跟573是不配合的,因此,573不能作为数据锁存器,除非138的输出加一个反向门接到LE;而574是上升沿锁存数据,138的输出直接作为锁存脉冲即可;如果系统中没有8255、8155、8253、8251、62256这样的芯片,也可以使用139,RD和wr 分别接入一个2-4译码器,译码器的输出分别接到245的E和574的LE,这样可以省去一个74LS00。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用74HC595实现I/O口的扩展一、实验目的1. 了解74HC595(串入并出)基本原理和使用2. 了解数码管的基本原理和驱动方式3. 学会使用74HC595来驱动静态数码管二、实验器材C51单片机开发板(含74HC595芯片,静态数码管)1块8PIN排线1根数据线1根三、实验原理1. 数码管数码管是一种半导体发光器件,其基本单元是发光二极管。

数码管按段数分为七段数码管和八段数码管(还有一种“米”字型的数码管,其段数更多),八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),其基本原理是:将所有LED的一端(正极、负极均可)连在一起作为一个公共端,然后通过分别控制这组LED的另一个端口来使部分LED点亮,从而达到显示一定字形的目的。

(1)数码管的分类按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

我们在实际使用中一定要搞清楚数码管是共阴极的还是共阳极的。

(2)数码管段、位引脚的确定(以4位8段数码管为例)数码管引脚测量分三步:极性判断(共阳极还是共阴极)、公共端判断(位选端口)、段码端判断(段选端口)。

首先要确定数码管是共阴极还是共阳极的:找一个3到5V的直流电源,准备几个1K或者几百欧姆的电阻。

将电源的正极串接一个电阻后连在数码管的任意一个脚上,然后将电源的负极逐个接到数码管的其余引脚上,观察数码管的某一段是否会点亮,如果全部引脚试过都没有亮的,那么将电源正极(串电阻)换一个引脚再试,直到有一个LED发光,这时固定电源负极不动,电源正极(串电阻)逐个接到数码管的其余引脚上,如果有8段LED都亮,说明该数码管是共阴极的。

相反,按住电源正极不动,电源负极逐个接到数码管的其余引脚上,如果有8个数码管全亮,那么该数码管是共阳极的。

确定了数码管的极性后,下面该确定数码管的位选端口了。

仍旧按照第一步的测量方法,如果测量过程中发现当一个引脚固定后,逐个连接到其余端口上的时候,会有一个数码管的所有段都被点亮了,那么这个固定端就是一个位选端。

依照这种方法依次找出其余的3个位选端即可。

最后确定段选端口,根据数码管的极性将电源正极(串电阻)或负极固定在一个位选端上,然后将电源的另一端逐个连接数码管的位选端口以外的引脚,当接到一个引脚上数码管的哪一段点亮,就能够确定该引脚对应那一段了,依次量出全部8段分别对应那个引脚。

经过上面的步骤后,我们就完成了数码管引脚的确定,其实在实际使用过程中,操作熟练的话是不必经过这么繁琐的步骤来确定数码管的引脚的。

(3)数码管的驱动方式:数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

①静态显示驱动:静态驱动也称直流驱动。

静态驱动是指将公共端接到电源正极或者电源地上,每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

②动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

在实际使用中,通常都是采用动态显示驱动的方法。

在本实例中我们采用的静态驱动的方法。

2. 74HC595功能描述在本实例中我们使用了一片74HC595来驱动8位数码管的位选端口,下面就简单介绍一下74HC595的功能。

74HC595是带锁存功能的三态输出的8位串行输入/并行输出的移位寄存器。

由于它自带锁存器,所以其数据在移位寄存器中的移位与锁存器的输出是独立的,当数据移位时,可以保持锁存器输出的数据不改变,等所有8位数据全部串入完成移位操作后,一次性的将数据打入锁存器中,从而实现了并行输出的同步改变。

另外该芯片可以进行级联,能够实现8Xn个并口扩展。

下图是74HC595的逻辑功能表74HC595管脚描述:QA--QH: 八位并行输出端,可以直接控制数码管的8个段。

QH': 级联输出端。

我将它接下一个595的SI端。

SI: 串行数据输入端。

74595的控制端说明:/SCLR(10脚): 复位引脚,低电平时将移位寄存器的数据清零。

一般情况下接Vcc。

SCK(11脚):时钟引脚,上升沿时数据寄存器的数据移位。

QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

RCK(12脚):锁存引脚,上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了),更新显示数据。

/G(13脚): 使能引脚。

高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力,通常可以直接接地GND。

A(14脚):数据串入引脚。

74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。

这在串行速度慢的场合很有用处,数码管没有闪烁感。

74HC595还具有SPI功能,但在本例中我们先不使用,我们直接用单片机的普通I/O口模拟74HC595的时序来实现数据的串入并出功能。

从74HC595的逻辑功能表中我们可以分析出74HC595的工作过程:数据的串入和内部数据移位的操作由SCLK控制。

SCLK 的上升沿将移位寄存器中的数据由Qa向Qh依次移动一位,同时将数据线上的电平打入Qa,而最高位的数据Qh从SQh端移出。

如果把SQh与另一片74HC595的数据端连接,那么SQh的串行输出就是第2片74HC595的串行数据输入,从而实现级联。

74HC595在移位的过程中并不影响其锁存器的输出,移位寄存器中的数据是通过锁存端的上升沿打入到锁存器中的。

正是由于74HC595具备了锁存功能,因而可以保证并行输出数据的稳定和数据同步改变的功能。

经过以上分析我们可以得出74HC595控制数据输入输出的实现步骤:1、在SCLK上升沿期间将数据端串入的数据经过发送到移位寄存器中,如果需要发送8位的数据,则需要8个SCLK上升沿才能将8位数据全部输入到移位寄存器中。

2、使锁存端产生一个上升沿,从而将移位寄存器中的数据打入到锁存器中并输出。

本实例中8位数码管显示电路的工作原理:8位数码管的8个段选端口全部并联接到单片机的PB口上。

74HC595控制8位数码管的8个位选端,当某位选通后,点亮该位的数码管,使它显示相应的数字。

3. 实验原理图(Protues仿真图)四、实验操作步骤1. JP595用跳线冒短接,JP1302跳线帽断接或取下,JP3和JP2 用8PIN排线连接。

2.用数据线将单片机开发板与PC机连接好。

3.打开Keil软件,新建一个工程(记住工程所保存的位置),将所给HC595_LED.c(或HC595_LED.asm)文件添加到这个工程中,然后进行编译,编译完成后,打开工程所保存的文件夹,可以看到此工程中生成了一个HC595_LED.hex的文件。

4.打开烧录软件,单击窗口中的“打开文件”,选中上述生成的HC595_LED.hex的文件,然后打开单片机开发板的电源,再单击烧录软件窗口中的“下载程序”,当窗口中出现“文件下载完毕,数据下载成功”字样后,程序下载成功。

5.程序下载成功后,观察单片机开发板上静态数码管的现象:最开始静态数码管会显示数字2,然后依次跳变为3,4,5,6,7,8,9,A,B,C,D,E,F。

显示F后会跳变为0,再依次增加,循环显示0-F。

如果想再次从头观察现象可以按复位键RSTK。

6.实验完成后,先关闭单片机开发板的电源,再将接线拆下,最后要将实验仪器放回原处。

五、实验流程图六、小结1. 通过此例程,可以熟悉我们所使用的C51单片机开发板,了解74HC595芯片和数码管的构造和原理,理解串入并出的原理与方法,也更进一步熟练Protues仿真图的制作。

2. 作此实验之前最好先查一些资料,了解本例程所要用的C51芯片、74HC595芯片和数码管,了解它们各引脚的作用和工作原理,帮助看懂此例程的程序和仿真图。

3. 仿真图中所用芯片可能与开发板上的或程序所给的不是同一款,但它们可以实现相同的功能,通过了解各引脚功能可得知它们引脚的对应关系。

七、实物图。

相关文档
最新文档