news 2026/7/15 23:37:02

树莓派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/7/14 11:34:47

【AUTOSAR AP CorAUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型

目录标题 AUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型 1. 错误分类先行:把“失败”拆成 4 种语义 1.1 Error:可恢复、属于 API 的正常输出域 1.2 Violation:断言级失败、不可恢复 1.3 Corruption:系统资源被…

作者头像 李华
网站建设 2026/7/15 16:43:03

舔狗的情绪价值和演员的自我修养

职场是人生中恒久的话题&#xff0c;也是关系个人生存发展的关键场景&#xff0c;因而关于职场有很多众说纷纭的言论和观点&#xff0c;也是跟个人的经历阅历相关。无所谓对错是非&#xff0c;只是选择不一样。纵览历史&#xff0c;即便大是大非、大奸大恶之事&#xff0c;也未…

作者头像 李华
网站建设 2026/7/13 19:24:55

30、编程与脚本编写指南

编程与脚本编写指南 1. 程序编译与安装 在大型项目中,程序编译非常重要。例如,Linux内核(一个不断修改和改进的程序)包含数百万行代码。 对于封装良好的源代码,通常会有一个名为 install 的特殊 make 目标。这个目标会将最终产品安装到系统目录中以供使用,通常这个…

作者头像 李华
网站建设 2026/7/15 8:38:22

33、Shell脚本中的控制操作符与交互式输入技巧

Shell脚本中的控制操作符与交互式输入技巧 1. 控制操作符:另一种分支方式 在Shell脚本编程里,控制操作符 && 和 || 为我们提供了一种独特的分支处理方式。理解它们的行为至关重要,下面是它们各自的工作原理: - command1 && command2 :先执行 co…

作者头像 李华
网站建设 2026/7/14 22:49:05

vue和springboot框架开发的协同过滤算法的电影推荐系统 电影评价管理系统_ 影评解说系统z9p6gctw

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 vueSpringboot电影评价管理系统_ 影评解说系统 框架开…

作者头像 李华
网站建设 2026/7/14 21:33:27

vscode 连接失败

客户端改ip了&#xff0c;vscode连接不是了&#xff0c;报错信息&#xff1a;Add correct host key in C:\\Users\\Administrator/.ssh/known_hosts to get rid of this message. > Offending ED25519 key in C:\\Users\\Administrator/.ssh/known_hosts:34 > Host key f…

作者头像 李华