news 2026/4/18 2:12:39

树莓派Pico‌的hc595例子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派Pico‌的hc595例子

参考HC595串转并

wokwi.toml

[wokwi]version=1firmware="cmake-build-debug-pico/pipo_project.uf2"elf="cmake-build-debug-pico/pipo_project.elf"

diagram.json

{ "version": 1, "author": "Uri Shaked", "editor": "wokwi", "parts": [ { "type": "wokwi-pi-pico", "id": "pico", "top": -137.55, "left": 3.6, "attrs": { "builder": "pico-sdk" } }, { "type": "wokwi-74hc595", "id": "sr1", "top": -10.94, "left": 140.5, "rotate": 270, "attrs": {} }, { "type": "wokwi-led-bar-graph", "id": "bargraph1", "top": 72, "left": 321.6, "attrs": { "color": "lime" } }, { "type": "wokwi-gnd", "id": "gnd1", "top": 182.4, "left": 345, "attrs": {} }, { "type": "wokwi-gnd", "id": "gnd2", "top": -38.4, "left": 297, "attrs": {} }, { "type": "wokwi-vcc", "id": "vcc1", "top": 58.36, "left": 96, "attrs": {} } ], "connections": [ [ "pico:GP0", "$serialMonitor:RX", "", [] ], [ "pico:GP1", "$serialMonitor:TX", "", [] ], [ "sr1:Q0", "bargraph1:A1", "green", [ "h-18", "v28.8", "h67.2", "v-86.4" ] ], [ "sr1:Q1", "bargraph1:A2", "green", [ "h38.4", "v-57.6" ] ], [ "sr1:Q2", "bargraph1:A3", "green", [ "h28.8", "v-38.4" ] ], [ "sr1:Q3", "bargraph1:A4", "green", [ "h9.6", "v-19.2" ] ], [ "sr1:Q4", "bargraph1:A5", "green", [ "h86.4", "v105.61" ] ], [ "sr1:Q5", "bargraph1:A6", "green", [ "h9.6", "v-48", "h67.2", "v67.2" ] ], [ "sr1:Q6", "bargraph1:A7", "green", [ "h57.6", "v48" ] ], [ "sr1:Q7", "bargraph1:A8", "green", [ "h48", "v57.6" ] ], [ "bargraph1:C1", "bargraph1:C2", "green", [ "v0" ] ], [ "bargraph1:C3", "bargraph1:C4", "green", [ "h0" ] ], [ "bargraph1:C5", "bargraph1:C6", "green", [ "h0" ] ], [ "bargraph1:C7", "bargraph1:C8", "green", [ "h0" ] ], [ "bargraph1:C9", "bargraph1:C10", "green", [ "h0" ] ], [ "bargraph1:C8", "bargraph1:C9", "green", [ "h0" ] ], [ "bargraph1:C2", "bargraph1:C3", "green", [ "h0" ] ], [ "bargraph1:C4", "bargraph1:C5", "green", [ "h0" ] ], [ "bargraph1:C6", "bargraph1:C7", "green", [ "h0" ] ], [ "gnd1:GND", "bargraph1:C10", "black", [ "v0" ] ], [ "pico:GP2", "sr1:DS", "green", [ "h-48", "v-76.8", "h172.8", "v9.6" ] ], [ "sr1:SHCP", "pico:GP3", "green", [ "h-18", "v-182.4", "h-211.2", "v86.4", "h0", "v38.4" ] ], [ "sr1:STCP", "pico:GP4", "green", [ "h-66", "v-153.6", "h-115.2", "v76.8" ] ], [ "gnd2:GND", "sr1:GND", "black", [ "v-19.2", "h-86.4", "v28.8" ] ], [ "vcc1:VCC", "sr1:VCC", "red", [ "v19.2", "h57.6", "v-9.6" ] ], [ "sr1:MR", "vcc1:VCC", "green", [ "h-37.2", "v96" ] ] ], "dependencies": {} }

main.cpp IO 模拟

#include<stdio.h>#include"pico/stdlib.h"// 74HC595 接线 GPIO#defineDS_PIN2// 数据输入#defineSHCP_PIN3// 移位寄存器时钟#defineSTCP_PIN4// 输出寄存器锁存// 延时微秒staticinlinevoidpulse_pin(uint pin){gpio_put(pin,1);sleep_us(1);gpio_put(pin,0);}// 初始化 GPIOvoidhc595_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);}// 向 74HC595 发送一个字节voidhc595_write_byte(uint8_tdata){for(inti=7;i>=0;i--){gpio_put(DS_PIN,(data>>i)&1);// 发送最高位到最低位pulse_pin(SHCP_PIN);// 上升沿移位}pulse_pin(STCP_PIN);// 更新输出寄存器}intmain(){stdio_init_all();hc595_init();printf("Pico 74HC595 demo start\n");uint8_tpattern=0x01;while(1){hc595_write_byte(pattern++);sleep_ms(1000);}return0;}

PIO

CMakeLists.txt

