- 博客(37)
- 收藏
- 关注
原创 【C语言】C语言编译流程
移除注释:去除源文件中的注释部分,不会影响程序的执行。- 处理预处理指令:处理以 # 开头的预处理指令,如宏定义、文件包含等。- 展开宏定义:将代码中定义的宏展开为实际的代码。- 文件包含:将 #include 指令指定的文件内容插入到当前文件中。- 条件编译:根据 #ifdef、#ifndef、#if 等条件指令判断代码段是否应该被编译。
2025-02-19 20:57:22
317
原创 【stm32】DAC实验(stm32f4hal库)
数字到模拟转换器(DAC)是一种电子设备,用于将数字信号转换为模拟信号。它通常用于将数字数据转换为模拟信号,以便在模拟电路中进行处理。DAC在许多领域都有广泛的应用,如音频设备、通信系统、仪器仪表等。通过DAC,数字系统可以与模拟电路交互,实现数字信号到模拟信号的转换。 分辨率(Resolution):指的是DAC能够产生的不同输出电压或电流的级数,通常以比特(Bit)表示。更高的分辨率意味着更精细的输出。 量程(Full Scale Range):指的是DAC能够输出的最大和最
2025-02-18 20:10:28
902
1
原创 【stm32】定时器输出PWM波形(hal库)
PWM是一种通过调节信号的占空比(Duty Cycle)来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如:- 占空比为50%时,输出平均电压为电源电压的一半。- 占空比为100%时,输出始终为高电平。
2025-02-15 15:24:49
730
原创 【stm32】定时器
1.1、TIM6和TIM7的主要特性● 16 位自动重载递增计数器● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 和65536之间● 用于触发 DAC 的同步电路● 发生如下更新事件时会生成中断/DMA 请求:计数器上溢1、TIM6和TIM7寄存器(基本定时器)1.1、控制寄存器偏移地址:0x00复位值:0x0000位15:8 保留,必须保持复位值。位6:4保留,必须保持复位值。
2025-02-15 15:14:03
1149
原创 【stm32f407hal库】定时器定时功能
参数:TIM_HandleTypeDef结构体指针功能:初始化TIM时基单元参数:TIM_HandleTypeDef结构体指针功能:TIM时基单元赋初值参数:TIM_HandleTypeDef结构体指针功能:回调函数参数:TIM_HandleTypeDef结构体指针功能:回调函数参数:TIM_HandleTypeDef结构体指针功能:启动定时器参数:TIM_HandleTypeDef结构体指针功能:停止定时器参数:TIM_HandleTypeDef结构体指针。
2025-02-14 19:40:59
443
原创 【freertos】freertos任务
功能:创建新的任务并将任务加入就绪列表参数描述:pxTaskCode——指针,指向任务函数。任务永远不会返回(位于死循环内)。该参数类型TaskFunction_t定义在文件 projdefs.h中,定义为:typedef void(* TaskFunction_t)(void *)。pcName——任务描述性名称。主要用于调试。字符串的最大长度由宏configMAX_TASK_ NAME_LEN指定,该宏位于FreeRTOSConfig.h文件中。
2025-02-06 16:57:53
626
原创 windows创建虚拟环境
2、mkvirtualenv 创建新的虚拟环境。1、windows安装virtualenv。5、rmvirtualenv 删除虚拟环境。name:虚拟环境的名字。
2025-02-04 19:13:14
115
原创 【Qt】常用的容器
Qt提供了多个基于模板的容器类,这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。Qt的容器类比标准模板库(standard template library,STL)中的容器类更轻巧、使用更安全且更易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储上的优化,因而可以减小可执行文件大小。此外,它们是线程安全的,即它们作为只读容器时可被多个线程访问。
2025-02-02 19:04:48
895
原创 【Qt】各种常用的按钮(button)
按钮是界面上经常使用的组件,常用的4种按钮组件是普通按钮(QPushButton类)、工具按钮(QToolButton 类)、单选按钮(QRadioButton类)、复选框(QCheckBox类),它们都有共同的父类QAbstractButton(见图4-2),所以它们有一些共有的特性。
2025-01-30 20:22:28
1206
原创 【Qt】信号和槽简介
signal是信号,信号可以看作特殊的函数,需要带有括号,有参数时还需要指明各参数类型;信号(signal)是在特定情况下被发射的通知,例如QPushButton较常见的信号就是点击鼠标时发射的 clicked()信号。只有当信号关联的所有槽函数运行完毕后,才运行发射信号处后面的代码。槽函数与一般的函数不同的是:槽函数可以与信号关联,当信号被发射时,关联的槽函数被自动运行。4、信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参如果参数不匹配,会出现编译错误或运行错误。槽函数与一般的 C++
2025-01-30 10:43:24
516
原创 嵌入式实时操作系统
嵌入式系统是指集成了计算机硬件和软件的特定功能的系统。它通常被用于控制和操作特定设备,如家电、汽车、医疗设备等。嵌入式系统具有以下特点:1. 实时性:嵌入式系统需要能够在特定的时间要求内完成任务,对于实时性有较高的要求。2. 特定功能:嵌入式系统是为特定的应用场景设计的,功能通常比较单一且专注。3. 资源受限:嵌入式系统通常具有较小的内存和处理能力,资源有限。4. 可靠性:嵌入式系统通常需要长时间运行而不产生故障,对可靠性要求较高。5. 低功耗:嵌入式系统通常需要长时间运行,对功耗有一定要求。
2025-01-26 21:34:43
327
原创 OpenCV边沿检测(Python版)
边缘检测是图像处理中的一项重要任务,用于找到图像中的边界或边缘。它在计算机视觉、图像处理和模式识别等领域中具有广泛的应用。边缘可以被定义为图像亮度、颜色或纹理的突变区域。边缘检测算法旨在识别这些变化并将其标记为边缘。边缘检测可以用于分割图像、检测物体边界、提取图像特征等任务。常用的边缘检测算法包括:1.Roberts算子:通过对每个像素点进行水平和垂直方向上的差分计算来检测边缘。
2025-01-20 10:14:13
2293
原创 ESP8266-01S的TCP/IP相关的AT指令
segment ID>:unint32,给每包写入数据分配的ID,从1开始计数,每写一包则自加一,计数满则重新从1开始计数。如果某包数据发送成功,则返回<linkID>,<segmentID>,SEND OK。[<TCP keep alive >]:选填参数,TCP keep alive 侦测,缺省默认关闭此功能。<link ID>:网络连接ID(0~ 4),用于多连接的情况。<link ID>:网络连接ID(0~4),用于多连接的情况。<link ID>:网络连接ID(0~4),用于多连接的情况。
2025-01-17 12:58:13
1196
原创 ESP8266-01S的WIFI功能AT指令
设置指令:AT+CWMODE=参数说明:1:station模式 2:sofAP模式 3:station+sofAP模式查询指令:AT+CWMODE?参数说明:1:station模式 2:sofAP模式 3:station+sofAP模式e.g.:保存在flash中。
2025-01-16 21:25:22
684
原创 visual studio中属性管理器常用配置
包含目录:头文件的目录(修改了系统的include,属于全局的)附加包含目录:.h头文件的目录(只可以用在当前项目)常规附加库目录:lib文件的目录。库目录:lib文件的目录。附加依赖项:lib库名称。
2025-01-16 13:46:15
129
原创 esp8266-01s的基础AT指令
执行指令:AT+UART_CUR=<baudrate><databits>,<stopbits>,<parity>,<flow control>执行指令:AT+UART_DEF=<baudrate><databits>,<stopbits>,<parity>,<flow control>执行指令:AT+UART=<baudrate><databits>,<stopbits>,<parity>,<flow control><flow control>:流控(0,1,2,3)
2025-01-13 10:10:05
907
原创 深度学习——pytorch基础入门
在PyTorch中,张量是PyTorch中最基本的数据结构。张量可以看作是一个多维数组,可以在GPU上加速运算。PyTorch的张量和Numpy的数组非常类似,但是与Numpy不同的是,PyTorch的张量可以自动地在GPU上进行加速计算。PyTorch中的张量是深度学习模型中最常用的数据结构,它可以存储模型的输入、输出以及模型的参数,并且可以通过自动求导来计算梯度,方便进行反向传播算法的实现。
2025-01-12 16:51:12
2588
原创 pandas系列----DataFrame简介
DataFrame是Pandas库中最常用的数据结构之一,它是一个类似于二维数组或表格的数据结构。DataFrame由多个列组成,每个列可以是不同的数据类型(如整数、浮点数、字符串等)。每列都有一个列标签(column label),每行都有一个索引(index),使得我们可以通过标签或索引来访问和操作数据。我们可以使用多种方式来创建DataFrame,最常见的方式是从CSV文件、Excel文件、SQL数据库等外部数据源中读取数据。另外,我们也可以通过手动输入数据、从字典或列表中创建DataFrame。
2025-01-06 17:27:25
1006
原创 pandas系列----Series简介
Series是pandas库中的一个重要数据结构。它是一种类似于一维数组的数据结构,能够存储各种数据类型(如整数、浮点数、字符串等)。Series对象由两个部分组成:索引(index)和数据(values索引用于标识和访问数据中的每个元素,类似于数组的下标,但功能更强大,它可以是非连续的、具有不同数据类型(如字符串、日期等)的标签。数据部分则是实际存储的元素序列。构造Series的方法有3种——通过列表,numpy数组或字典创建。
2025-01-06 07:40:13
1000
原创 OpenCV:Mat简介——C++版
Mat 类是 Core 模块中常用的一个矩阵类,该类的声明在头文件opencv2\core\core.hpp中,使用 Mat类时要引入该头文件。类 Mat是 OpenCV 新定义的数据类型,类似于传统的数据类int、float 或 String。Mat类用于在内存中存储图像,图像都是二维数组。所以 OpenCV 定义了处图像的矩阵类别 Matix;我们在处理一块数据的时候,如果使用 Mat类,得到的好处是:不需要手动申请一块内存,在不需要时不用再手动释放内存,可以通过类的封装方便地获取数据的相关信息。
2025-01-04 23:54:35
232
原创 Python----Matplotlib数据可视化
直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,用纵轴表示数量或者占比。值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较跨类别的数据。s:传入固定数值或者一维数组,传入固定数值,则表示点的大小固定,传入一维数组,则表示每个点的大小。c:传入固定数值或者一维数组,传入固定数值,则表示点的颜色固定,传入一维数组,则表示每个点的颜色。在当前图像中添加标题,可以设置标题的名称,字体,颜色,位置等参数。
2025-01-04 21:44:24
1103
原创 Python----Numpy简介
在numpy中,有两种基本的数组对象,分别为(N-dimensional array Object)和ndarray是存储同一数据类型的多维数组,ufunc是对数组进行处理的函数。
2025-01-02 14:27:01
766
原创 OpenCV:C++——几何变换
图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同。平移后的图像上的每一个点都可以在原图像中找到对应的点。我们知道,图像是由像素组成的,而像素的集合就相当于一个二维的矩阵,每一个像素都有一个“位置”,也就是像素都有一个坐标。假设原来的像素的坐标为(x0,y0),经过平移量(△x,△y)后,坐标变为(x1,y1)。
2024-12-26 22:54:32
1086
原创 OpenCV:C++——直方图修正
直方图的计算很简单,无非是遍历图像的像素,统计每个灰度级的个数。在OpenCV 中封装了直方图的计算函数 calcHist,该函数能够同时计算多个图像、多个通道、不同灰度范围的灰度直方图。为了更为通用,该函数的参数有些复杂。*/*/images: 表示图像矩阵数组,这些图像必须有相同的大小和相同的深度;nimages: 表示数组 imagcs 的个数;channels: 表示要计算的直方图的通道个数;mask: 表示可选的掩码,不使用时可设为空,要和输入的图像具有相同的大小,在进行直方图。
2024-12-21 15:58:07
856
原创 OpenCV:C++——灰度变换
图像点运算是指对图像中的每一个像素点进行计算,使其输出的每一个像素值仅由其对应点的值来决定,可以理解为点到点之间的映射。点运算指对图像中每一个像素依次进行同样的灰度运算。在所有图像处理算法中,点运算(或称点处理)是基本的图处理操作。点处理既可以单独使用,又可以与其他算法组合使用。通过点运算,输出图像每个像素的灰度值仅仅取决于输入图像中相对应像素的灰度值。因此,点运算不可能改变图像内的空间关系。点处理是基于像素的处理,进行这类处理时,每个像素的处理与其他像素无关。
2024-12-20 19:44:16
1071
原创 OpenCV:C++——边框(copyMakeBorder )和轮廓(findContours ,drawContours)
在 OpenCV 中,可以使用函数 copyMakeBorder 为图像设置边界。该函数可以为图像定义额外的填充(边框),原始边缘的行或列被复制到额外的边框。:表示输入图像,即原图像,填 Mat 类的对象即可;:表示输出图像,和原图像有一样的深度:size=Size(src.cols +lef +right, src.rows +top+ bottom),其中 top、bottom、lefl、right分别表示在原图像的4个方向上扩充多少像素;
2024-12-18 20:27:40
1283
原创 OpenCV:C++——绘制文字
OpenCV中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数,用于在图像制文字。fontScale:字的大小,值越大,字越大。thickness:线条宽度。text:待绘制的文字。org:文本框的左下角。fontFace:字体。color:线条的颜色。lineType:线型。img:待绘制的图像。
2024-12-18 17:32:36
297
原创 OpenCV:随机数(C++版)
随机数是编程中经常用到的操作,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法有使用rand()、srand()等,这些函数在 OpenCV中仍然可以使用。此外,OpenCV特地编写了 C++的随机效类 cV::RNG,使用起来更加方便。计算机产生的随机数都是伪随机数,是根据种子 seed 和特定算法计算出来的。所以,只要种子一定,算法一定,产生的随机数是相同。
2024-12-17 18:46:15
243
原创 OpenCV:使用C++——Scalar简介
值得注意的是,OpenCV 中对RGB 图像数据的存储顺序是BGR,所以Sealar(255,0,0)显示的是蓝色,Scalar(0,255,0)显示的是绿色,Scalar(0,0,255)显示的是红色。类Scalar 在初始化矩阵时会经常用到,用来对每个通道赋值。比如,存放单通道图像中的像素:cv::Scalar(255),存放三通道图像中的像素:cv::Scalar(255,255,255)。
2024-12-17 17:59:44
213
原创 OpenCV:使用C++画基本图形
在OpenCV 中,点分为2D平面中的点和3D平面中的点,区别是 3D平面中的点多了一个z坐标。Point表示由图像坐标x和y指定的2D点,坐标x和y都是整数。3D空间中的点也和2D中的类似。
2024-12-16 19:31:15
518
原创 opencv:使用c++开发(1)
MouseCallback onMouse :鼠标事件响应的回调指针(如下)const String& winname :窗口的名字。void* userdata :传给回调函数的参数。event :枚举类型如下。flags :枚举类型如下。
2024-12-02 21:35:10
323
原创 visual studio 使用C++做opencv开发环境配置
4、点击连接器->常规->附加库目录,找到D:\OpenCV\opencv\build\x64\vc16\lib。3、点击C/C++下的常规,添加附加包含目录D:\OpenCV\opencv\build\include。5、点击连接器->输入->附加依赖项,输入opencv_world4100.lib(根据下载的版本来写)6、打开cmd,输入opencv_version,如果出来的是版本号,环境变量就安装好了。4、下载后如下,双击安装,然后选择一个纯英文的路径下安装(我的在D:\OpenCV)
2024-11-27 22:43:44
343
原创 AT89S51烧录程序的步骤
1、打开PROGISP,在对应的位置选择AT89S51。3、选择需要烧录的程序(.Hex)2、点击右侧调入Flash。4、点击自动,等待下载。
2024-04-10 00:37:10
847
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人