自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (1)
  • 收藏
  • 关注

转载 嵌入式开发中观察者模式实现(转)

观察者模式(Observer Pattern)是一种广泛应用于软件设计的行为型设计模式。在该模式中,存在两种关键的角色:被观察者(Subject 或Observable):这是一个包含了一系列观察者对象的集合,并提供了增加、删除观察者对象以及通知所有观察者的接口。当被观察者的状态发生变化时,它负责触发通知机制,使所有关联的观察者得到更新。观察者(Observer):这是从被观察者那里接收状态变更通知的一组类的接口或者抽象类。每个具体观察者都必须实现这个接口,以便在接收到通知时执行相应的操作。

2025-01-05 11:53:46 17

原创 void * 的妙用

使用void *指针作为函数参数的核心出发点是灵活性和通用性。避免重复代码:使得函数和数据结构可以处理多种不同类型的数据。代码复用void *提供了一种通用的接口,可以用于许多不同的应用场景,减少了重复编写类型特定代码的需求。提高模块化:使得不同模块和系统之间的接口更加通用和抽象,简化了模块间的耦合。虽然void *提供了极大的灵活性,但也需要开发者注意类型安全问题。传递void *后,必须手动进行类型转换,并确保对其使用时的类型正确,否则可能会导致运行时错误。

2025-01-05 11:47:29 476

原创 示波器使用指南

直流耦合:传递信号的所有频率成分,包括直流和交流。交流耦合:仅传递交流信号,滤除直流成分。接地耦合:将输入端接地,显示零电平(仅用于参考或校准)。

2025-01-05 10:35:16 305

原创 如何提高自己的结构化思考问题的能力

提高结构化思考问题的能力是一项重要的技能,可以帮助你更清晰、高效地分析和解决问题。

2025-01-01 22:24:39 365

原创 时序 | 通讯 | 技巧 | 中断干扰

平衡小车制作分享 - 软件篇

2025-01-01 21:40:20 178

原创 串口 + DMA

平衡小车制作分享 - 软件篇

2025-01-01 21:35:17 156

原创 中断系统 | 高优先级抢占原理

因此51的内核设置了一个高优先级的向量表,注册在高优先级向量表的先会被优先执行,而且可以打断正在执行的低优先级任务。中,不仅他们中断的执行顺序是固定的,而且在执行中断服务函数的过程中,如果有更紧急的任务,也无法被打断了。如果INT0 和TIM0 的中断同时发生,CPU会有执行INT0的服务函数,然后再执行TIM0的函数。如果PT0 设置最高优先级,如果此时,其他的中断一起发生,cpu会优先执行T0.或者说,如果此时下面的红框发生中断,此时如果发生T0中断,会马上执行T0中断。如果所有的中断都分配在同一个。

2025-01-01 21:22:28 298

转载 SourceInsight4.0的使用

一、项目管理1、新建一个项目快捷键Alt+Shift+N可以打开新建项目对话框,然后根据提示填好项目存储位置,源文件位置等,然后会出现添加删除项目文件对话框,选中自己想要编辑和浏览的文件添加即可,这样就建好了一个项目。2、添加和删除项目文件(1)、在添加删除文件前,可以先设置文件过滤器,菜单栏-选项-文档选项,就可以看到文件过滤器了,怎么设置应该是一目了然的。(2)、菜单栏-项目-添加或删除文件,即可打开添加和删除项目文件对话框。3、关闭项目、打开项目、删除项目。

2024-12-21 22:38:41 126

原创 C语言 - 变量

在C语言中,定义一个变量时,编译器会为该变量分配一块内存区域,并将其关联到一个名字(变量名)。从程序员的视角来看,这个名字就是变量,但从计算机的角度来看,变量只是内存地址的一个。

2024-12-21 17:03:34 418

原创 C语言-左移、右移

一个十六进制数右移n位、左移n位,数据大小分别会发生什么变化。

