【单片机原理及应用】实战:74HC595驱动8位数码管动态显示与学号定制

创意电子制作:用51单片机定时器打造智能倒计时器 本文详细介绍了如何利用51单片机的定时器功能开发智能倒计时器,涵盖定时器原理、寄存器配置(TMOD、TCON)、数码管动态显示及中断处理等核心技术。通过实战案例和代码示例,帮助开发者快速掌握倒计时器的设计与实现,适用于烘焙、比赛计时等多种场景。 阅读详情

1. 项目背景与硬件选型

大家好,今天我想分享一个特别实用的单片机实战项目——用74HC595芯片驱动8位数码管做动态显示,并且还能自定义显示内容比如学号。这个项目特别适合刚接触单片机的朋友,因为既能学到硬件连接,又能深入理解动态扫描的原理。

我先说说为什么选74HC595这个芯片。简单来说,它就是个“串行转并行”的神器。单片机引脚资源有限,直接驱动8位数码管需要大量IO口,但用74HC595只需要3根线(数据线、时钟线、锁存线)就能控制多位输出,大大节省了资源。而且它支持级联,多片组合还能驱动更多数码管,扩展性非常强。

硬件方面,我们需要准备这些材料:一块C51单片机(比如STC89C52)、8位共阳数码管、两片74HC595芯片、若干电阻和连接线。数码管最好选共阳的,因为common anode的驱动逻辑更直接,编程时段码处理更简单。电阻用来限流,一般220欧姆到1K之间都可以,我实测470欧姆效果不错,亮度适中又不烧芯片。

这里有个小细节要注意:74HC595的工作电压是5V,和C51单片机兼容,但如果你用的单片机是3.3V系统,可能需要电平转换模块。不过咱们这个项目直接用5V系统就好,避免额外复杂度。

2. 电路设计与连接要点

接下来是硬件连接,这部分看似复杂,但只要理清思路就很简单。整个电路的核心是两片74HC595的级联:第一片负责控制数码管的段选(即显示什么数字),第二片负责位选(即哪个数码管亮)。这样分工明确,编程时逻辑清晰。

具体接线时,单片机的P2.0、P2.1、P2.2三个引脚分别连接到74HC595的SH_CP(移位时钟)、DS(串行数据)和ST_CP(存储时钟)。第一片74HC595的Q7'引脚(第9脚)连接到第二片的DS引脚,实现级联。两片芯片的OE(输出使能)都要接地,否则输出会是高阻态,数码管完全不亮。

数码管这边,段选线(a~dp)通过限流电阻连接到第一片74HC595的并行输出口(Q0~Q7),位选线(common anode)连接到第二片的输出口。这里有个易错点:如果数码管是共阳的,位选信号要给高电平才能点亮;如果是共阴的,得给低电平。咱们用的共阳管,所以位选信号高有效。

实际焊接时,建议先用面包板搭电路测试,确认没问题再焊到万用板上。我第一次做的时候没注意线序,结果数码管显示乱码,折腾了半天才发现是段选线接错了。所以务必对照 datasheet 仔细检查每个连接点。

3. 动态显示原理与编程逻辑

动态显示是这项目的核心技巧。为什么不用静态显示?因为8位数码管静态显示需要64根控制线,根本不可能实现。动态扫描的原理是利用人眼视觉暂留效应:快速轮流点亮每个数码管,只要刷新速度够快(比如每秒50次以上),看起来就像是同时亮的。

编程上,我们需要实现三个步骤:首先发送段选数据(要显示的数字编码),然后发送位选数据(选择哪个管子亮),最后触发锁存信号让数据生效。这个过程要循环执行,每个数码管显示时间约1~2毫秒,整体刷新率就能保持在50Hz以上,避免闪烁。

代码里关键是一个发送函数,我用的是DisplayChar,它接收两个参数:段码和位码。段码决定显示什么字符,比如数字0的段码是0xC0(共阳管)。位码决定哪个管子亮,比如第1位是0x01,第2位是0x02,以此类推。发送时先发位码再发段码,因为级联电路中位选芯片在后级。

这里有个优化技巧:发送数据时用移位操作代替循环,能提高效率。比如用dat <<= 1逐位处理,配合时钟信号上升沿触发数据输入。实测下来,这种写法比用for循环快不少,显示更稳定。

4. 学号显示定制与代码实现

现在来到有趣的部分:定制显示内容。比如要显示学号"22500184",我们需要做两件事:一是把学号每位数字转换成对应的段码,二是控制显示顺序和时长。

