news 2026/5/12 11:17:19

74hc595数码管显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
74hc595数码管显示

原理图

micropython 的 main.py

frommachineimportPinimporttime# 定义引脚latch_pin=Pin(21,Pin.OUT)clock_pin=Pin(22,Pin.OUT)data_pin=Pin(23,Pin.OUT)# 数码管显示码 (共阳极)dis_table=[0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90]# 位选码 (控制哪一位数码管亮)dis_buf=[0xF1,0xF2,0xF4,0xF8]# 初始化索引inx=0defshift_out(data_pin,clock_pin,value):"""模拟shiftOut函数,发送一个字节的数据"""foriinrange(8):# 先发送高位data_pin.value((value>>(7-i))&1)# 时钟脉冲clock_pin.value(1)clock_pin.value(0)defdisplay(data):"""显示数据到4位数码管"""globalinx disbuff=0# 根据当前索引计算要显示的数字位ifinx==0:disbuff=data//1000# 千位elifinx==1:disbuff=(data//100)%10# 百位elifinx==2:disbuff=(data//10)%10# 十位else:disbuff=data%10# 个位# 确保数值在有效范围内ifdisbuff<0ordisbuff>9:disbuff=0# 发送数据latch_pin.value(0)shift_out(data_pin,clock_pin,dis_table[disbuff])# 发送段码shift_out(data_pin,clock_pin,dis_buf[inx])# 发送位码latch_pin.value(1)# 更新索引inx=(inx+1)%4# 主循环whileTrue:display(1567)time.sleep_ms(2)

arduino 的 main.cpp

#include<Arduino.h>intlatchPin=21;intclockPin=22;intdataPin=23;//这里定义了那三个脚voidsetup(){pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT);//让三个脚都是输出状态}voiddisplay(uint16_tdata){staticunsignedcharDis_table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};//LED状态显示的变量staticunsignedcharDis_buf[]={0xF1,0xF2,0xF4,0xF8};staticunsignedchardisbuff=0;staticchari=0;switch(i){case0:disbuff=data/1000;break;case1:disbuff=(data%1000)/100;break;case2:disbuff=(data%100)/10;break;case3:disbuff=data%10;break;default:disbuff=0;}digitalWrite(latchPin,LOW);//将ST_CP口上面加低电平让芯片准备好接收数据shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[disbuff]);//发送显示码 0-3shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i]);//发送通值 //串行数据输入引脚为dataPin,时钟引脚为clockPin,执行MSB有限发送,发送数据table[i]digitalWrite(latchPin,HIGH);//将ST_CP这个针脚恢复到高电平i++;if(i==4){i=0;}}voidloop(){display(1567);delay(2);}

zynq的 emioGpio DigitalTubePt.cpp