2024-12-21 12:07:26 365

原创 51单片机 串口UART

数据写入SBUF寄存器后,8051会自动开始数据的串行传输。传输完成后,TI(发送中断标志)位会被置1,表示发送完成。发送前直接写入SBUF , 然后单片机就在串口时钟的驱动下,一位一位发送,全部发送完成之后 , 发送完成标志位置1。当你想要通过串口发送数据时,需要将数据写入SBUF寄存器。1 , 当单片机通过串口接收到外部设备发送的数据时,这些数据会被存入SBUF寄存器中。2 , 当数据成功接收并存入SBUF后,RI(接收中断标志)位会被置1,表示接收完成。

2024-12-11 23:40:33 309

原创 51单片机-内部扩展RAM的应用

RAM是在程序运行中存放随机变量的数据空间,51单片机球认的内部RAM只有128B,c清于编程者来说,一个芯片的RAM空间越大,RAM不够用怎么办,连过多的变量都不敢定义。写起程序来就越容易得心应手,不会总考忠压前面我们写程序时曾讲到过,如果定义个变量后,不对这个变量进行初始化,这个修就是0,其实这个结论是流要一定的条的闲四写.政酸石用防学节之利要于品东粗烘器技式内叫限款边装控观有初哈化时编译器会默认将变量值设定为0。一旦程序中的总变量超过128娜,

2024-12-11 22:45:02 688

原创 电位器分段编码识别挡位

最近接到一个需求,就是使用电位器实现,某个用电器的功率控制,一共控制3个挡位:1、0挡位2、1挡位3、2挡位4、3挡位由于电位器本质一个是电阻,我们若希望通过电位器来控制不同挡位,就需要对其进行分段处理,然后使用单片机的IO口对adc进行采集。由于电位器本身存在一定的线性度或者回差问题,我们的做法是这样的。

2024-12-05 22:54:16 163

原创 串口通讯 | ascii | hex | 字符串(解析理解)

实验环境搭建使用一个usb转ttl的模块,将其中的TX 、RX 短接在一起,波特率随意实验截图上位机字符串发送 - > 上位机字符串接收上位机字符串发送 - > 上位机hex接收上位机HEX发送 - > 上位机字符串接收上位机hex发送 - > 上位机hex接收

2024-11-27 11:59:20 206

原创 串口通信:hex、非hex格式

HEX格式:在HEX模式下,数据以十六进制的形式显示和发送,适合发送原始的字节数据,如协议数据或者二进制数据。这种方式在底层通信和硬件调试中非常常见,因为它可以精确地控制和查看每个字节的数据。非HEX(ASCII)格式:在非HEX模式下,数据以字符的形式显示和发送,适合发送可打印的文本数据。这种方式在高层通信中更常用,因为它可以直接显示和处理文本信息,易于阅读和理解。这两种模式的选择取决于你的具体需求,包括数据的类型、用途、以及你希望如何解析和处理这些数据。

2024-11-27 11:39:02 1059

原创 高阻输入的应用 | 浮空输入

现在我使用一款51内核的单片机,单片机的引脚连接着一个按键检测电路,引脚已经被一个外部电阻上拉到5V,那么请问呢,在配置该引脚的工作模式的时候,是应该配置成高阻输入,还是上拉输入模式,还是什么其它模式?模式是比较合适的,因为这样可以减少单片机内部的功耗,并且利用外部上拉电阻来确保引脚在按键未按下时为高电平。模式,这样在按键未按下时,内部上拉电阻会将引脚拉高,按键按下时,引脚被拉低。:引脚内部连接到一个上拉电阻,当引脚悬空时,会被内部上拉电阻拉高到高电平。:引脚只能输出低电平,需要外部上拉电阻来确定高电平。

2024-11-26 10:32:07 541

转载 转载:EC11的中断实验——NVIC&EXTI

