大家好,欢迎来到IT知识分享网。
目录
一、芯片介绍
本例使用的芯片为飞利浦的74HC595芯片
该芯片支持100M的操作频率
各个pin脚的定义
Q0~Q7: 并行数据数据输出端;
GND: 接地引脚;
Q7S: 串行数据输出(多芯片级联时使用);
MR: 复位引脚,当引脚接低电平时芯片内部数据存储寄存器数据清零复位.如不使用一般接高电平;
SHCP: 移位寄存器的时钟输入,当接收到上升沿时移位寄存器内部数据整体后移;
STCP: 数据存储寄存器时钟输入,当检测到上升沿时使能数据存储寄存器,将芯片接收到的数据输出到Q0~Q7 ,Q7S引脚.可以将其理解为锁存信号,当数据发送给芯片完成后对该引脚发送上升沿;
OE: 输出使能引脚,为高电平时芯片输出引脚为高组态,当为低电平时芯片输出引脚为高(低)电平.该引脚可用于同时控制并行输出引脚的电平,如控制LED闪烁等.当不使用该功能时通常接低电平;
DS: 串行数据输入端
VCC: 电源引脚
功能框图:从功能框图中可以看出74HC595含有一个移位寄存器,一个存储寄存器和一个三态输出控制器。
逻辑框图和时序图
二、驱动电路
三、驱动程序
.c文件
/*******************************************************************************
* 名称: void HC595_Init(void)
* 功能: 74HC595的初始化操作;
* 说明: 总共3个端口,SER-PC1,RCLK(ST)-PC2,SRCLK(SH)-PC3;
*******************************************************************************/
void HC595_Init(void)
{
//将595所有引脚设为推挽输出
Gpio_InitIOExt(DS_SER_PORT, DS_SER_PIN, GpioDirOut, TRUE, FALSE, FALSE, FALSE);
Gpio_InitIOExt(ST_CP_PORT, ST_CP_PIN, GpioDirOut, TRUE, FALSE, FALSE, FALSE);
Gpio_InitIOExt(SH_CP_PORT, SH_CP_PIN, GpioDirOut, TRUE, FALSE, FALSE, FALSE);
//将所有指示灯都关闭
HC595Send(HC595_LED_Leakage,FALSE);
HC595Send(HC595_LED_LED_Run,FALSE);
HC595Send(HC595_LED_LED_Gun,FALSE);
HC595Send(HC595_LED_Signal2,FALSE);
HC595Send(HC595_LED_Overload,FALSE);
HC595Send(HC595_Relay,FALSE);
}
void GPIO_WriteHigh(u8 _port,u8 _pin)
{
Gpio_SetIO(_port,_pin,TRUE);
}
void GPIO_WriteLow(u8 _port,u8 _pin)
{
Gpio_SetIO(_port,_pin,FALSE);
}
/*******************************************************************************
* 名称: void HC595Send(HC595_TypeDef _location,u8 _state)
* 功能: 8位串行输出函数;
* 说明: 第一个为点灯的位置,第二个为目标的状态
*******************************************************************************/
void HC595Send(HC595_TypeDef _location,u8 _state)
{
static u8 current_data = 0;
u8 data = 0;
if(_state == TRUE)
{
current_data|=(0x01<<_location);
}
else
{
current_data&=(~(0x01<<_location));
}
data = current_data;
for(u8 i=0;i<8;i++)
{
GPIO_WriteLow(SH_CP_PORT,SH_CP_PIN);
__NOP();
__NOP();
if(data&0x80)
GPIO_WriteHigh(DS_SER_PORT,DS_SER_PIN);
else
GPIO_WriteLow(DS_SER_PORT,DS_SER_PIN);
GPIO_WriteHigh(SH_CP_PORT,SH_CP_PIN);
data = data<<1;
}
__NOP();
__NOP();
GPIO_WriteLow(ST_CP_PORT,ST_CP_PIN);
__NOP();
__NOP();
GPIO_WriteHigh(ST_CP_PORT,ST_CP_PIN);
Delay_Tim_1ms(1);
}
.h文件
/* 595控制端口定义 */
#define SH_CP_PORT 2
#define SH_CP_PIN 7
#define ST_CP_PORT 3
#define ST_CP_PIN 1
#define DS_SER_PORT 3
#define DS_SER_PIN 2
typedef enum
{
HC595_LED_Leakage = 1,
HC595_LED_LED_Run = 2,
HC595_LED_LED_Gun = 3,
HC595_LED_Signal2 = 4,
HC595_LED_Overload = 5,
HC595_Relay = 6,
} HC595_TypeDef;
四、实测波形
五、 两片级联
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25076.html