cmake_minimum_required(VERSION3.13)# Set Pico SDK pathset(PICO_SDK_PATH"D:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")# Include the Pico SDK CMake configurationinclude(pico_sdk_import.cmake)project(pipo_project C CXX ASM)pico_sdk_init()add_executable(pipo_project main.c)pico_generate_pio_header(pipo_project${CMAKE_CURRENT_LIST_DIR}/hc595.pio)target_link_libraries(pipo_project pico_stdlib hardware_pio)# Enable USB output, disable UART outputpico_enable_stdio_usb(pipo_project0)pico_enable_stdio_uart(pipo_project1)pico_add_extra_outputs(pipo_project)

hc595.pio

;;HC595 PIO 程序;驱动 74HC595 移位寄存器;DS ->普通 OUT PIN;SHCP ->side-set bit0;STCP ->side-set bit1;;FIFO 写入字节,每次从 FIFO 拉取8bit;输出到 DS 并自动产生 SHCP 时钟脉冲;输出完成后产生一次 STCP 锁存脉冲;.program hc595 .side_set2opt;bit0=SHCP,bit1=STCP;=============================;主循环;=============================.wrap_target pull block;从 FIFO 拉取一个字节sety,7;位计数7->0bitloop: out pins,1;输出一位到 DS nop side0;SHCP=0,STCP=0nop side1;SHCP=1,STCP=0(产生移位脉冲) jmp y-- bitloop side0;SHCP=0,STCP=0;发送完成,产生锁存脉冲 nop side2;SHCP=0,STCP=1nop side0;SHCP=0,STCP=0.wrap;========================================================% c-sdk{//========================================================// 初始化 HC595 PIO 状态机 // 参数: // pio - PIO 控制器 // sm - 状态机编号 // offset - PIO 程序偏移地址 // ds_pin - DS 引脚 // shcp_pin - SHCP 引脚 // stcp_pin - STCP 引脚 //========================================================static inline void hc595_program_init(PIO pio, uint sm, uint offset, uint ds_pin, uint shcp_pin, uint stcp_pin){pio_sm_config c=hc595_program_get_default_config(offset);// 设置输出引脚 sm_config_set_out_pins(&c, ds_pin,1);// DS sm_config_set_sideset_pins(&c, shcp_pin);// side-set 起始 pin=SHCP sm_config_set_set_pins(&c,0,0);// 没有使用 SET 指令 //shift配置 LSB first, autopull sm_config_set_out_shift(&c, true, true,8);sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);// 初始化 GPIO pio_gpio_init(pio, ds_pin);pio_gpio_init(pio, shcp_pin);pio_gpio_init(pio, stcp_pin);// 所有引脚都设置为输出 pio_sm_set_consecutive_pindirs(pio, sm, ds_pin,1,true);pio_sm_set_consecutive_pindirs(pio, sm, shcp_pin,2,true);// SHCP+STCP // 初始化状态机 pio_sm_init(pio, sm, offset,&c);pio_sm_set_enabled(pio, sm,true);}static inline void hc595_write(PIO pio, uint sm, uint8_t data){pio_sm_put_blocking(pio, sm, data);}%}

main.c

#include<stdio.h>#include"pico/stdlib.h"#include"hardware/pio.h"#include"hc595.pio.h"#defineDS_PIN2#defineSHCP_PIN3#defineSTCP_PIN4intmain(){stdio_init_all();PIO pio=pio0;uint sm=0;uint offset=pio_add_program(pio,&hc595_program);hc595_program_init(pio,sm,offset,DS_PIN,SHCP_PIN,STCP_PIN);uint8_tpattern=0x0;while(1){hc595_write(pio,sm,pattern++);if(pattern==0)pattern=0x11;sleep_ms(500);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 13:09:09

跨领域Agent集成困局破解(基于IEEE与ISO最新标准解读)

第一章&#xff1a;跨领域 Agent 接口标准的演进与挑战随着人工智能与分布式系统的发展&#xff0c;跨领域 Agent 之间的互操作性成为关键技术瓶颈。为实现不同架构、行业和协议下的智能体协同&#xff0c;接口标准化进程不断推进&#xff0c;但同时也面临语义异构、安全边界与…

作者头像 李华
网站建设 2026/4/15 16:14:48

k8s-pod驱逐

一、Pod驱逐1、为什么要有驱逐pod.spec.containers[].resources中会存在cpu或memory的request和limit。即该pod请求的最小资源和Node结点可以给的最大资源。当一个容器的cpu使用率超过limit时会被进行流控&#xff0c;而当内存超过limit时则会被oom_kill。完全依赖于oom_kill并…

作者头像 李华
网站建设 2026/4/16 21:31:48

Kubernetes 调度核心解析全攻略:从基础到生产级策略

Kubernetes 调度核心解析全攻略:从基础到生产级策略 本文将深入探讨 Kubernetes 调度器的工作原理、核心机制及进阶策略,帮助你在复杂集群环境下实现高效 Pod 调度、高可用部署和资源优化。 第一部分:调度基础 - 默认调度器如何工作 Kubernetes 调度器的核心职责很简单:为…

作者头像 李华
网站建设 2026/4/3 21:47:30

vue和springboot框架开发的协同过滤算法的基于springBoot的动漫分享系统 国漫分享系统_6939qev2

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 vue和springboot框架开发的协同过滤算法的基于springBoot…

作者头像 李华
网站建设 2026/4/18 1:06:55

彻底解决找不到d3dx9_39.dll文件 无法运行游戏软件问题

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华