74HC595D驱动程序

1.介绍

74HC595D是以款串行输入并行输出的芯片,支持级连功能

2.引脚功能

Q0~Q7是并行输出

Q7'是串行输出,如果使用级连功能,只需将这个引脚接到下一块芯片的DS脚即可

MR是复位引脚 ,低电平有效

OE是使能引脚 , 低电平有效

DS是数据输入端

SHCP是控制数据移位的

STCP是将数据锁存在Q0-Q7上

3. 74hc595d初始化程序

我这里使用的是东软HR8P506单片机,其他单片机类似,IO口都配置成数字量推挽输出即可

void _74hc595d_Init(void)
{
	GPIO_InitSettingType x;
	
	x.Signal = GPIO_Pin_Signal_Digital;
    x.Dir = GPIO_Direction_Output;
    x.Func = GPIO_Reuse_Func0;
    x.ODE = GPIO_ODE_Output_Disable;
    x.DS = GPIO_DS_Output_Strong;
    x.PUE = GPIO_PUE_Input_Disable;
    x.PDE = GPIO_PDE_Input_Disable;
    GPIO_Init(GPIO_Pin_A17, &x);        //MR  PA17
    GPIO_Init(GPIO_Pin_A18, &x);        //STCP  PA18
    GPIO_Init(GPIO_Pin_A19, &x);        //SHCP  PA19
    GPIO_Init(GPIO_Pin_A20, &x);        //DS1  PA20
    GPIO_Init(GPIO_Pin_A21, &x);        //OE  PA21
	
}

4.驱动程序编写

先定义一下引脚的宏定义

#define MR(x)    x>=1?GPIO_SetBit(GPIO_Pin_A17):GPIO_ResetBit(GPIO_Pin_A17)
#define STCP(x)  x>=1?GPIO_SetBit(GPIO_Pin_A18):GPIO_ResetBit(GPIO_Pin_A18)
#define SHCP(x)  x>=1?GPIO_SetBit(GPIO_Pin_A19):GPIO_ResetBit(GPIO_Pin_A19)
#define   DS(x)  x>=1?GPIO_SetBit(GPIO_Pin_A20):GPIO_ResetBit(GPIO_Pin_A20)
#define   OE(x)  x>=1?GPIO_SetBit(GPIO_Pin_A21):GPIO_ResetBit(GPIO_Pin_A21)

编写驱动

/* 完整版 */
void output(uint8_t data)
{
	int i = 0;
	MR(0); /* 清除之前的数据 */
	MR(1); /* 不使能复位 */
	OE(1); /* 不使能输出 */
	
	for(i = 0; i < 8; i++)
	{
		DS(((data >> i) & 0x01)); /* 将bit先放在DS引脚,等待脉冲移位出去 */
		SHCP(0); delay_ms(1);     /* 将SHCP引脚拉低,延时1ms */
		SHCP(1); delay_ms(1);     /* 将SHCP引脚拉高,延时1ms,这样就产生了时钟脉冲 */
	}

    STCP(0); delay_ms(1);         /* 推送数据到锁存器 */
	STCP(1); delay_ms(1);
	
	OE(0); /* 等待数据全部发送完,再使能输出 */
}

/* 简化版
 * 不使能复位,并一直保持输出(MR通过15K电阻接VCC,OE引脚直接接地)
 * 只需要DS,STCP和SHCP便可完成控制
 */
void output(uint8_t data)
{
	int i = 0;
	// MR(0); /* 清除之前的数据 */
	// MR(1); /* 不使能复位 */
	// OE(1); /* 不使能输出 */
	
	for(i = 0; i < 8; i++)
	{
		DS(((data >> i) & 0x01)); /* 将bit先放在DS引脚,等待脉冲移位出去 */
		SHCP(0); delay_ms(1);     /* 将SHCP引脚拉低,延时1ms */
		SHCP(1); delay_ms(1);     /* 将SHCP引脚拉高,延时1ms,这样就产生了时钟脉冲 */
	}

    STCP(0); delay_ms(1);         /* 推送数据到锁存器 */
	STCP(1); delay_ms(1);
	
	// OE(0); /* 等待数据全部发送完,再使能输出 */
}

这里是从数据的地位开始移的,最后实现的效果就是写入一个数据比如0x01,那么第一个灯就会点亮

5.其他

这里简单说一下级连功能,使用级连时将第一块芯片的Q7'引脚接到下一块芯片的DS引脚,而其他的引脚SHCP,STCP,MR,OE则连接在一起共用一个IO口,比如:

这里是三块级连,使用的时候需要一次发8*3=24位数据。

