74HC595 的使用

news/2024/11/7 20:02:54/

1.以下是74HC595控制数码管的电路图原理图:
在这里插入图片描述
封装图:
在这里插入图片描述

注意:2在这里插入图片描述
VCC与GND 之间接滤波电容一定要遵循就近原则,如果线过长,不但起不到滤波的目的,还会将外界的杂波引入元件之中,对元件的工作造成严重影响,
stm32 的初始化程序如下(没使用定时器的程序如下):
以下是hc595.c
//初始化PA0、PA1和PA2为输出口,并使能这个端口的时钟
//HC595 IO初始化
void HC595_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 							//使能PA端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;	//端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 								//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);						 //PA0,1,2 输出高

}

void HC595_Display(unsigned char Bai, unsigned char Shi, unsigned char Ge)
{
uchar k;
uchar n = Ge;
uchar m = Shi;
uchar x = Bai;
for(k=0;k<8;k++)
{
if(n&0x80) HC595_SDI = 1;
else HC595_SDI = 0; //判断当前发送位数据
n <<= 1; //左移一位
HC595_CLK = 0;
//delay_ms(1);
HC595_CLK = 1; //移位寄存器操作
//delay_ms(1);
}
for(k=0;k<8;k++)
{
if(m&0x80)HC595_SDI =1;
else HC595_SDI = 0; //判断当前发送位数据
m <<= 1; //左移一位
HC595_CLK = 0;
//delay_ms(1);
HC595_CLK = 1; //移位寄存器操作
//delay_ms(1);
}

for(k=0;k<8;k++)
{if(x&0x80)HC595_SDI =1;else HC595_SDI = 0;		//判断当前发送位数据x <<= 1;							//左移一位HC595_CLK = 0;//delay_ms(1);HC595_CLK = 1;       	//移位寄存器操作//delay_ms(1);
}HC595_LE = 1;
//delay_ms(1);
HC595_LE = 0;			//锁存数据
//delay_ms(1);

}
这是main.c 中的代码
unsigned char Qian_Wei,Bai_Wei,Shi_Wei,Ge_Wei; //千位,百位,十位,个位
//数码管编码
unsigned char table[] =
{0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0xff,0x00,0x90,0x86,0xaf,
0xc0,0x89,0xc7,0x8e,0xc1,0x7f};
//0,1,2,3,4,5,6,7,8,9,全暗,全亮,g,E,r,O,H,L,F,U,小数点,共阳数码管使用
int main(void)
{
int a, b, c, d;
a = 0;//这些常量置0,否则后面显示会出问题
b = 0;
c = 0;
d = 0;
SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz
delay_init(72); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //LED端口初始化
HC595_Init();

//清空LED数码管
Bai_Wei = table[10];//清空LED
Shi_Wei = table[10];//清空LED
Ge_Wei = table[10];//清空LED
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(3000);//依次测试百位至个位全亮
Bai_Wei = table[11];//百位全亮
Shi_Wei = table[10];//清空LED
Ge_Wei = table[10];//清空LED
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[10];//清空LED
Shi_Wei = table[11];//十位全亮
Ge_Wei = table[10];//清空LED
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[10];//清空LED
Shi_Wei = table[10];//清空LED
Ge_Wei = table[11];//个位全亮
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);//同时显示0~9
Bai_Wei = table[0];
Shi_Wei = table[0];
Ge_Wei = table[0];
HC595_Display(Bai_Wei, Shi_Wei, Ge_Wei);
delay_ms(2000);
Bai_Wei = table[1];
Shi_Wei = table[1];
Ge_Wei = table[1];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[2];
Shi_Wei = table[2];
Ge_Wei = table[2];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[3];
Shi_Wei = table[3];
Ge_Wei = table[3];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[4];
Shi_Wei = table[4];
Ge_Wei = table[4];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[5];
Shi_Wei = table[5];
Ge_Wei = table[5];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[6];
Shi_Wei = table[6];
Ge_Wei = table[6];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[7];
Shi_Wei = table[7];
Ge_Wei = table[7];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[8];
Shi_Wei = table[8];
Ge_Wei = table[8];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
Bai_Wei = table[9];
Shi_Wei = table[9];
Ge_Wei = table[9];
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);
HC595_Display(Bai_Wei, Shi_Wei,Ge_Wei);
delay_ms(2000);while(1)
{		LED0=0;							//这里使用了位带操作,也可以使用 GPIO_ResetBits(GPIOA,GPIO_Pin_8);delay_ms(20);		 LED0=1;							//也可以使用	  GPIO_SetBits(GPIOA,GPIO_Pin_8);	    		delay_ms(20);			a++;if(a==1){a = 0;b++;}if(b == 10){b = 0;c++;}if(c == 10){c = 0;d++;			}if(d == 10)d= 0;Bai_Wei = table[d];Shi_Wei = table[c];Ge_Wei = table[b];HC595_Display(Bai_Wei,Shi_Wei,Ge_Wei);//delay_ms(100);
}

}
以下为74HC595的使用电路图,初步决定使用两个74HC595进行该项目,利用8*8矩阵的方法实现目的要求。
在这里插入图片描述
本次制作心形流水/光立方灯采用74HC595,准备采用51单片机进行程序编写,采用三色LED灯,初步决定使用40个灯,每个灯共阴极,阳极由5组74HC595进行控制,然后每八个灯为一组,每组使用三个电阻,输入端采用三个电阻进行限流保护。如果使用数码管的画需要一个74HC573。经过对照
在这里插入图片描述
手头资料74HC595的电路图如下:
在这里插入图片描述
Q端为输出端D端为输入端
已经掌握资料的74HC595原理图与手头封装库互相对应,74HC573不是特别对应需要调整,根据资料来看,作者将74HC573的CLK和OC引脚分别接入了高低电位。使用时将左侧OUTPUT接入低电位,右侧将LAT接入了低电位。
在这里插入图片描述
在这里插入图片描述
当OE拉低电位后,不会影响锁存器的内部操作,74HC573可以正常工作,LE输入为高电平时,Q会输出响应数据,此时74HC573相当于大功率输出的IO口。
这是51系统小板和74HC573的接法了,为了提高速度,充分利用GPIO口,我直接把OE接低电平 LE接到高电平了。这样使用相当于74HC573是透明的,仅仅起驱动(放大电流)作用。
综上如果开始制作的时候可以将74HC595的原理图和74HC573的原理图进行修改,方便设计电路图。


