#include <stdio.h>
#include "pico/stdlib.h"
// 74HC595 接线 GPIO
#define DS_PIN 2 // 数据输入
#define SHCP_PIN 3 // 移位寄存器时钟
#define STCP_PIN 4 // 输出寄存器锁存
#define MR_PIN 5 // 主复位 (可选)
// 延时微秒
static inline void pulse_pin(uint pin) {
gpio_put(pin, 1);
sleep_us(1);
gpio_put(pin, 0);
}
// 初始化 GPIO
void hc595_init() {
gpio_init(DS_PIN);
gpio_set_dir(DS_PIN, true);
gpio_init(SHCP_PIN);
gpio_set_dir(SHCP_PIN, true);
gpio_init(STCP_PIN);
gpio_set_dir(STCP_PIN, true);
gpio_init(MR_PIN);
gpio_set_dir(MR_PIN, true);
// 复位 HC595
gpio_put(MR_PIN, 0);
sleep_ms(1);
gpio_put(MR_PIN, 1);
}
// 向 74HC595 发送一个字节
void hc595_write_byte(uint8_t data) {
for (int i = 7; i >= 0; i--) {
gpio_put(DS_PIN, (data >> i) & 1); // 发送最高位到最低位
pulse_pin(SHCP_PIN); // 上升沿移位
}
pulse_pin(STCP_PIN); // 更新输出寄存器
}
int main() {
stdio_init_all();
hc595_init();
printf("Pico 74HC595 demo start\n");
uint8_t pattern = 0x01;
while (1) {
hc595_write_byte(pattern);
pattern <<= 1;
if (pattern == 0) pattern = 0x01;
sleep_ms(200);
}
return 0;
}