段码可以用数组预先定义好,比如:

unsigned char code segCodes[] = { 
  0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 // 0~9的段码
};

显示时,根据学号每位数字取出对应段码,再结合位码循环发送。比如学号第一位是2,就取segCodes[2]发送到位选为0x01的管子;第二位是2,取segCodes[2]发送到位选0x02的管子,依此类推。

程序结构上,我建议先写一个初始化函数设置引脚方向,然后主循环里分三步:先全亮1秒检测坏点,再逐位显示数字7~0演示扫描效果,最后持续显示学号。全亮检测很简单,所有段码送0x00(共阳管全亮),位码送0xFF(所有位选打开)。逐位显示时用延时函数控制0.5秒间隔。

实际编程中,延时函数要用循环实现,但注意不要用阻塞式延时影响其他操作。可以用定时器中断做计时,但初学者先用简单延时也行。我提供的代码里用了Delayms函数,实测在12MHz晶振下约1毫秒,调整参数可控制时长。

5. Proteus仿真与调试技巧

硬件搭好了,代码写完了,接下来用Proteus仿真验证。Proteus是个超好用的电路仿真软件,能模拟单片机和外围器件工作,避免烧坏实物元件。

仿真时,先画电路图:从库裡拖出80C51、74HC595、7SEG-MPX8-CA(共阳8位数码管),然后按之前说的连接方式接线。特别注意电源和地线要接好,否则仿真会报错。74HC595的MR(主复位)引脚要接高电平,不然一直处于复位状态。

代码编译用Keil完成,生成HEX文件后加载到Proteus的单片机里。点击运行,如果一切正常,你应该看到数码管先全亮1秒,然后从左到右依次显示7~0,最后显示你的学号。如果显示不正常,常见问题有:段码反了(共阳共阴搞错)、位选顺序不对、刷新太快导致闪烁。

调试时Proteus的虚拟示波器很有用,可以看74HC595的时钟和数据信号波形。正常情况应该是时钟线有规律脉冲,数据线随显示内容变化。如果信号不对,检查代码里的引脚定义和发送时序。

还有个常见坑点:仿真时数码管显示暗淡。这是因为Proteus中数码管需要设置限流电阻值,默认可能太大。双击数码管,把电阻值改小些(比如200欧姆),亮度就正常了。

6. 常见问题与优化建议

最后分享些踩坑经验和优化建议。首先最常见的问题是显示闪烁或重影。闪烁通常是刷新太慢,解决方法是减少每个数码管的显示时间,提高整体刷新率。重影则是位选切换时段码没及时更新,可以在位选改变前先关闭所有显示,送完数据再打开。

电源噪声也可能导致显示不稳定。我在实际项目中发现,74HC595在切换输出时会产生瞬时电流尖峰,如果电源滤波不好,会影响单片机工作。建议在芯片VCC和GND之间加个0.1uF的退耦电容,效果立竿见影。

如果想进一步节省单片机资源,可以用定时器中断实现动态扫描。主程序只更新显示数据,中断服务程序负责定时刷新显示。这样即使主程序在忙其他任务,显示也不会卡顿。代码稍微复杂些,但更实用。

扩展功能方面,可以加上按键调整显示内容,或者用串口接收数据更新显示。比如通过电脑串口发送新学号,单片机实时显示出来。这些进阶玩法都能基于当前框架实现。

最后提醒下,实物制作时74HC595和数码管别长时间高亮度工作,容易发热。可以软件调光,比如用PWM控制亮度。我一般设置显示占空比80%,既省电又延长寿命。

南昌大学单片机实验报告及工程文件 包含基本I/O实验、矩阵键盘实验、外中断实验、定时计数器实验、串口通信实验、软件实验和综合设计。 阅读详情

相关推荐

情系淮思:五款车规MCU横向对比与VCU选型

本文对比五款车规MCU中的S32K312与S32K324,聚焦核心架构、存储、通信及安全特性。S32K324为双核160MHz Cortex-M7,内存、外设(如以太网、QuadSPI、SAI)全面升级,支持高实时并行处理与复杂应用;而S32K312为单核120MHz,适用于中端车身控制。两者均满足ASIL B功能安全,具备完整安全引擎。选型建议:中端用S32K312,高端复杂系统优选S32K324。

本不平凡 303

两位数码管显示学号练习程序和图_STM32学习笔记(2):微动开关控制七段数码管...

