下列是595的驱动代码,已验证通过,HC595_Init为初始化函数,HC595_Ctrl则对595的对应的8个输出脚进行相应的位操作输出,对应位置高则对应管脚输出高电平。
void HC595_Send_Byte(uint8_t byte) {
uint8_t i;
for (i = 0; i < 8; i++) {
if (byte & 0x80)
DS_H;
else
DS_L;
SH_L;
HAL_Delay(1);
SH_H;
HAL_Delay(1);
byte <<= 1;
}
}
void HC595_CS(void) {
ST_L;
HAL_Delay(1);
ST_H;
HAL_Delay(1);
}
void HC595_Send_Multi_Byte(uint8_t *data, uint16_t len) {
uint8_t i;
for (i = 0; i < len; i++) {
HC595_Send_Byte(data[i]);
}
HC595_CS();
}
void HC595_Ctrl(uint8_t data) {
HC595_Send_Byte(data);
HC595_CS();
}
void HC595_Init(void) {
MR_L;
HAL_Delay(10);
MR_H;
HAL_Delay(10);
ST_L;
HAL_Delay(10);
ST_H;
HAL_Delay(10);
ST_L;
SH_L;
DS_L;
HAL_Delay(10);
}