所有相关的程序都在文章中了,程序测试是可以的,有问题评论区见

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 74HC165D是一款集成电路芯片,为8位串行输入/并行输出移位寄存器。它可以用来扩展微控制器或其他数字电路的输入端口数量。 驱动程序是为了操作74HC165D芯片而编写的一段代码。在编写驱动程序时,我们需要了解74HC165D的工作原理和寄存器结构。 首先,我们需要设置连接74HC165D芯片的引脚,包括数据输入引脚(DS)、时钟引脚(SH_CP)、清除引脚(MR)和输出使能引脚(OE)的状态。 接下来,我们可以使用串行数据输入引脚(DS)将外部信号输入到74HC165D的移位寄存器中。这样可以逐位地将数据输入到芯片中。 当所有数据都被输入到移位寄存器中后,我们可以使用时钟引脚(SH_CP)来启动数据的并行输出。在时钟的作用下,移位寄存器中的数据可以被并行地传送到输出端口。 驱动程序应该包含读取并输出数据的操作。我们可以使用并行输出引脚(Q7'到Q0')来读取每一位的数据。这些数据可以被传送到微控制器或其他数字电路中进行进一步处理。 除了读取数据外,驱动程序还可以包括其他操作,如清除寄存器的功能。清除引脚(MR)可以用来将寄存器中的数据复位为初始状态。 最后,我们还可以使用输出使能引脚(OE)来控制输出端口的使能状态。通过使能输出,可以防止数据从芯片中被传送到输出端口,从而确保数据的一致性。 总的来说,74HC165D驱动程序的编写需要根据芯片的工作原理和寄存器结构进行相应的设置和操作,以实现数据输入、输出和清除等功能。 ### 回答2: 74HC165D是一款逐位串行输入/并行输出转换器芯片。它能将8位的串行输入数据转换为并行输出。 要编写74HC165D的驱动程序,首先需要设置引脚的输入输出模式。对于74HC165D来说,它的引脚P_SERIAL_IN是串行输入引脚,P_LOAD是加载数据的引脚,P_CLK是时钟引脚,P_PARALLEL_OUT是并行输出引脚。我们需要将P_SERIAL_IN、P_LOAD和P_CLK设置为输入模式,将P_PARALLEL_OUT设置为输出模式。 接下来,在程序中需要定义变量来保存串行输入的数据。可以使用一个字节型数组来保存8位的串行输入数据。 在驱动程序中,需要编写函数来实现数据的加载和读取。加载函数用于将并行输入的数据加载到74HC165D的内部寄存器中,并将其存储到定义的变量中。读取函数用于读取并行输出的数据,并将其返回。 加载函数的实现步骤如下: 1. 将P_LOAD引脚设置为高电平,从而使74HC165D准备接受数据。 2. 循环8次,每一次循环都进行以下操作: 1) 将P_CLK引脚设置为低电平,从而准备让74HC165D读取输入数据。 2) 读取P_SERIAL_IN引脚的电平,将其存储到定义的变量中。 3) 将P_CLK引脚设置为高电平,从而使74HC165D读取输入数据。 3. 将P_LOAD引脚设置为低电平,从而停止加载数据。 读取函数的实现步骤如下: 1. 将P_LOAD引脚设置为高电平,从而使74HC165D停止数据加载。 2. 读取P_PARALLEL_OUT引脚的电平,并将其作为函数返回值。 最后,我们可以在主程序中调用加载和读取函数来使用74HC165D。通过加载函数加载输入数据,然后通过读取函数读取输出数据,从而实现对74HC165D的控制和数据获取。 以上就是关于74HC165D驱动程序的简单介绍和编写步骤。当然,具体的实现需要根据所使用的开发平台和编程语言而定。 ### 回答3: 74hc165d是一个8位串行输入并行输出移位寄存器。它具有广泛的应用,例如键盘和开关阵列的输入扫描、数据采集和实时控制等。 要编写74hc165d的驱动程序,首先需要确定使用哪种编程语言。下面我以C语言为例,简要说明74hc165d的驱动程序的实现: 首先,需要定义74hc165d引脚的连接方式,包括数据引脚、时钟引脚和使能引脚。这是为了方便后面在程序中进行控制。 接下来,使用GPIO库或相关的驱动程序库来配置相应的引脚作为输入或输出。根据74hc165d的引脚定义,将数据引脚配置为输入引脚,时钟引脚配置为输出引脚,使能引脚配置为输出引脚。 在主程序中,需要使用一个循环不断读取74hc165d的输入,并处理获取到的数据。具体步骤如下: 1. 设置使能引脚为低电平,使74hc165d进入工作状态。 2. 将时钟引脚设置为低电平,以准备进行数据输入。 3. 通过循环,从数据引脚读取8位数据。可以使用GPIO库提供的函数来读取该引脚的电平状态,并将其存储到一个变量中。 4. 将时钟引脚设置为高电平,让74hc165d在时钟上升沿将数据迁移到输出寄存器中。 5. 重复步骤3和步骤4,依次读取8位数据。 6. 设置使能引脚为高电平,表明数据输入结束。 7. 对获取到的8位数据进行处理,根据具体应用,可以将其转换为相应的状态或进行其他操作。 以上就是使用C语言编写74hc165d驱动程序的一个简要步骤。实际开发中,还需要根据具体需求进行调试和优化,确保程序的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值