Note-01.arduino和74hc595的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Note-01.arduino和74hc595的使用相关的知识,希望对你有一定的参考价值。
参考技术A当我们在搭建arduino项目时,时常因为需要接入按钮、传感器、舵机、LED等而遇到I/O口不足的问题,此时就需要使用到74HC595。
74HC595是一个8位串行输入、并行输出(SIPO,Serial-In-Parallel-Out)的移位寄存器。其具有8个输出引脚,而只需要3个输入引脚。并可以串接多个IC实现更多输出引脚需求。
引脚图
工作原理
74HC595具有2个寄存器(可理解为2个存储容器),每个可以存储8位(bit)数据。
实验1:使用Arduino和74HC595控制LED
实验材料
面包板视图
Arduino代码
代码解析
byte数据类型为8位(bit),刚好能对应8个输出以及8个led。
bitSet(x, n):设置变量的某一位(位置为1)。
updateShiftReg()函数首先将latch锁存引脚置为低电平,然后调用shiftOut()移位函数,然后再将latch锁存引脚置为高电平实现输出。
shiftOut(dataPin, clockPin, bitOrder, value)函数可以实现每次调用时对寄存器进行移位操作。
实验二:使用PWM控制LED的亮度
原理:
通过控制IC的OE引脚来控制LED的亮度。OE(Output Enable)引脚位低电平有效,高电平时位禁止输出,低电平时为正常输出。当通过analogWrite() 函数使用PWM控制,则可以实现LED的亮度调节。
实际再PWM的高电平时,OE引脚会短暂的金庸IC输出,但此过程高于人眼所能感知的频率,因此能实现亮度明暗的变化。
面包板视图
Arduino代码
实践:注意确认引脚连接无误后再接通电源
视频:文章修改时无法添加视频
74hc595存储寄存器引脚是否可以悬空?他的原理是否让数据暂停?
74HC595 的工作原理 74HC595 的工作原理-编程-显示 SCH 74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存 储器是分别的时钟。 数据在 11 SHcp(SCLK P0.4)的上升沿输入,在 12 STcp(nCS P0.8)的上升 P0.4) P0.8) ( ( 沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个 脉冲。 移位寄存器有一个串行移位输入 14 (Ds) P0.6) 和一个串行输出 9 (Q7’) MISO (MOSI P0.6), ( P0.5) P0.5),和一个异步的低电平复位,存储寄存器有一个并行 8 位的,具备三态的总线输出,当 使能 OE 时(为低电平),存储寄存器的数据输出到总线。 74HC595 各个引脚的功能: Q1~7 是并行数据输出口,即储寄存器的数据输出口 Q7' 串行输出口,其应该接 SPI 总线的 MISO 接口 STcp 存储寄存器的时钟脉冲输入口 SHcp 移位寄存器的时钟脉冲输入口 OE 的非 输出使能端 MR 的非 芯片复位端 Ds 串行数据输入端 程序说明: 每当 SHcp(SCLK)(SCLK P0.4)上升沿到来时,DS(MOSI P0.6) P0.4) ( (MOSI P0.6)引脚当前电平值 在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位, 同时 Q7'( MISO) ( MISO P0.5) P0.5)也会串行输出移位寄存器中高位的值,这样连续进行 8 次,就 可以把数组中每一个数(8 位的数)送到移位寄存器;然后当 STcp(nCS)(nCS P0.8)上升 P0.8) ( 沿到来时,移位寄存器的值将会被锁存到锁存器里,并从 Q1~7 引脚输出。 //74HC595 串行输出数据 void outdisp(unsigned char num) unsigned char i; for (i=0;i<8;i++ ) DS=num; SHCP=1; SHCP=0; num<<=1; 设计显示 PCB 板(595 一为传送位选信号,一为传送代码段信号) CEPARK AVR 单片机 之 HC595 驱动数码管显示 (2009-09-16 17:30:13) 标签: 分类:Avr it 这里我用的 CEPARK 的 M64 AVR 开发板,这一课的重点是学会如何使用 74HC595 来驱动数码管。 74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时 钟。数据在 SHcp 的上升沿输入,在 STcp 的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移 位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’), 和一个异步的低电平复位,存储寄存器有一个并行 8 位的,具备三态的总线输出,当使能 OE 时(为低电 平),存储寄存器的数据输出到总线。 引脚说明: QA--QH: 八位并行输出端,可以直接控制数码管的 8 个段。 QH': 级联输出端。我将它接下一个 595 的 SI 端。 SER(DS): 串行数据输入端。 74595 的控制端说明: /SCLR(MR)(10 脚): 低点平时将移位寄存器的数据清零。通常我将它接 Vcc。 SCK(SHCP)(11 脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据 不变。(脉冲宽度:5V 时,大于几十纳秒就行了。我通常都选微秒级) RCK(STCP)(12 脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通 常我将 RCK 置为低电平,当移位结束后,在 RCK 端产生一个正脉冲(5V 时,大于几十纳秒就行了。我通常 都选微秒级),更新显示数据。 /G(OE)(13 脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便 地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 注:74164 和 74595 功能相仿,都是 8 位串行输入转并行输出移位寄存器。74164 的驱动电流(25mA)比 74595(35mA)的要小,14 脚封装,体积也小一些。 74595 的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度 慢的场合很有用处,数码管没有闪烁感。 与 164 只有数据清零端相比,595 还多有输出端时能/禁止控制端,可以使输出为高阻态。 注明:74HC595 引脚命名我现在看到两种,如串行数据输入端(14 脚)有的 Datasheet 上叫 SER,还有一种 叫 DS。不过这都没有关系,只是名字不一样,大家看这些文档时,注意点就行。 现在大家对 595 有了一定的了解,现在我们看 CEPARK AVR 单片机开发板上这一部分的原理图: 大家这里只要注意 11,12,14 这三个引脚由单片机的哪几个口控制就好。 SHCP(11)-----------PG0 STCP(12)-----------PG1 DS(14)-------------PG2 下面是源程序: 效果:第一位和第二位数码管显示 5; #include <avr/io.h> #include <util/delay.h> #define SER_PORT PORTG //PG 口 #define SER_DATA PG2 //DS,串行数据入口 #define SER_RCK PG1 //STCP,来一个上升沿时数据进入并行输出 #define SER_SCK PG0 //SHCP,来一个上升沿时数据移位 unsigned char Led_Disbuf[10]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; //共阳极 void Send_Byte_HC595(unsigned char byte) //并行数据移位输出函数 一个数码管亮 //byte 是表示我们想哪一位数码管亮, 如为 0x01,表示第 unsigned char i; //循环变量 for(i = 0;i < 8;i++) if(byte & 0x80) SER_PORT |= _BV(SER_DATA); //PG2 输出 1 else SER_PORT &= ~_BV(SER_DATA);//PG2 输出 0 SER_PORT |= _BV(SER_SCK); //上升沿触发,SER_DATA 数据进入移位寄存器 _delay_us(5); SER_PORT &= ~_BV(SER_SCK); byte <<= 1; //通过左移,逐个点亮个个数码管 SER_PORT |= _BV(SER_RCK); //上升沿触发,移位寄存器中的数据并行输出 _delay_us(5); SER_PORT &= ~_BV(SER_RCK); int main(void) PORTB = 0xff; //PB 口赋初值为 ff DDRB = 0xff; //PB 口为输出态 PORTG = 0x00; //PG 口赋初值为 0 DDRG |= _BV(SER_DATA)|_BV(SER_RCK)|_BV(SER_SCK); //PG0,PG1,PG2 为输出态 PORTB = Led_Disbuf[5]; //数码管上显示 5 Send_Byte_HC595(0x03); //第一位,第二位数码管点亮 while(1) ; 参考技术A 74HC595是硅结构的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×VCC^2×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”)出现在串行输出位。 × ↑ L H × NC Qn’ 移位寄存器的内容到达保持寄存器并从并口输出 ↑ ↑ L H × Q6’ Qn’ 移位寄存器内容移入,先前的移位寄存器的内容到达保持寄存器并出。 编辑本段注释 H=高电平状态 L=低电平状态 ↑=上升沿 ↓=下降沿 Z=高阻 NC=无变化 ×=无效 当MR为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。 编辑本段程序样例 void HC595_senddata(unsigned char dat) unsigned char i; for(i=0;i<8;i++) //发送一个八位数据 if((dat=dat<<i)&0x80==0)MOSIO=0; //第i位为0时,MOSIO发送0; else MOSIO=1; //否则发送1; SH_CLK=0; //SH_CLK的上升沿,将数据送进移位寄存器; NOP(); NOP(); SH_CLK=1; ST_CLK=0; //ST_CLK的上升沿,将数据由移位寄存器送到存储寄存器 NOP(); //并输出到Q0—Q7并口 NOP(); ST_CLK=1; 大致上就是这样子,把MOSIO输入的串行数据,转换到Q0—Q7的并行输出,我用的595芯片,输出是反向的,即是输入1时,输出为0 参考技术B 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出
(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使
能 OE时(为低电平),存储寄存器的数据输出到总线。
74HC595各个引脚的功能:
Q1~7 是并行数据输出口,即储寄存器的数据输出口
Q7' 串行输出口,其应该接SPI总线的MISO接口
STcp 存储寄存器的时钟脉冲输入口
SHcp 移位寄存器的时钟脉冲输入口
OE的非 输出使能端
MR的非 芯片复位端
Ds 串行数据输入端
程序说明:
每当spi_shcp上升沿到来时,spi_ds引脚当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,
同时Q7'也会串行输出移位寄存器中高位的值,
这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;
然后当spi_stcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1~7引脚输出 参考技术C Q0--Q7应该可以悬空,输出是三态门;输入端、复位端、使能端等就不能悬空了,外部信号对其干扰会使其无法正常工作。串入串出/并出移位寄存器,将串行信号变成并行信号,或者串行输出。应该类似74164 参考技术D 4HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位
寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出
(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使
能 OE时(为低电平),存储寄存器的数据输出到总线。
74HC595各个引脚的功能:
Q1~7 是并行数据输出口,即储寄存器的数据输出口
Q7' 串行输出口,其应该接SPI总线的MISO接口
STcp 存储寄存器的时钟脉冲输入口
SHcp 移位寄存器的时钟脉冲输入口
OE的非 输出使能端
MR的非 芯片复位端
Ds 串行数据输入端
以上是关于Note-01.arduino和74hc595的使用的主要内容,如果未能解决你的问题,请参考以下文章
74hc595存储寄存器引脚是否可以悬空?他的原理是否让数据暂停?