/** * 数码管的值每隔1s增加1 * 写1个数字需要10us * 5ms写1个数字 * 20ms写4个数字 */#include"../lib/Protothread.h"#include"../lib/AtShell.h"#include"../bsp/bsp_emio_gpio.h"#include"../bsp/bsp_timer.h"class LedPt;//4staticintlatchPin=54;//7staticintclockPin=55;//8staticintdataPin=56;//这里定义了那三个脚// 模拟 shiftOut,发送一个字节(高位先行)staticvoidshiftOut(uint8_tdataPin,uint8_tclockPin,uint8_tvalue){// 循环 8 位,高位先发for(inti=0;i<8;i++){// 取出当前位(高位优先)BspEmioGpioWrite(dataPin,(value>>(7-i))&1);// 产生时钟脉冲:上升沿发送数据BspEmioGpioWrite(clockPin,1);BspEmioGpioWrite(clockPin,0);}}// 三合一显示函数// 参数1:data 要显示的数据// 参数2:point 小数点位置 0~3=亮,-1=不亮// 参数3:mode 0=十进制,1=十六进制staticvoiddisplay(uint16_tdata,charpoint,uint8_tmode){// 完整段码表:0~9 + A~FstaticunsignedcharDis_table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90,// 0-90x88,0x83,0xC6,0xA1,0x86,0x8E// A-F};staticunsignedcharDis_buf[]={0xF1,0xF2,0xF4,0xF8};// 位选staticunsignedchardisbuff=0;staticchari=0;uint8_tseg;// ======================// 数字拆分:十进制 / 十六进制// ======================if(mode==0){// 十进制模式data=data%10000;switch(i){case0:disbuff=data/1000;break;case1:disbuff=(data%1000)/100;break;case2:disbuff=(data%100)/10;break;case3:disbuff=data%10;break;default:disbuff=0;}}else{// 十六进制模式switch(i){case0:disbuff=(data>>12)&0x0F;break;case1:disbuff=(data>>8)&0x0F;break;case2:disbuff=(data>>4)&0x0F;break;case3:disbuff=data&0x0F;break;default:disbuff=0;}}// 取段码seg=Dis_table[disbuff];// ======================// 小数点控制(已修正硬件反序)// ======================charrealPoint=-1;if(point>=0&&point<=3){realPoint=3-point;// 对齐视觉位置}if(i==realPoint&&realPoint!=-1){seg&=0x7F;// 点亮小数点}// ======================// 硬件输出// ======================BspEmioGpioWrite(latchPin,0);shiftOut(dataPin,clockPin,seg);shiftOut(dataPin,clockPin,Dis_buf[i]);BspEmioGpioWrite(latchPin,1);i++;if(i>=4)i=0;}class DigitalTubePt:public Protothread{voidInit(){AT_println("Digital Tube 595 init");BspEmioGpioSetDir(latchPin,BSP_GPIO_OUT);BspEmioGpioSetDir(clockPin,BSP_GPIO_OUT);BspEmioGpioSetDir(dataPin,BSP_GPIO_OUT);}boolRun(){staticuint32_ts_lastTime=0;staticuint32_ts_disValue=0;uint64_tnow=BspGetTickMs();if(now-s_lastTime>1000){s_lastTime=now;s_disValue++;}display(s_disValue,-1,0);PtOsDelay(5);returntrue;}};DigitalTubePt g_digitalTubePt;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 11:14:04

AI推理全景图:从思维链到多模态,Awesome项目解析技术脉络

1. 项目概述&#xff1a;一份关于“推理”的AI全景图 如果你正在研究大语言模型&#xff08;LLM&#xff09;、多模态模型&#xff0c;或者对AI如何像人一样“思考”和“推理”感到好奇&#xff0c;那么你很可能已经淹没在海量的论文、模型和开源项目里了。从ChatGPT的惊艳对话…

作者头像 李华
网站建设 2026/5/12 11:10:25

VichUploaderBundle最佳实践:10个技巧提升文件上传性能和安全性

VichUploaderBundle最佳实践&#xff1a;10个技巧提升文件上传性能和安全性 【免费下载链接】VichUploaderBundle A simple Symfony bundle to ease file uploads with ORM entities and ODM documents. 项目地址: https://gitcode.com/gh_mirrors/vi/VichUploaderBundle …

作者头像 李华
网站建设 2026/5/12 11:10:23

保障AI应用安全:OpenAI Agents SDK防护栏功能完整使用手册

保障AI应用安全&#xff1a;OpenAI Agents SDK防护栏功能完整使用手册 【免费下载链接】openai-agents-js A lightweight, powerful framework for multi-agent workflows and voice agents 项目地址: https://gitcode.com/gh_mirrors/ope/openai-agents-js OpenAI Agen…

作者头像 李华
网站建设 2026/5/12 11:09:58

大语言模型评测实战指南:从基准测试到技术选型

1. 项目概述与核心价值最近在折腾大语言模型&#xff08;LLM&#xff09;的应用和评测&#xff0c;发现了一个宝藏仓库&#xff1a;onejune2018/Awesome-LLM-Eval。这不仅仅是一个简单的工具列表&#xff0c;而是一个由社区驱动的、系统化的大语言模型评估资源大全。对于任何深…

作者头像 李华
网站建设 2026/5/12 11:09:23

从NLP基础到LLM实战:手把手构建大模型全栈能力

1. 从NLP到LLM&#xff1a;为什么你需要一个坚实的“地基” 最近几年&#xff0c;大语言模型&#xff08;LLM&#xff09;的火爆程度有目共睹&#xff0c;ChatGPT、Claude、文心一言这些名字几乎成了日常谈资。很多开发者&#xff0c;尤其是刚入行的朋友&#xff0c;可能一上来…

作者头像 李华