news 2026/6/15 3:42:50

树莓派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/6/14 16:07:30

深入理解 FactoryBean:定制化 Bean 的秘密武器

前言在 Spring 的日常开发中&#xff0c;我们通常使用 Component、Service 或者 Configuration Bean 的方式来定义 Bean。对于大多数简单的对象&#xff08;比如 Controller、Service&#xff09;&#xff0c;这些方式非常直观且高效。但是&#xff0c;假设我们需要创建一个初…

作者头像 李华
网站建设 2026/6/12 7:49:44

金融合规监控规则设计实战(20年专家经验倾囊相授)

第一章&#xff1a;金融合规 Agent 的监控规则概述在现代金融科技架构中&#xff0c;金融合规 Agent 作为实时监控与风险识别的核心组件&#xff0c;承担着确保交易行为符合监管要求的关键职责。该 Agent 通过预设的监控规则集&#xff0c;对资金流动、用户操作及交易模式进行自…

作者头像 李华
网站建设 2026/6/13 21:44:34

DeepSeek 模型本地化部署:安全存储与高效增量更新综合方案

摘要随着大型语言模型 (Large Language Models, LLMs) 如 DeepSeek 在自然语言处理、内容生成、代码辅助等领域的广泛应用&#xff0c;将其部署在离线或私有环境的需求日益增长。离线部署不仅能满足数据隐私和安全合规的要求&#xff0c;还能提供更低的推理延迟和更高的服务稳定…

作者头像 李华
网站建设 2026/6/9 9:13:15

springboot师生健康信息管理系统(11520)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/6/13 11:35:20

边缘AI Agent实时推理难题全解析(低延迟高能效方案大公开)

第一章&#xff1a;边缘AI Agent推理速度的核心挑战在边缘计算环境中部署AI Agent时&#xff0c;推理速度面临多重技术瓶颈。受限的硬件资源、实时性要求以及模型复杂度之间的矛盾&#xff0c;使得优化推理性能成为关键课题。硬件资源限制 边缘设备通常配备低功耗处理器&#x…

作者头像 李华
网站建设 2026/6/9 1:33:10

cmake_第二章 CMake基础语法_set(),缓存变量set(CACHE)

文章目录第二章 CMake基础语法2.4 cmake定义普通变量set()2.4.1 set() 语法格式2.4.2 变量类型和作用域详解2.4.3 CMake运行脚本 .cmake 文件2.4.4 编译 .cmake脚本-- cmake -P选项2.4.5 使用-D选项定义变量2.4.6 普通变量总结2.5 CMake定义缓存变量set(CACHE)2.5.1 缓存变量语…

作者头像 李华