Arduino与74HC595驱动8位数码管

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


一、74HC595介绍

这是该芯片图片(图片来源于网络)
Arduino与74HC595驱动8位数码管

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脚 电源

引脚图如图(图片来源于百度百科)
Arduino与74HC595驱动8位数码管

  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]);
        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://blog.51cto.com/u_14972704/3018132

- 本文内容来自网络,如有侵权,请联系本站处理。

2024-07   阅读(39)   评论(0)
 标签: 创客 Arduino 74HC595 数码管

涨知识
二进制

二进制(binary),发现者莱布尼茨,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。

评论:
相关文章
ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。


Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


74HC595D使用方法(附接线、级联、程序)

74HC595是一个8位串行输入、并行输出的位移缓存器。并行输出为三态输出。


用积木拼出时间?乐高还是太全面了!

从一秒一秒的跳动齿条,到能“炫技”的飞返计时,再到用乐高拼出的“七段数码管”


Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。



Arduino 随机数

要生成随机数,可以使用Arduino随机数函数random()。


Arduino 字符串用法汇总

本文收集整理在Arduino环境下字符串的相关用法,供参考。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。