http://www.ppmy.cn/news/719651.html

相关文章

51单片机74HC595操作

51单片机74HC595操作 上次流水灯电路中将LED-E-IN直接接到VCC上&#xff0c;也就使得74HC573处于直通状态&#xff0c;这次将LED-E-IN引脚接到LED-E引脚上&#xff0c;LED-E引脚接74HC595的输出Q6。 流水灯电路&#xff1a; 595电路&#xff1a; 595的14、12、11引脚分别接到…

HC32F460 RT-Thread Nano版移植

最近项目需要使用华大HC32F460跑RT-thread操作系统&#xff0c;因为考虑只需用到芯片容量也不大&#xff0c;项目也不是很复杂&#xff0c;无需使用RT-Thread Master版本中完整的组件和软件包等功能&#xff0c;只需最基本的内核部分就可以&#xff0c;所以选择了RT-thread Nan…

HC32L110(一) HC32L110 芯片介绍和Win10下DAP-Link, ST-Link, J-Link方式的烧录

目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录HC32L110(二) HC32L110在Ubuntu下的烧录HC32L110(三) HC32L110的GCC工具链和VSCode开发环境HC32L110(四) HC32L110的startup启动文件和ld连接脚本HC32L110(五) Ubuntu20.04 VSCode的Debug环境配置 前言 这个系列介绍一个比…

74HC595级联电路编程篇(三)

前面两篇文章已详细分析过74HC595的工作原理&#xff0c;接下来讲下用stm32去驱动两片74HC595控制16个LED实现流水灯效果。 这篇的代码是用IO模拟74HC595时序驱动的&#xff0c;下一篇文章&#xff0c;我们介绍下如何用SPI来驱动。直接贴上代码分析&#xff0c;代码很简单&…

RaspberryPi 4B 使用超声波传感器 HC-SR04 进行距离检测

由于超声波指向性强&#xff0c;能量消耗缓慢&#xff0c;在介质中传播的距离较远&#xff0c;因而超声波经常用于距离的测量&#xff0c;如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制&#xff0c;并且在测量…

超声波(HC-SR04)

超声波&#xff08;HC-SR04&#xff09; 1、 2、工作流程 ①单片机引脚触发Trig测距&#xff0c;给至少10us的高电平 ②模块自动发送8个40khz的方波&#xff0c;自动检测是否有信号返回 ③有信号返回&#xff0c;通过IO口输出高电平&#xff0c;并单片机ji’shu’an2高电平的…

关于两个HC05通讯的实际操作流程

市场上HC05模块有好几种&#xff0c;一般都是带有按键的。像下边这种&#xff08;6只引脚的&#xff09;&#xff08;这个是从优信电子那搞过来的&#xff0c;他的模块的按键有点问题&#xff0c;不用摁照样能进入AT模式&#xff09; 要使模块之间交互数据&#xff0c;必须要能…

74HC595实验

74HC595实验 实验现象 利用74HC595芯片实现LED流水灯的效果 理论学习 实现穿行数据转换为并行数据的控制模式 原理图 代码编写 #define latchpin 8 #define clockpin 12 #define datapin 11 //定义三个引脚 unsigned char table[8] {0x01,0x02,0x04,0x08,0x10,0x20,0x40…