Excel VBA 两个表中查询相同的记录、不同的记录 例程 本文将详细介绍如何使用 Excel VBA 在两个表中查询相同的记录、不同的记录。这个程序可以帮助用户快速地查询出两个表中的共同记录和不同记录,从而提高工作效率。 我们需要了解程序的基本结构。这个程序主要包括四个部分:Sheet1、Sheet2、Sheet3 和 VBA 代码。其中,Sheet1 和 Sheet2 是数据存放表,Sheet3 是查询结果显示表。VBA 代码是程序的核心,它负责连接数据库、执行查询语句和显示查询结果。 在 VBA 代码中,我们首先需要连接数据库。这里使用了 ADO 连接,需要对 ADO 进行引用,否则会出现错误提示。连接串的格式如下: `conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 Macro;HDR=YES';Data Source=" & ThisWorkbook.FullName` 接着,我们需要编写查询语句。查询语句的格式如下: `sql = "select [Sheet1$].num_id from [Sheet1$],[Sheet2$] where [Sheet1$].num_id=[Sheet2$].num_id"` 这个查询语句将查询出两个表中相同的记录,並将结果显示在 Sheet3 中。 如果我们想查询出两个表中的不同记录,可以使用以下查询语句: `sql = "select * from [Sheet1$] where [Sheet1$].num_id not in (select [Sheet2$].num_id from [Sheet2$])"` 这个查询语句将查询出 Sheet1 中存在但 Sheet2 中不存在的记录。 类似地,我们可以使用以下查询语句查询出 Sheet2 中存在但 Sheet1 中不存在的记录: `sql = "select * from [Sheet2$] where [Sheet2$].num_id not in (select [Sheet1$].num_id from [Sheet1$])"` 我们可以使用以下查询语句查询出两个表中的所有不同记录: `sql = "select num_id from [Sheet1$] where [Sheet1$].num_id not in (select [Sheet2$].num_id from [Sheet2$]) union select num_id from [Sheet2$] where [Sheet2$].num_id not in (select [Sheet1$].num_id from [Sheet1$])"` 这个查询语句将查询出两个表中的所有不同记录,並将结果显示在 Sheet3 中。 本文详细介绍了如何使用 Excel VBA 在两个表中查询相同的记录、不同的记录。这个程序可以帮助用户快速地查询出两个表中的共同记录和不同记录,从而提高工作效率。
2024-08-16 14:43:42 46KB Excel 相同的记录 不同的记录
1
《PL1167驱动程序在51单片机上的应用与示例解析》 PL1167是一款常见的接口芯片,广泛应用于各种电子设备中,例如UART到SPI、I2C等通信协议的转换。它能够帮助系统扩展通信能力,实现不同总线间的信号转换。官方提供的"PL1167_DEMO_V1.00例程.zip"是一个针对51单片机的演示程序,旨在帮助开发者快速理解和掌握PL1167的驱动程序开发。 51单片机是8位微处理器,以其简单易用、性价比高而被广泛应用。然而,51单片机的内建功能有限,可能不直接支持某些高级或特定的通信协议,这时就需要像PL1167这样的接口芯片来扩展其功能。该DEMO程序的目的是展示如何将PL1167集成到51单片机的系统中,并实现有效的数据传输。 在下载的压缩包中,"PL1167_DEMO_V1.00例程"很可能是包含源代码、头文件和编译配置的工程文件,这些文件通常包含了以下关键部分: 1. **源代码**:源代码可能包含C或汇编语言,展示了初始化PL1167、设置其工作模式以及发送和接收数据的函数。通过分析这些代码,开发者可以了解PL1167的控制寄存器配置以及数据传输流程。 2. **头文件**:头文件定义了PL1167的寄存器结构、常量和函数原型,方便程序员调用和操作。这些文件对于理解PL1167的内部工作原理至关重要。 3. **编译配置**:可能包括Makefile或其他IDE项目文件,定义了编译规则和依赖关系。这些信息有助于在特定的开发环境中成功编译和运行示例程序。 在实际应用中,开发者需要根据目标硬件平台和通信需求,对这些示例代码进行适当修改。例如,可能需要调整时钟配置、中断处理、数据帧格式等参数。此外,理解PL1167的数据手册也是必不可少的步骤,手册会详细介绍芯片的功能、引脚定义、电气特性以及各种工作模式。 在开发过程中,开发者还应注意以下几点: - **电源和时序**:确保为PL1167提供正确的电源电压,并正确设置时序,如时钟频率、等待状态等。 - **错误处理**:添加适当的错误检测和处理机制,以应对可能发生的通信错误或异常情况。 - **兼容性测试**:在不同的通信协议下测试PL1167的功能,确保其在实际应用中的稳定性和可靠性。 "PL1167_DEMO_V1.00例程.zip"是一个宝贵的资源,可以帮助开发者深入了解如何在51单片机上使用PL1167驱动程序。通过对示例代码的深入研究和实践,开发者可以有效地将PL1167集成到自己的项目中,实现多样的通信功能。
2024-08-13 17:44:08 194KB PL1167  驱动程序
1
Xilinx的SDK自带的lwip_echo例程,直接应用到板子上会出现反复重连的现象,这个版本修复了这个bug。如果依然有疑问,可以直接参考我的专栏https://www.bilibili.com/read/cv5173176
2024-08-13 15:45:24 117.31MB FPGA lwip Nexys Video
1
标题中的“4G模块Air724UG的完整例程”指的是使用Air724UG这一4G通信模块的程序示例,适用于嵌入式系统开发。Air724UG是一款支持LTE网络的模块,能够实现高速数据传输,广泛应用于物联网、车载通信等领域。这个例程是针对主控微控制器(MCU)STM32F410设计的,STM32F410是意法半导体(STMicroelectronics)生产的一款基于ARM Cortex-M4内核的高性能微控制器,具有丰富的外设接口和高计算能力,适合处理复杂的通信任务。 描述中提到“工程采用KEIL MDK编译器”,这是业内常用的嵌入式系统开发工具,提供了集成开发环境(IDE)和编译器,支持C/C++语言,便于开发者编写、调试和优化STM32F410上的代码。并且,“编译运行都正常”表明这个例程已经过验证,可以在KEIL MDK环境下成功构建并运行,对于初学者或开发者来说是一份有价值的参考资料。 从标签来看,我们还能提取出其他知识点: 1. **STM32**: STM32系列是意法半导体推出的基于ARM Cortex-M内核的微控制器家族,包含多个型号,如STM32F410,广泛应用在各种嵌入式系统中,如工业控制、消费电子、汽车电子等。 2. **人工智能**:虽然在这个例程中没有直接涉及到人工智能(AI)技术,但STM32F410的性能足以支持一些轻量级的AI算法,例如边缘计算中的机器学习模型,这为未来可能的AI功能扩展提供了可能性。 3. **MCU(微控制器)**:MCU是集成了CPU、内存、定时器、通信接口等多种功能的单片机,是嵌入式系统的核心部件。STM32F410作为一款MCU,其强大的处理能力和低功耗特性使其在许多应用场景中受到青睐。 4. **线程池**:线程池是一种多任务调度策略,它预先创建一定数量的工作线程,用于执行待处理的任务。在STM32F410上实现线程池,可以提高系统的并发处理能力,优化资源管理。不过,由于这是一个4G通信模块的例程,线程池可能并不直接体现在Air724UG的通信功能中,而是在上层应用或系统层面的概念。 遗憾的是,由于压缩包的文件名称“Software_0729_5ms_20210917”没有提供足够的上下文信息,我们无法直接关联到具体的代码或功能。通常,这样的文件名可能包含了软件版本、日期或某种特定设置的标识。为了深入理解这个例程,需要实际查看源代码和相关文档。 总结,这个项目提供了使用STM32F410与Air724UG 4G模块通信的完整示例,通过KEIL MDK进行开发,并且已经验证了其可运行性。开发者可以参考这个例程来学习如何在嵌入式系统中集成4G通信功能,或者在已有基础上进行扩展,如添加人工智能或优化线程管理。
2024-08-09 15:32:20 16.16MB stm32 人工智能 线程池 完整例程
1
EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种可编程、可擦除的非易失性存储器,广泛应用于嵌入式系统中,用于保存配置信息、用户数据等。BL24C16是一款容量为16K位(2KB)的串行EEPROM芯片,它支持I²C(Inter-Integrated Circuit)接口,这种接口在低功耗、小型化应用中非常常见。 I²C总线是一种多主控、两线制的通信协议,由飞利浦(现NXP)公司开发。它只需要两条信号线——SDA(Serial Data Line)和SCL(Serial Clock Line)即可实现设备间的通信。在这个例子中,我们使用C语言通过GPIO(General Purpose Input/Output)模拟I²C协议来与BL24C16进行通信,这是一种常见的实践,特别是在没有硬件I²C控制器的微控制器上。 C语言是编写嵌入式系统程序的常用语言,因为它简洁、高效并且跨平台。在BL24C16的使用例程中,你需要理解以下几个关键知识点: 1. **I²C通信协议**:理解I²C的起始信号、停止信号、数据传输格式(7位地址+1位读写位+8位数据)以及ACK(Acknowledgement)机制。 2. **GPIO模拟I²C**:通过编程控制GPIO引脚的电平变化模拟SDA和SCL线上的信号,包括高低电平转换、边沿检测等。 3. **BL24C16芯片特性**:了解BL24C16的地址空间、页面大小、读写操作时序,以及如何设置和读取数据。 4. **C语言编程**:掌握基本的C语言语法,如变量声明、函数定义、结构体、位操作等,这些是实现I²C通信和与BL24C16交互的基础。 5. **错误处理**:在实际应用中,必须考虑通信错误的可能性,如超时、数据校验失败等,并编写相应的错误处理代码。 6. **硬件连接**:明确微控制器与BL24C16之间的物理连接,包括GPIO引脚的分配,确保正确地连接SDA和SCL线。 7. **软件设计**:编写发送和接收函数,以执行读写操作。这可能包括初始化函数、发送地址和命令、读取或写入数据等。 8. **调试技巧**:学会使用逻辑分析仪或示波器观察SDA和SCL线的实际信号,以验证软件模拟的I²C通信是否正确。 9. **库函数使用**:如果可用,可以使用已有的I²C库,如AVR、ARM等微控制器平台上的库,它们提供了更高级别的接口,简化了与I²C设备的交互。 10. **系统级考虑**:考虑到嵌入式系统中的资源限制,如内存、CPU速度等,优化代码以提高效率。 通过以上知识点的学习和实践,你可以成功地使用C语言和IO模拟I²C来控制BL24C16芯片,实现数据的存储和读取。在实际应用中,你可以根据需要扩展这个例程,例如增加错误处理机制、优化通信效率或与其他设备的协同工作。
2024-08-01 11:07:45 6KB BL24C16 IIC IO
1
STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统设计,而FPM383C/FPM383F是专门的指纹识别模块,常用于安全认证和身份验证等应用场景。本项目是针对这些指纹模块与STM32之间的交互进行编程的实例,提供了一个基础的开发环境和库函数。 在STM32中,中断函数是处理外部事件的关键部分,中断服务程序负责响应特定的硬件中断请求。在这个项目中,博主对中断函数进行了修正,意味着可能解决了原有的中断处理不当、响应延迟或功能不完善等问题,使得指纹模块的数据传输和识别更加高效稳定。 Library文件夹包含的是STM32与FPM383C/FPM383F通信的库文件,可能包括驱动程序、API接口和相关的数据结构。开发者可以通过调用这些库函数,实现对指纹模块的初始化、数据读取、模板匹配等功能。例如,初始化函数可能包括设置I/O口、配置时钟、启动通讯协议等;数据读取函数则用于获取指纹图像;模板匹配函数用于将新获取的指纹与已存储的模板进行比对,判断是否匹配。 App文件夹内的代码通常是应用层代码,它调用了Library中的库函数来实现具体的应用逻辑,如用户注册、指纹验证等。开发者可以在这里找到如何使用库函数进行指纹识别的示例代码,并根据自己的需求进行修改和扩展。 User文件夹可能包含了用户界面相关的代码,比如LCD显示、按键处理等,使得用户能够直观地操作和查看指纹模块的状态。 Startup文件夹内的代码是STM32的启动文件,它在微控制器上电或复位后首先被执行,用于初始化堆栈、设置中断向量表、调用系统初始化函数等。这部分代码是STM32固件的基础,确保了程序的正确运行。 CMSIS(Cortex Microcontroller Software Interface Standard)是ARM公司推出的标准化的软件接口,提供了一套统一的API来访问STM32的硬件资源,如寄存器、中断、定时器等。Project文件夹可能包含了工程配置文件和Makefile,用于构建和编译整个项目。 这个项目为开发者提供了一个基于STM32的FPM383C/FPM383F指纹模块应用的起点,通过学习和理解这个项目的代码,可以快速掌握如何在STM32平台上集成和使用指纹识别功能,从而开发出符合自己需求的安全认证系统。
2024-07-21 11:31:28 1.47MB stm32
1
《比亚迪BF7613BMXX参考程序例程解析》 比亚迪BF7613BMXX参考程序例程是一份专为比亚迪单片机设计的底层应用实例代码,旨在帮助开发者理解和掌握各种常见硬件接口的使用方法。这些例程涵盖了ADC(模数转换)、EEPROM(电可擦除可编程只读存储器)、GPIO(通用输入输出)、IIC(集成电路互连)、PWM(脉宽调制)、SLEEP(低功耗模式)、UART(通用异步收发传输器)、定时器以及外部中断和触摸功能等多个核心模块。在本文中,我们将逐一探讨这些知识点。 ADC是模拟信号转换为数字信号的关键部件,它在传感器数据采集、电源监控等方面发挥着重要作用。例程中的ADC实现将指导开发者如何配置ADC通道、设置采样时间和分辨率,以及如何读取并处理转换结果。 接着,EEPROM是一种非易失性存储器,即使断电也能保持数据。在例程中,开发者可以学习如何保存和读取用户配置信息或系统状态,这对于实现设备设置的持久化至关重要。 GPIO是单片机与外界交互的基础,可以配置为输入或输出。例程会展示如何初始化GPIO,设置其方向,并进行读写操作,实现简单的控制功能。 IIC协议则用于设备间的通信,常用于连接显示器、传感器等。例程将演示如何配置IIC总线,发送和接收数据,以实现设备间的有效通信。 PWM是通过调整脉冲宽度来模拟连续波形的技术,广泛应用于电机控制、LED亮度调节等。在例程中,开发者将学习如何设置PWM通道,设定占空比,以及如何启动和停止PWM输出。 SLEEP模式是降低单片机功耗的重要手段。通过例程,开发者将了解到如何进入不同级别的睡眠模式,以及在唤醒事件触发时如何恢复正常运行。 UART是单片机中常见的串行通信接口,适用于长距离通信。例程将包含初始化UART、设置波特率、发送和接收数据的示例,有助于实现与其他设备的串行通信。 定时器在单片机应用中不可或缺,常用于周期性任务、延时等功能。例程将介绍如何配置定时器,设置预分频器,启动定时器,以及在定时器中断中执行特定任务。 外部中断和触摸功能允许单片机对外部事件作出快速响应。通过例程,开发者可以学习如何配置中断源,设置中断优先级,以及处理触摸事件,提高系统的实时性和互动性。 总结来说,比亚迪BF7613BMXX参考程序例程是一份全面的实践指南,覆盖了单片机开发中的关键环节,对于基于STM32、嵌入式硬件以及ARM架构的开发工作具有很高的参考价值。通过深入研究和实践这些例程,开发者不仅可以提升对硬件接口的掌控能力,还能为实际项目提供坚实的理论和技术支持。
2024-07-09 08:38:22 11.73MB stm32 嵌入式硬件 arm
1
IAP15F2K61S2单片机开发板PDF原理图+软件例程源码合集(18例): 1.LED亮灭控制 12.DS18B20实验 13.串口通讯实验 14.DS18B20实验-小数点处理处理 15.串口接收实验 16.矩阵键盘实验 17.外部中断实验 18.超声波测距实验 2.LED位移控制 3.LED流水灯控制 4.按键控制 5.按键控制LED位移 6.数码管控制实验 7.数码管动态显示实验 8.定时器扫描按键实验 9.EEPROM应用-开机次数存储 PCF8591_DAC实验 STC IAP15F2K61S2单片机电赛平台开发板PDF原理图.pdf
2024-07-08 22:55:01 673KB IAP15F2K61S2
易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能参与到程序开发中来。本主题聚焦于易语言的一个重要应用领域——加密模块,特别是"ooxx加密模块"。 ooxx加密模块是易语言中用于实现数据加密和解密功能的组件。在信息安全领域,加密技术扮演着至关重要的角色,它能保护敏感数据免受未经授权的访问或篡改。ooxx加密算法可能是一种自定义的加密方式,它的具体细节并未在标题和描述中明确,但我们可以推断它至少包括了基本的加密和解密过程,并能够将数据转换成二进制和十进制格式。 在编程中,数据通常以二进制形式存储和传输,因为计算机内部处理的所有信息都是二进制的。二进制表示法(0和1)简洁明了,但对人类来说并不直观,因此我们经常需要将二进制数据转换为更易读的十进制或其他进制。在ooxx加密模块中,"到二进制"和"到十进制"的功能可能是为了便于数据的处理和理解,以及在不同系统间进行有效的数据交换。 加密过程通常涉及以下步骤: 1. **密钥生成**:ooxx加密模块可能包含一个密钥生成机制,用于创建随机或者基于特定输入的密钥,密钥是加密和解密的关键。 2. **数据预处理**:在加密前,数据可能需要进行预处理,如填充到特定长度,以确保加密的效率和安全性。 3. **加密运算**:ooxx加密算法会使用密钥对原始数据进行复杂的数学运算,使其变得不可读,这称为加密。 4. **数据存储或传输**:加密后的数据可以安全地存储或在网络上传输。 5. **解密**:接收方使用相同的密钥对加密数据进行解密运算,恢复原始数据。 6. **验证**:解密后,可能会通过校验和或数字签名等方式验证数据的完整性和真实性。 易语言ooxx加密模块源码提供的详细实现可以帮助开发者深入了解该加密算法的工作原理,同时也方便他们根据实际需求进行定制或扩展。源代码是学习和研究软件工作原理的宝贵资源,对于初学者和专业人士来说,都具有很高的价值。通过阅读和分析源码,我们可以学习到加密算法的设计思路、易语言的编程技巧,以及如何在实际项目中实现数据安全。 易语言ooxx加密模块源码涵盖了加密与解密的核心技术,以及二进制和十进制之间的转换,这些都是信息安全领域中的基础技能。掌握这些知识,对于开发安全的软件产品和提升个人信息保护意识具有重要意义。
2024-07-08 16:46:18 5KB 到二进制
1
**Qt官方Modbus例程详解** Qt是一个跨平台的应用程序开发框架,被广泛用于创建图形用户界面和其他软件。而Modbus是一种通信协议,常用于工业电子设备之间进行数据交换,如PLC(可编程逻辑控制器)和SCADA(监控与数据采集)系统。将Qt与Modbus结合,我们可以构建强大的自动化系统监控和控制应用程序。 本文将深入探讨Qt官方提供的Modbus例程,帮助初学者更好地理解和应用这两个技术。 ### 1. Qt环境设置 确保你已经安装了Qt开发环境,包括Qt Creator和对应的编译器。你可以从Qt官方网站下载最新版本的Qt SDK。在安装过程中,确保选择与项目需求匹配的模块,例如网络模块,因为Modbus通信涉及网络或串口通信。 ### 2. 了解Modbus协议 在开始编写代码之前,你需要理解Modbus协议的基本概念。Modbus支持两种传输模式:ASCII(美国标准代码交换信息)和RTU(远程终端单元)。它定义了主设备(master)和从设备(slave)之间的通信结构,包括数据请求和响应的格式。 ### 3. Qt中的Modbus实现 Qt官方例程可能包含以下组件: - **modbus.pro**: 这是Qt项目的配置文件,包含了项目名称、编译选项、依赖库等信息。在这个文件中,你可能会看到关于Qt网络模块的引用,因为这是实现Modbus通信的关键。 - **master**: 这部分代码实现了Modbus主设备的功能。主设备通常负责发起数据读写请求,等待从设备的响应。它会处理Modbus协议的请求帧构造和解析,以及网络连接的建立和断开。 - **slave**: 作为从设备的实现,这部分代码处理来自主设备的请求,并根据请求执行相应的操作,如读取或修改寄存器值。同时,它也需要构建响应帧并发送回主设备。 - **adueditor**: 这可能是一个用户界面组件,用于显示和编辑Modbus相关的数据。它可能包含了Qt的QTextEdit或QLineEdit控件,用于用户交互。 ### 4. 代码分析 在`master`和`slave`模块中,你可能会看到以下关键功能: - **建立连接**: 使用Qt的QNetworkAccessManager和QNetworkReply类来创建TCP或串口连接。 - **数据传输**: 使用QByteArray来构建Modbus请求和响应的二进制帧,然后通过QIODevice或QSerialPort发送。 - **错误处理**: 捕获和处理网络或协议层面的错误,如超时、数据校验失败等。 - **事件循环**: 使用QEventLoop确保异步通信的正确进行,等待数据接收或发送完成。 ### 5. 用户界面集成 `adueditor`可能包含了对用户界面的定制,如添加滑块、按钮等控件来模拟Modbus寄存器的读写。Qt的信号槽机制可以用来连接这些UI元素和Modbus通信的逻辑,使得用户操作能够触发实际的Modbus通信。 ### 6. 示例应用 对于初学者来说,通过运行这个例子,你可以学习如何在Qt中实现一个基本的Modbus客户端和服务器。尝试修改代码,观察不同设置下的通信行为,这将加深你对Modbus协议和Qt网络编程的理解。 总结,Qt官方Modbus例程提供了一个很好的起点,让开发者能够快速上手Modbus通信与Qt GUI的结合。通过学习和实践,你将能够创建更复杂、功能丰富的工业自动化应用。
2024-07-05 16:32:46 200KB modbus
1