arduino与74HC595驱动8位数码管(含代码)

本文详细介绍了如何使用Arduino配合74HC595芯片驱动8位数码管。74HC595是一款8位移位寄存器,通过3个控制引脚实现对8个输出引脚的控制。文章阐述了74HC595的工作原理,并提供了具体的代码示例,展示了如何通过shiftOut函数实现数码管的数字显示。数码管采用共阴极连接,代码已验证可显示0-9的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

材料介绍:一块arduino,若干杜邦线,一块数码管,一块74HC595芯片,


一、74HC595介绍

这是该芯片图片(图片来源于网络)
在这里插入图片描述

74HC595 简单说来就是具有8位移位寄存器和一个存储器,通过该芯片可以实现3控8。简单来说就是通过3个数字引脚控制8个其它引脚。比如说用该芯片和三个arduino数字引脚来控制一个8位共阴数码管。

二、74HC595原理

1.原理简介

74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

2.引脚说明及其图示

符号引脚描述
Q0–Q7第15脚, 第1-7脚8位并行数据输出
GND第8脚
Q7’第9脚串行数据输出
/MR第10脚主复位(低电平有效)
SH_CP第11脚数据输入时钟线
ST_CP第12脚输出存储器锁存时钟线
/OE第13脚输出有效(低电平有效)
DS第14脚串行数据输入
VCC第16脚电源

引脚图如图(图片来源于百度百科)
在这里插入图片描述

  1. GND接地,VCC接5V电源
  2. Q0-Q7这8根引脚直接跟数码管的8段引脚相连。
  3. DS接到arduino任意一个GPIO口上(输出模式)。
  4. SHCP是移位寄存器的时钟引脚。74HC595内部有一个8位的移位寄存器用来保存从DS引脚输入的数据。74HC595通过SHCP这个时钟引脚来实现信息获取。只有在SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据(高/低电平)并把取到的这一位数据保存到移位寄存器里。这个引脚也接到arduino任意一个GPIO口上。当我们向芯片发送数据时,要先在DS引脚上准备好要传送的数据,然后制造一次SHCP引脚的上升沿(先拉低电平再拉高电平)。
  5. STCP是芯片内部另外一个8位锁存寄存器的时钟引脚。当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)。74HC595会在这个上升沿将移位寄存器里的8位数据复制到锁存器中(锁存器里原来的数据将被替换)。注意,到这里为止,这8位数据还只是被保存在锁存器里,并没有输出到数码管上。这个引脚同样连接到arduino任意一个GPIO口上即可。
  6. OE是输出使能引脚,在其他芯片里也很常见。作用是控制锁存器里的数据是否最终输出到Q0-Q7输出引脚上。低电平时输出,高电平时不输出(既不是高电平,也不是低电平而是高阻态,不通电)。本例为了方便直接接在GND上使其一直保持低电平输出数据。
  7. MR是用来重置内部寄存器的引脚。低电平时重置内部寄存器(MemoryReset?)。本例为了方便直接连接在Vcc上一直保持高电平
  8. Q7S引脚,串行输出引脚,我并没有用到,所以不接

关于工作原理有大神做了动画
在这里插入图片描述

三、具体代码

我的数码管是共阴的我在做的时候这些数字是试出来的所有复制代码可能会有不同。
中间用到一个shiftOut函数

shiftOut (uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val) 

名为:位移输出函数
输入value数据后Arduino会自动把数据移动分配到8个并行输出端. 其中dataPin为连接DS的引脚号, clockPin为连接SH_CP的引脚号, bitOrder为设置数据位移顺序, 分别为高位先入MSBFIRST或者低位先入LSBFIRST.

具体实现代码如下


int latchPin =4;
int clockPin = 3;
int dataPin=2;
int arr[10]={126,72,188,182,210,230,238,50,254,242};

void setup() 
{pinMode(latchPin,OUTPUT);
 pinMode(clockPin,OUTPUT);
 pinMode(dataPin,OUTPUT);
 
}

void loop(){
  for(int n=0;n<10;n++){
     Serial.begin(9600);
     digitalWrite(latchPin,LOW);//准备接收数据
     shiftOut(dataPin,clockPin,LSBFIRST,arr[n]);
  //Serial.println(a);
     digitalWrite(latchPin,HIGH);//恢复高电平,传递数
     delay(1000);
  }
  
//0 126 
//1 72
//2 188
//3 182
//4 210
//5 230
//6 238
//7 50
//8 254
//9 242
}

已经实践过 具体显示数字从0-9
其中DS接入数字引脚2
STCP接入数字引脚 3
SHCP接入数字引脚4


总结

部分资料来源于网络
转自:https://arduino.nxez.com/2016/12/20/74hc595-chip-principle-and-arduino-use-example.html
和百度百科。

### 如何将 VirtualBox 虚拟机存储置设置为 D 盘 通过调整 VirtualBox 的全局配置以及手动迁移现有虚拟机文件的方式,可以实现将虚拟机的存储置更改为 D 盘。以下是具体的操作说明: #### 修改默认存储路径 进入 VirtualBox 工具栏中的 **“管理”** 功能模块,在其中找到并打开 **“全局设定”** 页面[^2]。在此页面中,可以通过更改默认的虚拟机存储目录来指定新的路径(例如 `D:\VirtualMachines`)。完成此操作后,后续创建的新虚拟机会自动保存至该新路径下。 #### 迁移已有虚拟机到目标驱动器 对于已经存在的虚拟机实例,如果它们当前于 C 盘,则需执行以下步骤将其迁移到 D 监: 1. 手动复制现有的 `.vbox` 和对应的 `.vdi` 文件夹至期望的目标(比如 D:); 2. 使用命令行工具或者图形界面重新注册这些已移动过的机器回 VirtualBox 中去;注意此时可能还需要更新某些内部链接地址以匹配实际变动后的物理存放地点情况。 此外,在整个过程中确保完全关闭所有运行状态下的相关联程序和服务是非常重要的一步措施之一[^3] ,这样能够有效防止数据丢失或损坏等问题的发生几率降到最低限度之内。 ```bash VBoxManage modifyhd "path_to_your_vdi_file_on_D_drive.vdi" --resize new_size_in_MB ``` 上述脚本展示了如何利用 VBoxManage 命令扩展 VDI 镜像大小的例子 。这同样适用于当您希望增加分配给特定操作系统使用的硬盘空间容量时的情境之下应用起来非常方便快捷而且效率极高。 最后提醒一下关于不同平台之间互相转换的时候要注意兼容性问题[^4], 特别是在涉及到硬件抽象层差异较大的场景下面临挑战更大一些.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁六加.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值