赞
踩
目录
本文详细介绍了7段数码管的显示原理,并介绍了共阳极和共阴极类型的控制方法。还对74HC595串转并行芯片做了介绍,包括工作原理、时序分析等类型。还是用Arduino板卡驱动了4位时钟类型的数码管,实现其驱动程序,并完成测试验证。
源代码下载地址:arduino-HC595-SMG4:驱动4个数码管,使用74HC595驱动资源-CSDN文库
7段数码管是一种电子显示器件,用于显示数字和字母字符。它由7个LED(发光二极管)组成,可以显示0到9的数字以及A到F的字母。
每个LED都有一个阴极和一个阳极。阴极被连接到一个共阳极电源,而阳极则是通过控制电路来控制的。7段数码管的显示原理是通过控制不同的LED亮灭来显示不同的数字或字母。通过控制各个LED的阴极和阳极,可以实现各种数字和字母的组合显示。为了方便控制,通常使用了多路复用技术。在多路复用模式下,通过不同的电信号控制各个LED的阴极,从而实现显示不同的字符。除了数字和字母,7段数码管还可以显示一些特殊的符号,如小数点、减号等。这些符号通常使用额外的LED来实现。
总之,7段数码管是一种常用的电子显示器件,通过控制LED的亮灭来显示数字、字母和一些特殊符号。它在计算器、电子钟表、仪器仪表等领域得到广泛应用。
共阳极数码管(Common Anode LED Display)是一种LED数字显示器件,它的每个数字由多个LED组成。它们通常具有共阳极(common anode)的极性,即所有的阳极都通过一个共阳极连接在一起,而每个LED的阴极则单独连接。
在共阳极数码管中,当需要显示某个特定数字时,只有该数字对应的LED会被激活,其他LED则保持关闭。通过控制各个LED的开关状态,可以实现显示不同的数字。
下图为共阳极LED结构如:
DIG-1, DIG-2,DGI-3,DIG-4为阳极,和驱动电路的VCC相连,A,B,C,D,E,F,G为控制引脚,改变该电平的状态。控制LED的亮灭,已实现实现相应的数据。
共阴极数码管(Common Cathode Digital Tube)是一种常见的显示器件,用于显示数字、字母和符号等信息。共阴极数码管由多个LED(发光二极管)组成,每个LED代表一个数字或字符的一部分。每个LED的阳极连接在一起,而阴极则分别与控制电路相连。
在共阴极数码管中,当某个LED的阴极接地时,该LED会亮起。通过控制电路,可以选择性地点亮某个或某些LED,从而显示出特定的数字或字符。共阴极数码管通常使用多位共阴极数码管,每个位置上有一个数码管。在显示一个数字时,需要依次点亮各个位置上的数码管。通过不断地改变电压和电流的控制,可以实现数码管上数字的刷新,从而呈现出连续的数字显示效果。
下图为共阴极LED结构如:
DIG-1, DIG-2,DGI-3,DIG-4为阴极,和驱动电路的GNG相连,A,B,C,D,E,F,G为控制引脚,改变该电平的状态。控制LED的亮灭,已实现实现相应的数据。
4为可显示时间段位共阳极LED模块使用74HC579驱动,对外有5个引脚,其定义参看下图
VCC: 电源引脚(3 ~ 5.2 V)
GND: 公共地
SDIO: 数据输入
LOAD: 锁存器时钟
SCLK:移位寄存器时钟
该模块有两个74HC595芯片,一个芯片的并行输出数据和LED的段位(a,b,c,d,e,f,g,dp)连接起来,另外一个引脚和4个数码管的共阳极连接起来。
74HC595是一种8位串行至并行移位寄存器,用于控制数字输出信号。它可以通过串行数据输入来控制8个数字输出引脚,并且可以级联多个74HC595寄存器以扩展输出数量。
74HC595寄存器具有以下主要特点:
高速操作:它可以在时钟信号的控制下将串行输入数据转换为并行输出数据,具有快速的数据传输速度。
扩展能力:通过级联多个74HC595寄存器,可以实现更多的输出引脚,从而扩展数字输出的能力。
串行输入:它具有一个串行输入引脚(SER),可以通过串行输入将数据传递给寄存器。
并行输出:它具有8个并行输出引脚(Q0-Q7),可以控制8个数字输出信号。
控制引脚:它具有时钟引脚(SRCLK)用于控制数据传输的时钟信号,锁存时钟引脚(RCLK)用于锁存并行输出数据,以及输出使能引脚(OE)用于控制输出的使能。
低功耗:74HC595寄存器具有低功耗特性,适用于电池供电设备或需要节能的应用。
应用广泛:由于其灵活性和易用性,74HC595寄存器广泛应用于各种数字输出控制应用,如LED显示屏控制、数码管控制、电机控制等。
总的来说,74HC595是一种常用的数字输出控制芯片,具有高速操作、扩展能力强和低功耗等特点,在各种数字控制应用中具有广泛的应用价值。
关于74HC595的详细资料,参考下列文档:
SNx4HC595 8-Bit Shift Registers With 3-State Output Registers datasheet (Rev. J) (ti.com)
下图为74HC595的硬件原理图:
由上图可知:
OE: 并行输出数据使能,低电平时有效
RCLK: 锁存寄存器时钟引脚,上升沿有效
SRCLK:移位寄存器时钟引脚,上升沿有效
SER: 数据输入引脚
SRCKR: 数据清除引脚,低电平有效
其具体功能定义如下:
下面使用一段代码来介绍74HC595的控制方法
- void hc595_send(unsigned char dat) {
- unsigned char i;
- for (i = 0; i < 8; i++) {
- SCK = 0;
- SER = dat & 0x80; // 从高位开始发送数据
- dat <<= 1;
- SCK = 1;
- }
- RCK = 1; // 移位完成,数据存储
- delay(1);
- RCK = 0;
- }
原理框图:
模块驱动引脚与Arduino UNO主板之间关系:
模块引脚 | Arduino UNO 引脚 | 注释 |
---|---|---|
RCLK | PIN-12 | 数据锁存器时钟 |
SCLK | PIN-13 | 移位寄存器时钟 |
DIO | PIN-11 | 数据输入 |
1) 定时器产生1000ms中断,用于产生
2)4为数码管上显示0~9999数据
3)使能" : "
由数据码的实现原理可知,只需将dp引脚置高(共阴极)或者置地(共阳极),即可以控制这个显示位。
由上图可得,dp 处于一个byte的最高位 bit-7, a~g对应是bit0~bit6。对于4个数据的数码管,时钟“:”处在第三个数据码的dp bit-7上,所以,控制它的方法如下:
使用Arduino IDE编写和编译代码
详细代码如下:
- /***************************************************************
- Copyright 2024-2029. All rights reserved.
- 文件名 : arduino_HC595_SMG4.ino
- 作者 : tangmingfei2013@126.com
- 版本 : V1.0
- 描述 : 显示0~9999数据
- 其他 : 无
- 日志 : 初版V1.0 2024/02/23
- ***************************************************************/
- #include <MsTimer2.h>
-
- int latchPin=12; // 74HC595 - rclk
- int clockPin=13; // 74HC595 - sclk
- int dataPin=11; // 74HC595 - sdi
-
- unsigned char smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
-
- unsigned char bitMa[] = {0x01, 0x02, 0x04, 0x08};
-
- unsigned int cnt = 0;
-
- void timer_irq()
- {
- cnt++;
- }
-
- void setup() {
- pinMode(latchPin, OUTPUT);
- pinMode(clockPin, OUTPUT);
- pinMode(dataPin, OUTPUT);
-
- // 中断设置函数,每 500ms 进入一次中断
- MsTimer2::set(1000, timer_irq);
- //开始计时
- MsTimer2::start();
- }
-
- void display( unsigned char duan, unsigned char ch)
- {
- unsigned char temp;
-
- digitalWrite(latchPin,LOW); //低电位表示启动
-
- temp = ~smgduan[duan];
- if( ch == 2 )
- {
- temp = temp & (~0x80);
- }
- shiftOut(dataPin,clockPin,MSBFIRST,temp);
- shiftOut(dataPin,clockPin,MSBFIRST,bitMa[ch]);
-
- digitalWrite(latchPin,HIGH); //高电位表示停止
- }
-
- void loop()
- {
- unsigned char weibuff[4], i;
-
- weibuff[0] = (cnt%100)%10;
- weibuff[1] = (cnt%100)/10;
- weibuff[2] = (cnt%1000)/100;
- weibuff[3] = cnt/1000;
- for( i =0; i < 4; i++ )
- {
- display( weibuff[i] , i );
- }
-
- if( cnt > 9999 )
- cnt = 0;
- }

编译代码,然后将其下载到板卡中,可以看见,数码管上数据1s的时间间隔累加,且“:”也能正常的显示出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。