前言 这块板子最显眼的外设资源就是七段数码管了。本来是想靠程序直接控制数码管内容的,转念一想这样太单调了,索性用板子上自带的三个微动开关来分别控制三个数码管。 这次会涉及到稍微复杂的数字电路读图、74LS138译码器、74HC595(位移缓存器)芯片工作过程及驱动程序编写、数码管显示原理及动态显示,因而篇幅稍长。一、预备知识1、74HC595 这款芯片是一...

weixin_39834475的博客 2940

NV MCU与SoC的交互

MCU通过IST_REQ信号触发SoC执行IST,由IST_DONE_N通知完成,SOC_RESET_N由MCU控制。MCU与SoC间通过通信通道(如以太网)传输IST结果。热/电压监测通过I2C实现,阈值由MCU初始设置、SoC动态更新,异常可中止IST。客户应用可在检测严重错误时通过IST管理器中止IST,相关原因与状态将被记录。

liu-yonggang的专栏 53

基本定时器(TIM6/TIM7)

基本定时器最简单,就干一件事:到点了触发中断。定时器本质就是计数器,每个时钟脉冲加1,数到ARR就溢出、产生中断、清0重来。三个核心寄存器:PSC(预分频器):对输入时钟分频CNT(计数器):从0往上数ARR(自动重装载值):数到这个值就溢出,CNT清0,产生更新中断公式:  定时周期 = (PSC+1) × (ARR+1) / 定时器时钟  更新事件频率 = 定时器时钟 / ((PSC+1) × (ARR+1)) 例:TIM6时钟84MHz,要定时0.5秒(2

2401_89890233的博客 244

基于51单片机的16x16点阵显示控制系统设计与实现

LED点阵显示是嵌入式系统中常见的显示方式,它通过控制大量LED的亮灭来展示文字或图案。在单片机资源有限的情况下,如何用少量IO口驱动256个LED成为关键问题。本文从点阵显示的基本原理出发,介绍利用74HC595串转并芯片扩展列数据、74HC138译码器实现行扫描的动态扫描方案,并详细分析刷新率、消隐处理等核心概念。该技术广泛应用于广告屏、信息发布、课设项目等场景。文章以51单片机(STC89C52)为核心,完整讲解了16x16点阵的硬件设计、字模提取、Keil编程、Proteus仿真调试及实物焊接全流程

weixin_29194693的博客 255

21 硬件工程师笔面试高频考点真题解析——单片机

本文系统介绍了单片机的核心概念与应用知识,包括:单片机定义与选型要点(性能、存储、外设等);核心参数(主频、I/O、通信接口等);最小系统组成(电源、复位、晶振、BOOT);常见外设(GPIO、ADC、定时器等);GPIO工作模式(输入/输出);死机原因分析(硬件干扰、软件错误等);上电故障排查流程(电源、时钟、程序等);与DSP、FPGA的对比(控制vs运算vs可编程);常用通信总线特点(UART、I2C、SPI、CAN);看门狗功能(超时复位防死机)。内容涵盖单片机硬件设计关键要点,适合嵌入式开发者参考

XU157303764的博客 1304

串口实验-11

① 显示串口0接收到的数据② 串口0每隔3秒发送“waitting for serial data”信息COM30IDE 右上角 …三个点打开 串口监视器,选择波特率 115200在串口监视器 消息 位置 输入:hello esp32s3,会打印输出使用串口1来实现 串口数据回显功能方便大家后面用到串口接口的模块时,能知道使用方法COM26。

智能机器人产学研基地 25

01 AUTOSAR CP标准文档阅读指南

01 AUTOSAR CP标准文档阅读指南

汽车软件工程师 | 好奇博主 | 处女座 1134

TMS320F28335 学习笔记(二):系统时钟、PLL 与看门狗

本文系统介绍F28335的时钟架构与看门狗应用,涵盖外部晶振、PLL倍频生成系统时钟(SYSCLKOUT)、高速/低速外设时钟分频配置,以及看门狗的启用、关闭与喂狗机制。强调时钟配置准确性对延时、PWM、通信等外设的重要性,指出常见错误如晶振不匹配、未等待PLL锁定、随意修改PLL或喂狗周期过长等问题,并提供初始化框架与验证方法,帮助开发者正确配置时钟系统,确保程序稳定运行。

2403_83044722的博客 350

【Excel VBA 编程】批量核对两张表格数据,行和列显示顺序均被打乱

利用数据字典在 Excel 中进行表格数据的核对,该表格含有多行多列,并且行和列顺序是打乱的,批量核对数据后将差异输出

wei1019的专栏 1293

博图编写温度程序_s7 smart200的CRC-16校验程序

最近做一个小项目,项目中采用485自由口通讯方式,使用一台西门子S7 smart200对一台冷水机做多个状态和温度做监控,并能对冷水机进行启停控制,和参数设置,因为冷水机的协议不是标准modbus格式,所以要自己编写通信协议。其中要用到CRC校验,在网上找了些别人写的程序,基本上用不了。只能自力更生了。首先,找到CRC校验的算法,并理解。 下面就是我找的算法(这个网上很多),1....

weixin_39539761的博客 3062

MCU 启动流程解析:从 SRAM 到 DDR

MCU 的性能瓶颈通常不在 DDR 带宽,而在访问延迟与确定性。因此,关键代码、中断向量、栈以及功能安全数据应放在片内 SRAM;大块传感器数据缓冲、堆和冷数据则放在 DDR。启动流程的核心可以概括为三步:Boot ROM 搬运、Remap 切换、SRAM 执行。

Where there is life, there is hope. 283

gmsv源代码c语言,石器时代ABLua的原理、简介、过程、运用、收发

操作原理(一)服务端:服务器源文件客户端:客户所操作的程序(既是游戏客户端)接口:既是某项功能(例如:鼠标点击,文字发送,战斗,观战,人物动作等)返回的值ABlua:在源代码中添加的整套引擎作为回调接口--lua所实现的功能是基于服务端源码添加的接口由该接口与客户端发送封包实现功能源码里是否有ABlua回调接口?例如:源码里的gmsv/battle.c文件(既是战斗回调文件)以下为简单描述C给予l...

weixin_35223575的博客 2408

MCU的ADC采样怎么配

一块采集板,室温下读电池电压挺准,一上高低温箱就差出0.3V。软件反复查了三遍,没改一行代码,最后发现是参考电压选错了——电源纹波直接灌进了测量基准。ADC这东西,代码就那么几行,坑全在配置里。这篇拿ATmega16当例子,把采样链路从头讲清:参考电压怎么选、时钟为什么卡在50到200kHz、结果为什么要讲究读取顺序。这些规则不只对AVR成立,换成车规MCU,思路一样。

qq_43241255的博客 194

2023东华大学OJ机试题22-70

东华大学计算机考研复试机试22 约瑟夫环223、整除的尾数24、回文质数25、汽水瓶26、阶乘最后的非0位27、算菜价28、 水果价格29、求奇数的乘积30、求最晚和最早日期31、素数32、计算e33 数字之和34 繁殖问题35 奇妙的数字36 整除的尾数37 黑色星期五38 树39 约瑟夫环40 最大与最小41 环42 求数列项43 最高频率44 三艘船45 回文数46 特殊四位数47 最大值48 数列149 修理牛棚50 按要求输出序列51 部落人乘法52 序列53 双重回文数54 等差数列55 人见人

m0_49263811的博客 2599

TP-LINK电信定制摄像头刷机教程:解锁官方功能与固件升级

固件是嵌入式设备的操作系统,控制着硬件的基础功能。其工作原理是通过更新或替换存储在设备非易失性存储器中的程序代码,从而改变设备的行为和功能。这项技术的核心价值在于赋予用户对设备的完全控制权,能够解除厂商或运营商的软件限制,实现功能自定义、性能优化和安全更新。在智能家居、网络设备和物联网领域,固件升级与刷机是常见的工程实践,用于修复漏洞、增加新特性或适配不同平台。本文聚焦于利用TFTP恢复模式这一通用网络设备维护机制,针对TP-LINK电信定制版摄像头,提供一套完整的刷机方案,将设备刷入官方通用版固件,以解除

weixin_34205826的博客 495

XZ6273H 100V低功耗高压LDO硬件设计与实测体验

这款LDO提供SOT23-3、SOT89-3和TO92三种通用封装,不同场景下可以灵活选择:做小型化的PCB节点时用SOT23-3,板卡面积能控制得非常小;常规工业板卡选SOT89-3,贴片焊接方便,自带的焊盘也能提供基础散热能力;从实际落地的情况来看,它最适配两类场景:一类是汽车电子里的休眠值守子模块,车辆熄火后仍能保持极低的待机功耗,不会过度消耗电瓶电量;另一类是户外无人值守的通信远端节点,长期运行下的低功耗表现能大幅降低设备的供电维护成本。

koce13544100678的博客 231

NXP S32K3xx 多次复位(reset)后MCU跑死、崩溃、出错分析

s32k3出现多次复位后死机的情况

HeFlyYoung的博客 9515

PHY内部环回通过,能证明网口整条链路正常吗?

PHY内部环回通过,只能证明该测试路径在记录条件下工作正常,不能直接证明变压器、RJ45、网线和对端组成的整条链路正常。采购收到“环回合格”报告时,应先确认数据从哪里发出、在哪里折返、又在哪里检查。

Voohu_Elsa的博客 176

基于浏览器插件的拼多多买家订单导出方法

基于浏览器插件的拼多多买家订单导出方法

2501_93542170的博客 1721

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇14

本文系统阐述了STM32晶振电路设计要点,强调负载电容匹配与R_Ext必要性需基于计算验证,指出PCB寄生参数对振荡精度影响显著。重点提出振荡器PCB设计规范:缩短走线、加地保护环、分离地平面、避免串扰,并说明焊接工艺与环境防护对稳定性的重要性。同时解析内部时钟不可用于USB因温漂大,且PLL不放大ppm误差。最后推荐使用MEMS振荡器替代传统晶振,实现低功耗、小体积与高可靠性。

一只天天被叨叨的小可爱 296

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

从FT 93k测试机角度看如何测试芯片的VOH/VOL/VIH/VIL,通俗易懂的方式介绍

FT 93k测试中,VIH/VIL与VOH/VOL的核心是验证芯片“听清”与“说清”的能力。VIH/VIL测试芯片输入灵敏度,通过施加边界电压并观察功能响应;VOH/VOL则在负载下测量输出电平,模拟真实工作状态。测试需严格遵循规格书的负载电流条件,确保信号可靠传输,避免灰色地带干扰。本质是精准复现测试条件,实现“听话的对话者”与“挑剔的听众”的双重角色。

Wang20122013的博客 222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Arduino-MEGA-ESP单片机理论课笔记-06温湿度-07时间-延时定时-2026

本文解析了DHT11温湿度传感器的Arduino代码,逐行讲解了库引入、引脚定义、传感器初始化及数据读取流程。重点说明了delay(1000)导致阻塞的问题,并提出使用millis()实现非阻塞定时,将采样间隔改为2秒,提升程序响应性。同时建议增加isnan()错误检测、优化串口输出格式,确保数据稳定可靠。

zhangrelay的专栏 348

认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇16

VBUS检测用于识别USB主机是否存在,自供电设备强制检测,采用PA9引脚(5V耐压)通过分压或MOSFET方案实现。分压电阻取高阻值(如82k+33k),确保分压后电压≤4V,符合GPIO输入电平要求;当GPIO耐压条件不足时,改用N沟道MOSFET(如2N7002)检测,适用于高电压场景(如5–48V)。三电阻加焊桥可覆盖1.8V/3.3V双档,但量产建议使用标准封装。需避免MCU未上电时5V VBUS接入PA9,以防损坏器件。

一只天天被叨叨的小可爱 206

哪些国产单片机厂家提供FAE技术支持?英锐恩等对比

大厂FAE资源通常优先服务大客户,中小批量项目往往只能找代理商或看论坛。如果你需要,推荐:收到请求当日或次日回复,必要项目24小时内工程师到场,还能组织芯片研发工程师一起评审问题。生态成熟、资料丰富;通过代理商体系提供支持。

2601_95079068的博客 222

使用模板lwip工程,tcp测试板子硬件,跑通

路(IP层)已经修通了(能Ping),但你要找的房间(端口7)目前只接待“TCP”客人,不接待“UDP”客人。建议你先按第二步用Telnet测试一下TCP端口7,这能立刻证明你的板子网络是健康的。然后,根据你的实际需求,选择是继续使用TCP,还是将代码改造为第三步所示的UDP服务器结构。那个“EMAC”的警告,可以按第一步顺手修复,让工程更清爽。太棒了!祝贺你,网络通信的最难关卡已经被你彻底打通了!🎉看到这张截图,作为老师我特别开心。你看上面的日志:你发送了hello,成功收到了hello。

AlibabaApple的博客 281
上一篇: 1-远程升级篇(自建物联网平台)-STM32通过EC800实现HTTP/HTTPS安全OTA升级与外部Flash备份策略
下一篇: 从零构建:FPGA DDC设计中的数值精度与位宽优化实战
tech5
博客等级 码龄17年 53粉丝 1363原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值