这样为了记录下完整的表述1和表述2,我们定义两个全局变量flag1和flag2,当没有进入中断的时候,默认我们将其初始化为0,当发生了属性为“下1”的中断后,我们将flag1=1;正常的EC11编码器有15档、20档等,这里的档可以理解为,我们转动一圈,开关内部闭合与打开多少次,由原理图可知,我们编码器的内部实际上是一个单刀开关,转动一次之后,开关改变一次状态,A与B的电平就发生翻转。A在下降沿的时刻B是低电平,A在上升沿的时刻B是高电平,这可以表述为(A 下 B 0,A 上 B 1),记作表述2。

2024-11-26 09:34:28 140

原创 过零可控硅光耦与随机可控硅光耦

推荐型号 MOC3021无过零检测。

2024-11-20 22:20:30 207 1

原创 赛元MCU 脱机烧录步骤

1、 将SC-LINK 使用外部5V电源供电2、将烧录口对准主板烧录接口3、busy亮红灯,进入烧录ing,烧录成功后,OK灯亮蓝灯。

2024-11-07 16:49:34 496

原创 通用型蜂鸣器驱动函数

通过传入重复次数(

2024-11-07 10:58:08 367

原创 51单片机 定时器、计数器

在 51 单片机中,定时器/计数器可以被配置为计时或计数定时模式:单片机内部的振荡器(通常由外部晶振提供时钟信号)驱动定时器按固定频率计数。计数模式:定时器由外部输入信号触发,每检测到一个上升或下降沿时,计数器的值会增加1。定时器 0和定时器 1,它们各自都有独立的寄存器和控制方式。在部分改进版 51 单片机中(如 8052),还增加了定时器 2,功能更为丰富。51 单片机的定时器功能强大且灵活,支持多种模式和应用场景。合理配置定时器,不仅可以实现精准的定时操作,还可以用于事件计数和外部触发事件。

2024-11-06 09:13:48 1059

原创 nop() 指令详解

nop()nop()虽然是一条“无操作”指令,但在 51 单片机中有着独特的应用价值。它可以用于精确延时、时序调整、指令对齐、硬件兼容等场景,辅助开发人员实现更加可靠、稳定的嵌入式系统。合理运用nop指令可以使程序运行更符合预期,但在大多数情况下,应结合其他更为高效的方式(如定时器、外设中断)来实现精确的时间控制。

2024-11-06 09:06:34 1900

转载 单片机程序的整体框架设计的一些思路体会

单片机系统开发人员的目标之一是在编程环境中创建固件,以实现低成本系统、软件可靠性以及快速的开发迭代时间。实现这种编程环境的最佳方法实践是使用统一的固件架构体系结构,该体系结构在产品开发过程中充当框架并支持“固件模块化”,或称为子系统。可以结合固件模块化、可测试性和兼容性的正确组合的设计体系架构结构应用于任何固件开发项目,以最大程度地提高代码可复用性,加快固件调试速度并提高固件可移植性。模块化编程将程序功能分解为固件模块/子系统,每个模块执行一个功能,并包含完成该功能所需的所有源代码和变量。

2024-10-31 00:12:56 82

原创 按键扫描程序框架

定义单击、双击和长按的回调函数类型,这些类型应该匹配回调函数的参数和返回值。

2024-10-31 00:08:06 255

原创 逻辑推理学习笔记

论证1.演绎推理(最优) 4.设证推理(次优)2.归纳推理(次优) 5.反向推理(最差)3.类比推理(最差) 6.当然推理(次优)

2024-10-27 20:15:45 563

原创 光耦的应用

光耦是一种实现信号隔离的元器件,。

2024-10-26 14:38:28 316

原创 按键驱动框架

首先,定义可能的按键事件类型,例如按下、释放等。KEY_PRESS,KEY_LONG_PRESS, // 可以根据需要添加长按事件// 其他事件类型...定义一个函数指针类型,用于处理按键事件。

2024-10-18 09:38:47 290

原创 esp idf 版本切换

然后同时 按住shift + ctrl, 选择idf 扩展器。然后选择具体的现存版本进行安装就配置即可。现在本地安装好不同的版本idf。

2024-10-15 14:28:52 280

原创 LVGL 报错记录

由于项目有多个屏幕,guider 生成的代码,会默认给每个屏幕添加一个flag = true,表示当前屏幕未加载,需要进行初始化。但是我发现,如果发生了屏幕跳转之后,也就是原来的屏幕flag 不设置成 flag = false;就会触发系统的看门狗复位。

2024-10-05 10:33:11 389

原创 防反接电路设计

串联二极管,优点:成本低、设计简单缺点:损耗大,P = ui。

2024-09-30 16:20:24 482

原创 可视化串口工具推荐

官方地址

2024-09-30 14:40:30 169

原创 mos管的应用

2024-09-30 14:04:07 107

原创 电脑网络问题 | 记录 | DNS

win10 环境下,发现微信可以登录、但是使用google浏览器无法打开浏览器。

2024-09-29 21:06:50 226

转载 51 | data | idata | xdata | code

51单片机的运行内存分前128字节和后128字节。前面128个字节好像cpu里的寄存器,读写非常快。后面的128字节只能用指针访问。单片机可以外扩运行内存条,外扩的这部分内存叫xdata。

2024-09-25 09:23:32 331

原创 蜂鸣器驱动程序

如果你的蜂鸣器任务是定期执行的(例如每100毫秒调用一次),那我们可以用来避免使用阻塞式的延时函数。通过在每次任务调用时检查蜂鸣器的状态、时间来实现非阻塞的控制逻辑。下面是基于状态机的蜂鸣器驱动程序,适合在周期性任务中调用。

2024-09-25 09:21:04 321

原创 蜂鸣器驱动程序

如果你的蜂鸣器任务是定期执行的(例如每100毫秒调用一次),那我们可以用来避免使用阻塞式的延时函数。通过在每次任务调用时检查蜂鸣器的状态、时间来实现非阻塞的控制逻辑。下面是基于状态机的蜂鸣器驱动程序,适合在周期性任务中调用。

2024-09-25 08:58:37 402

原创 过零检测 | 继电器保护 | 家电

在家电产品中,继电器的通断需要在零点的时候导通么,有必要么,为什么。

2024-09-24 09:22:03 518

原创 单片机编程-代码风格规定 | 代码规范

C语言编码规范

2024-09-18 23:19:53 225

原创 OTA升级

方式1:方式2:服务器与mcu通讯机制

2024-09-18 22:36:52 316

原创 TM1629B数码管驱动IC 应用

为什么需要使用数码管驱动IC一般情况下,如果是驱动一个数码管,我们可以使用共阳、共阴数码管。通过固定共阳数码管的一端为高电平1,然后控制seg 口为0 ,低电平即可点亮。但是当数码管数量过多的时候,比如有8位数码管,那么就会占用单片机的 8 + 8个seg口 = 16个IO在这种场景下,数码管驱动IC 应运而生。

2024-09-18 00:13:45 611

STM32开发教程:Keil环境引入cJSON进行JSON解析

内容概要:本文档详细讲述了在 Keil 环境下为 STM32 工程添加并配置 cJSON,以实现在嵌入式项目中轻松地对 JSON 数据包进行解析的技术方法与操作步骤,并提供了一个基本的应用实例。 适用人群:熟悉 STM32 和 C 编程,具有一定嵌入式开发经验的开发者以及初学者。 使用场景及目标:适用于 IoT 设备开发过程中对云端通信、本地数据分析或者任意涉及 JSON 数据格式的场合下需要解析或生成 JSON 的 STM32 程序设计。 其他说明:本指南提供了从 cJSON 文件下载直至 STM32 中集成的所有具体步骤及示例代码,并针对一些常见问题给出了指导性的建议。

2024-10-16

C语言编程思想

设计模式

2017-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除