两个74HC595D驱动芯片控制三位数码管显示

概述

74HC595D芯片主要用于驱动点阵屏或者多位数码管显示等。如果不加驱动芯片,单纯用单片机来控制点阵屏或者数码管来显示,那就会浪费很多资源。
拿数码管为例,控制一个数码管需要8个io引脚,如果是N个数码管,则需要用到N*8个io口,对于单片机来说占用引脚太多,有些单片机引脚未必够,或者占用了可以复用的外设引脚,资源很浪费,而且单片机引脚电流就几十毫安,占用太多会导致供电电流不足,反而驱动不了多个数码管。
74HC595D就很好解决这个问题,总共需要3个引脚:PCLK,SCLK,DIO,给它5v供电,通过写入寄存器值的方式来控制数码管显示,多个数码管显示就需要两个74HC595D,以级联方式来控制显示。下面主要讲述控制3个数码管显示的,单片机是STM32F4系列的。

一.数码管引脚及使用概述

数码管:4301BS 3位共阳数码管
产品链接

1.1位数码管显示方式

1位数码引脚图
A~DP分别由8个引脚控制,因为是共阳极,给低电平则能点亮一个管,比如数字“1”,则给BC段低电平。

2.3位数码管

3位数码管

3.3位数码管电路图

3位数码管电路图
1.3位数码管和1位的不一样,三个数码管共用A~DP 8段引脚;
2.三个数码管各自引出一个引脚,这叫位引脚;
3.A~DP引脚下的数字,对应数码管的引脚顺序,左下角第一根引脚为顺序1;
4.控制3位数码管,首先通过位引脚选择需要的数码管,然后再控制段引脚输出,就能显示了,循环选择输出数码管,就能看到多位显示了。

二.74HC595D引脚及使用概述

1. 74HC595引脚图

74HC595
|

引脚 用途
Vcc 5v供电
GND 接地
QA~QH 8个段选引脚,引脚电平控制数码管亮灭
SER 数据输入
RCK 锁存引脚,锁存时钟线
SCK 时钟线
SCLR 移位寄存器清零端 ,一般接VCC
G 接地
Q’ H 超过8位数据,移位输出,相当于移位寄存器

1.使用此模块,只需要3个引脚,就能控制数码管显示,分别是RCK,SCK,SER(DIO),控制方式为串行输出控制。
2.连接方式:数码管8个引脚接到74HC595的QA~QH上,74HC595的RCK,SCK,SER(DIO)接到单片机上。
3控制方式:通过单片机给SER(DIO)移位输出一个字节的方式,控制数码管显示;.一个字节的8bit代表数码管A~DP的显示,所以说一个字节就能控制一个数码管显示;
4.A~DP,低位在前,高位在后,A为最低比特位,以此类推。比如显示“0”,则输入0xC0。
5.如果输入74HC595的数据超过8bit,则74HC595的 Q’ H 会把多余的bit位移位输出,先进先出,所以一般Q’ H 用于级联多个74HC595芯片。

2.两个74HC595D级联电路图

74HC595D级联
如上图所示,两个74HC595级联控制3位数码管显示:
1.左边的74HC595为位选,负责选择哪个数码管;右边的74HC595为段选,负责数码管显示;
2.左边的74HC595的4个DIG是数码管四个位选引脚,连接在QA~QD串行输出端上,最大能控制8个数码管,段选引脚对应地址为0x01,0x02,0x03,0x04…,按比特位以此类推,DIO为输入引脚,负责把单片机传过来的数据移位输入进去,当数据大于8bit位时,Q’H会按先进先出方式移位输出bit数据。
3.图中左边的74HC595的Q’H连接到右边74HC595的SER上,就说左边的74HC595多出的数据传到下个74HC595上,形成级联。
4.所以控制3位数码管的方式就是:从左边开始,单片机往DIO口先输入1字节的段选信号(比如显示“0”,输入0xC0),这是左边的74HC595的QA~QH为0xC0;然后单片机往DIO口输入1字节的位选信号(比如要第二个数码管显示,输入0x02)。但是左边的74HC595的QA-QH原本有数据0xC0了,这时挤进来一个0x02,则左边的74HC595的Q’H把0xC0按移位挤到右边的74HC595;最终左边的74HC595数据为0x02,右边的74HC595数据为0xC0,第二个数码管显示为0;
5.按4所述,加入循环,3位数码管不停输出,则数码管一直显示3位数据。

三.利用程序控制三位数码管

主控芯片:STM32F4
74HC595.c

#
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
下面是一个简单的示例代码,可以通过74HC595驱动芯片控制4位共阳数码管显示数字。 ```c #include <stdio.h> #include <wiringPi.h> // 定义74HC595芯片引脚 #define DS 0 // 数据输入 #define STCP 1 // 存储器时钟 #define SHCP 2 // 移位寄存器时钟 // 数码管显示数字对应的编码 unsigned char numCode[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 向74HC595芯片写入数据 void writeByte(unsigned char byte) { int i; for (i = 0; i < 8; i++) { digitalWrite(DS, (byte >> (7 - i)) & 0x01); digitalWrite(SHCP, HIGH); digitalWrite(SHCP, LOW); } digitalWrite(STCP, HIGH); digitalWrite(STCP, LOW); } // 在数码管上显示数字 void showNum(unsigned char num) { unsigned char code[4]; code[0] = numCode[num / 1000 % 10]; code[1] = numCode[num / 100 % 10]; code[2] = numCode[num / 10 % 10]; code[3] = numCode[num % 10]; int i; for (i = 0; i < 4; i++) { writeByte(1 << i); writeByte(code[3 - i]); } } int main() { if (wiringPiSetup() == -1) { printf("wiringPi setup failed!"); return 1; } pinMode(DS, OUTPUT); // 数据输入 pinMode(STCP, OUTPUT); // 存储器时钟 pinMode(SHCP, OUTPUT); // 移位寄存器时钟 while (1) { int num = 1234; // 要显示的数字 showNum(num); delay(1000); // 延时1秒 } return 0; } ``` 该代码通过wiringPi库控制GPIO口,将数据写入74HC595芯片,再通过控制芯片的输出,控制数码管显示数字。在while循环中,可以修改要显示的数字,实现不同的显示效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值