- 博客(60)
- 收藏
- 关注
原创 excel中如何筛选一列中重复的内容,相同的内容只保留一次
筛选excel中一列中重复出现的值,统计里面的类别有多少,即相同的内容,只保留一次。
2024-12-25 22:09:32
2767
原创 java实现ModbusCRC16校验
电流数据采集器是RS485 Modbus协议,想通过java实现串口数据的采集,因为涉及到串口通信的CRC校验,所以需要通过java来实现对采集的电流值进行校验,确保每次读到的电流值都是正常的。Modbus协议是一种串行通信协议,被广泛用于设备之间的通信。,其核心思想是将数据视为一个长的二进制数,2. 什么是ModbusCRC16校验。,称此寄存器为CRC寄存器,3. CRC16校验步骤。CRC16校验是一种。
2024-11-20 23:20:44
639
原创 简单记录牛客top101算法题(初级题C语言实现)BM83 字符串变形 && BM84 最长公共前缀
在ASCII表中,a的ASCII值是97,A的ASCII值是65,大写字母是排在小写字母前面的,所以大写字母和自身的小写字母就是相差97 - 65 = 32。开始的时候,以为是从中间对称反转一下就可以了,再把大小写反转一下,结果不是这样的,后来没有做出来,就看了官方的代码讲解,找到了思路;1.C语言中有库函数,可以判断字母是大写还是小写,并实现相应的转换。2.不使用库函数,自己编写函数来判断。
2023-12-31 13:57:13
557
原创 WPS中如何根据身份证号生成出生日期并排序
日期的排序必须是DATE格式,如果是其他的格式,不能排序(或者排序结果是错的),使用文本排序也不行。首先要把格式转换成DATE格式,再进行排序。
2023-12-26 17:44:58
2300
原创 有依次对应关系的数组X、Y、Z,如何排序其中一个X数组,使得另外的数组还与排序完成后的数组相对应(C语言实现)
要对其中数组进行排序并保持它们之间的一一对应关系,可以使用结构体数组来实现。以下面的这个对应关系为例,进行相应编程实现。
2023-11-21 23:11:26
1101
原创 简单记录牛客top101算法题初级题(C语言实现)BM12 单链表的排序
简介:冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是从列表的一端开始,依次比较相邻的两个元素,如果它们的顺序不正确就交换它们,然后继续向列表的另一端移动,重复这个过程,直到整个列表变得有序为止。整个过程的思路是,从堆中不断选择最大的元素,将其放在数组的末尾,然后将剩余的元素重新构建为最大堆,重复这个过程直到整个数组都排好序。左指针 left 和右指针 right 继续移动,直到left的索引是2,就是值为3的时候,right的索引是1,值是1的时候,停止循环。3,8,7,7,9。
2023-09-01 14:54:02
269
原创 简单记录牛客top101算法题初级题(C语言实现)BM42 用两个栈实现队列 && BM43 包含min函数的栈 && BM44 有效括号序列
栈(Stack)是一种非常重要的数据结构,它基于后进先出(Last-In-First-Out,LIFO)的原则,就是栈中最后插入的元素将会是第一个被移除的元素。栈的两个基本操作:压入(Push):将元素放入栈的顶部,叫做 “压入” 元素。弹出(Pop):从栈的顶部移除元素,叫做 “弹出” 元素。栈的常见的应用场景和示例函数调用栈:编程语言使用栈来跟踪函数的调用和返回,以确保正确的控制流程。表达式求值:栈可以用于计算数学表达式,特别是中缀表达式转换为后缀表达式,然后进行求值。
2023-08-30 19:47:54
277
原创 简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 && BM28 二叉树的最大深度 && BM29 二叉树中和为某一值的路径
** 要求:给定一个二叉树的根节点root,返回它的中序遍历结果。** 1.1 自己的整体思路(与二叉树的前序遍历大致一样)使用二叉树的前序遍历方法,递归完成二叉树元素的访问。先遍历二叉树,求出二叉树的结点数量以后,再申请数组,这样节省内存大小。二叉树的前中后序遍历,只需要改变访问根结点的代码位置,其与递归左子树和右子树的位置,代表是前中后序的一种。1.2 小结1.2.1 求二叉树结点的个数 假设这个二叉树如下所示:
2023-08-15 23:01:16
552
原创 简单记录牛客top101算法题(初级题C语言实现)BM17 二分查找 && BM21 旋转数组的最小数字 && BM23 二叉树的前序遍历
1.计算中间位置 mid,并与 right 指针所指向的元素进行比较:如果 rotateArray[mid] > rotateArray[right],说明最小值在 mid 右侧,将 left 更新为 mid + 1。如果 rotateArray[mid] < rotateArray[right],说明最小值在 mid 左侧或就是 mid,将 right 更新为 mid。
2023-08-11 11:17:56
818
原创 简单记录牛客top101算法题(初级题C语言实现)BM8 链表中倒数最后k个结点 && BM10 两个链表的第一个公共结点&& BM6 判断链表中是否有环
要求:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。输入: {1 , 2 , 3 , 4 , 5 } , 2 返回值: {4 , 5 } 说明:返回倒数第 2 个节点 4 ,系统会打印后面所有的节点来比较。输入: {2 } , 8 返回值: {
2023-08-09 14:57:54
452
原创 简单记录牛客top101算法题(初级题C语言实现)BM4 合并两个排序的链表 && BM13 链表是否为回文结构&& BM15 删除有序链表中重复的元素
再遍历一遍链表,找到链表对称的位置,并记录下对称位置的指针,如果是4(偶数)个元素,就记录3(偶数 / 2的下一个位置)的指针位置,如果是7(奇数)个元素,就记录4(奇数 / 2的下一个位置)。3.检查快指针是否到达链表末尾(即快指针的下一个节点为空,或者快指针本身为空)。3. 反转对称位置的指针后面的链表,然后进行依次比较,如果都相同返回true,有一个不相同,就返回false。3. 在第三种情况中,要考虑到比较链表中的元素时,链表1中的元素遍历完还是链表2中的数据先遍历完成。
2023-08-08 15:35:20
494
原创 C语言基础知识——结构体和共用体
结构体类型:结构体类型是用户自定义的数据类型,用于表示一组相关的数据,这些数据可以是不同的类型。(也就是结构体的定义)结构体变量:也就是结构体类型变量,它是根据结构体类型创建的具体实例,用于存储实际的数据。int age;float gpa;这里就是创建了一个名为Student的结构体类型。这里就是创建了个名为student1和student2的两个结构体变量。
2023-08-03 00:13:00
1801
原创 简单记录牛客top101算法题(初级题C语言实现)判断回文字符串 && 反转字符串 && 合并两个有序的数组
给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。 字符串回文指该字符串正序与其逆序逐字符一致。1.1 整体思路统计字符串个数。遍历字符串,首尾依次比较字符是否相等备注: 以字符串数组5个元素为例子,5 / 2 = 2,i能取到的值就是0和1(前两个元素),所以从尾开始算起的话,也是取了最后一个元素和倒数第一个元素(后两个元素); 以字符串数组6个元素为例子,5 / 2 = 3,i能取到的值就是0和1和2(前三个
2023-07-30 19:49:38
460
原创 基于stm32F4探索者,通过RS485通信模块读取红外测温仪的温度数据
RS485是一种串行通信协议,用于在多个设备之间进行数据通信。它定义了电气特性、信号线配置和通信协议,使得多个设备能够通过一对差分信号线进行全双工通信。特别适用于长距离通信和多设备连接的应用。1.差分信号:RS485使用两根信号线(A和B)来传输数据,其中一个为正向传输,另一个为反向传输。这种差分信号传输方式使其具有较强的抗干扰能力,适合在噪声较高的工业环境中使用。2.多点通信:RS485支持多点通信,即多个设备可以连接在同一条信号线上,实现全双工通信。
2023-07-21 15:56:37
2304
5
原创 简单记录一下剑指offer的编程题(C语言实现)——替换空格&&反转链表
因为已经对cur->next进行操作了,即cur指向前一个结点,现在再移动cur的指针位置,已经和头结点的下一个结点断开了,找不到下一个节点的位置了,所以还是要引入新的结点变量,来记录头节点的下一结点来完成遍历链表。新建一个数组,长度为替换空格后的长度+1,遍历原始数组,往新数组中按顺序添加字符。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。链表是带指针的结构体;
2023-07-19 10:35:24
581
原创 FreeRTOS简单任务创建和任务删除(基于stm32F407)
使用动态方法 xTaskCreate()创建任务,使用vTaskDelete()函数删除任务;创建开始任务start_task,在开始任务中创建其他三个任务,创建task1任务实现LED0每500ms闪烁一次,创建task2任务实现LED1每500ms闪烁一次,创建task3判断按键KEY0是否按下,按下则关掉task1。
2023-06-10 11:06:08
1529
原创 使用stm32CubeMX生成hal库代码——点亮LED灯
编译代码时遇到问题,查阅资料,发现是没有启动文件,这里在其他的源码文件中复制一个startup_stm32f407xx.s文件,然后添加到现有工程中,如下所示。
2023-05-31 11:33:14
1571
原创 基于stm32F407的hal库,移植FreeRTOS的具体步骤和遇到的问题(看正点原子的视频)
遇到如下报大量语法错误,原因是keil编译器问题,把编译器的版本设置为V5即可。最后把程序烧到开发板中,如果LED灯没有亮,复位几次,观察LED是否亮。
2023-05-26 17:44:14
3311
1
原创 卸载旧版本Keil,安装新版本的注意事项以及安装完成以后的一些问题
但是点上面的Device Connect,没有反应,有这个提示ST LINK is not in the DFU mode plesse restart it,在网上查找解决办法,有的说要重新下载st link utility工具,再升级,这里没有重新下载,关闭keil,拔掉下载器,重新打开keil,再插上下载器,ST-LINK->Firmware update->device connect,就能更新了,最后成功把程序烧到开发板。
2023-05-25 12:35:07
7740
3
原创 解决adams中导入装配体,出现装配体中的所有零件重复问题
在adams中导入零件前,一定要确定初始状态再导入,因为里面的装配体初始运动位置是不能修改的,就是你导入时的位置。
2023-05-10 20:09:35
2248
原创 串口通信——stm32F407实现串口发送坐标,输出x坐标和y坐标
在数据的类型上,x和y的坐标值类型是 int16_t ,就是有正负号,写程序是开始写成uint16_t,导致输出负数错误。
2023-04-20 09:29:17
2395
2
原创 如何快速创建一个Ant Design工程
在计算机的cmd窗口中输入上面的代码,这里是先进入F盘(这里把工程创建在F盘),最后的my-project是创建的Ant Design工程名,自己可以改这个名称,然后系统会自动在F盘创建该文件夹,把工程文件创建到该文件夹中。
2023-04-03 23:21:02
991
原创 用正点原子的板子(STM32F4探索者)做DAC 实验
软件触发模式,指的是向软件触发寄存器SWTRIGR中写入命令时触发转换,也就是将DOR寄存器中的数据进行转换;使用STM32F4内部 DAC1来输出电压,通过 ADC1的通道5采集DAC的输出电压,并通过串口打印电压值。该函数就是把想输出的电压值换算成对应DAC的输入值,这里value值就是期望的电压值,这里做了10倍处理。使用跳线帽把DAC和ADC的引脚连起来,这里把想输出的电压值设置为1v,2v,3v,观察串口输出的结果。这里使用的是不使用触发。这里使用DAC的通道1,其对应的引脚是PA4。
2023-03-22 16:54:00
2298
原创 用正点原子的板子(STM32F4探索者)做独立看门狗(IWDG)实验
由于程序是由按键实验复制过来的,在没有把延时函数初始化的情况下,就使用了延时,导致程序就卡在了delay_ms(200)上,经过调试发现问题,加上初始化,最后解决了这个问题。//初始化延时函数 delay_ms(200);
2023-03-21 10:10:18
1175
1
原创 看野火的视频,用正点原子的板子(STM32F4探索者)做ADC读取电压实验
将ADC配置连续模式,只需要在第一次转换时给触发信号,后面不需要再给。使用STM32F4的ADC1通道5(PA5)来采样外部电压值(这里采样两个电压值TPAD(3.3v),GND(0v)),最后通过串口打印电压值。这里是用于模拟电路的时钟,就是APB2的时钟,这里的时钟是84MHZ,PCLK2:APB2高速总线时钟。这里转换数据结束就会产生中断(使用的是规则通道,不是注入通道),然后进入中断中读取ADC采集到的值。这是ADC采集到的值转换成电压的公式,就是比例关系:3.3:4096 = x:采集到的数值。
2023-03-20 20:52:05
2711
1
原创 用正点原子的板子(STM32F4探索者)做PWM 输出实验
使用 TIM14 的通道 1 来产生 PWM 控制 LED0(DS0) 的亮度。由上图可以看出,GPIOF9引脚对应的是定时器TIM14的通道1。由上图可以看出,GPIOF9引脚对应的是LED0。
2023-03-17 00:00:54
1324
原创 看野火的视频,用正点原子的板子(STM32F4探索者)做输入捕获(脉宽测量)实验
如图所示,WK_UP是与引脚PA0相连接的,正常情况下,未按下KEY_UP键,PA0是低电平,按下按键是高电平,实验目标就是捕获高电平脉冲的时间(就是按键按下去的时间)。使用定时器TIM5 的通道 1(PA0)来做输入捕获实验,捕获 PA0 上高电平的脉宽(用 KEY_UP 按键输入高电平),最后通过串口打印高电平脉宽时间。Tclk:TIM5 的输入时钟频率(单位为 Mhz),这里TIM5的时钟频率为是84Mhz;如图所示,PA0引脚是通用定时器5的通道1。按下按键时间长短不同,捕获的时间不同。
2023-03-16 21:00:38
1802
原创 在C语言中,浮点数如何以16进制的形式转换为字符串(使用sprintf)
这里需要把浮点数,乘以10的倍数变成int型数据,才能成功转换。使用sprintf函数,把浮点数以16进制的形式转换为字符串。这样直接写入,不是16进制,浮点数直接转换是不能实现目的的。可以看到转换成功,后面如果需要解析数据,除以倍数就可以了。
2023-03-13 21:14:54
1596
原创 看野火的视频,用正点原子的板子(STM32F4探索者)做DMA实验
关于存储器到外设的数据传输:就是把一个数据中的数据通过DMA传输到串口的数据寄存器中(USART_DR),串口把数据发送出来,通过串口助手展示。关于存储器到存储器的数据传输实验: 就是把一个数组的数据通过DMA复制到另一个数组中去。这里使用的是DMA2_Stream7,通道4,串口是USART1。使用DMA完成存储器到存储器的数据传输和存储器到外设的数据传输;实验1结果如下图所示,可以看到数据传送成功。实验2结果如下图所示,可以看到数据传送成功。
2023-03-10 17:17:34
1584
原创 用STM32F4探索者做软件模拟IIC实验
通过软件模拟I2C,实现和24C02(EEPROM)之间的双向通信。初始化IIC;编写起始、停止、应答信号函数;编写向24C02指定地址写入数据函数;编写在24C02指定地址读取数据函数;编写main函数这里是使用GPIOB8,GPIOB9模拟IIC,GPIOB8对应的是IIC的SCL,GPIOB9对应的是IIC的SDA。如图所示,PB9对应的就是18位和第19位,00是输入模式,01是输出模式;两个位&(与运算),相同为本身,不同为0;两个位|(或运算),有1为1,两者0为0;&= ~(1
2023-03-07 14:40:55
1948
原创 看野火的视频,用正点原子的板子(STM32F4探索者)做SPI实验
由上面的时序图可以看出,先要发送一个0X90,再发送一个任意字节,再发送一个任意字节,再发送一个0X00,然后接收字节是制造商ID,再接收字节是设备ID。可以看到前20个字节的数据内容是0X9,后面的字节内容都是0XFF,证明写入和读取数据正确。发送0X02,发送扇区地址,分三次发送扇区地址,发送内容字节,进行数据存储。发送0X03,发送扇区地址,分三次发送扇区地址,发送任意字节,返回数据。发送0X05,等待返回的值是否为0,这是为1就是忙碌,0就是不忙碌。发送0X20,发送扇区地址,分三次发送扇区地址。
2023-02-27 14:12:40
1841
原创 SCL3300 三轴倾角计中解决加速度读取负数的情况
这是手册里面的四种工作模式。这里是三轴加速度值的计算过程。这里选取模式2,加速度范围是±2.4g,读取的是Z轴的加速度值。
2023-02-16 11:12:36
2555
4
原创 使用山外多功能调试助手展示多路通道虚拟示波器(1路和2路)
展示三轴加速度传感器中,z轴加速度实时波形图(一路通道),后面又展示了z轴角度(第二路通道)。每隔40ms发送一次数据,main中调用这个test()函数。结果展示(这里的数据类型是选择uint16_t)结果展示(这里的数据类型是选择uint16_t)这是山外多功能调试助手的通信协议。发送数据,其他代码和上面是一样的。
2023-02-14 16:45:53
2101
1
原创 定时器控制LED灯的亮灭(每隔1s翻转一次灯的状态)
其中 #define GPIO_Pin_10 ((uint16_t)0x0400), 0000 0100 0000 0000就是第10位为1,GPIOF的ODR寄存器的初始值都是0,所以异或GPIO_Pin_10 就是把ODR寄存器的第10位置1,再置0这样进行反转。按照下面的设置:计数一次的时间是 (1000 * 84) / 84000000 = 1ms (后面计数1000次就是1s,所以就是LED经过1s亮灭一次)写一个1s的定时器,来控制LED灯的亮灭。编写LED.h函数;
2023-01-29 23:32:51
10662
原创 串口通信——串口助手发送正数/负数(以ascii码的形式发送或者以16进制形式发送),最后展示出发送的数
先找规律,这里是假设发送的数字是-29987,函数中传入的值一个是数组,一个是数组的总索引值,这里取到的字节首先要减去0X30,得到这个数字是几,然后再乘以10的几次方,2在万位上,需要乘以10000,它的索引值对应的是1,传来的索引总数是6,所以乘的10次方应该是:10的次方数 = 6(总索引值) - 1(2所在的索引值) - 1;9在千位上,需要乘以1000,它的索引值对应的是2,传来的索引总数是5,所以乘的10次方应该是:10的次方数 = 5(总索引值) - 1(2所在的索引值) - 1;
2023-01-29 00:21:02
9120
原创 串口通信——发送和接收数据(8位和16位数据之间的转换)
在编写接收数据中断函数时,如果使用printf进行接收数据的打印时候,只会打印接收到的第一个字节,这里是把printf放到接收和空闲中断之间,会产生问题。//接收数据中断函数 void USART1_IRQHandler(void) {uint8_t i;//每当接收到1个字节,会产生USART_IT_RXNE中断 rx_buff [ rx_cnt ] = USART_ReceiveData(USART1);//把这个数据放到数组中去 rx_cnt ++;
2023-01-27 23:54:03
16433
原创 串口通信(stm32F4)——通过串口助手发送led on或者led off控制LED灯的亮灭
在编写接收数据中断函数时,如果使用printf进行接收数据的打印时候,只会打印接收到的第一个字节。//每当接收到1个字节,会产生USART_IT_RXNE中断 rx_buff [ rx_cnt ] = USART_ReceiveData(USART1);//把这个数据放到数组中去 //printf("value = %x\n",rx_buff[rx_cnt]);//加上这只会接收到第一个字节 //printf("value = %d\n",rx_cnt);rx_cnt ++;
2023-01-27 21:17:32
8608
1
原创 看野火的视频,用正点原子的板子(STM32F4探索者)做系统定时器实验
编写一个毫秒级的延时函数,控制LED的亮灭。这里的灯是LED1,端口是GPIOF,引脚是PIN10。
2022-12-21 23:39:47
853
支持多种语言的代码排列工具
2023-07-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人