- 博客(40)
- 收藏
- 关注
原创 HT1621B手册翻译细读
HT1621是一款128段(32×4)内存映射多功能LCD驱动器。HT1621的软件配置功能使其适用于多种LCD应用,包括LCD模块和显示子系统。主机控制器与HT1621之间的接口仅需三或四根线。HT1621内置低功耗模式命令,可有效降低功耗。
2025-02-27 09:48:54
402
原创 (deepseek)按键滤波硬件
分析:通常,按键的抖动时间可能在几毫秒到几十毫秒之间。电容的容值需要足够大,能够滤除这些高频抖动,但也不能太大,否则会延迟信号的响应时间。常见的选择是0.1μF到1μF之间的陶瓷电容,比如X7R或X5R材质的,因为它们稳定性好,价格也便宜。然后,电容的位置应该放在按键的信号线和地之间,也就是并联在按键两端。这样,当按键按下时,电容会充电,抑制电压的突变;松开时则放电,同样抑制电压的变化。同时,可能还需要串联一个电阻,比如10kΩ,形成一个RC低通滤波器,进一步平滑信号。
2025-02-20 13:57:39
1211
原创 串口接收环形缓冲区
缓冲区大小:从100减至64,节省36字节。结构体优化:使用uint8_t和位域,减少变量占用。环形缓冲区:避免越界并提高内存利用率。溢出处理:通过标志位通知主程序,避免数据丢失。
2025-02-18 11:12:30
332
原创 卡诺图的理解
卡诺图通过格雷码排列,将逻辑相邻转化为几何相邻,使得简化布尔表达式时能直观地合并项。掌握这一设计原理后,多练习画图、填项和画圈,逐步理解其几何意义。遇到复杂情况时,可先分解变量(如四变量分为行和列变量),再按规则操作。
2025-02-16 14:26:19
344
原创 (初学者)STM32 MP157中LED触发器笔记
Rockchip RK3399 - rfkill子系统 - 大奥特曼打小怪兽 - 博客园开发板 :NanoPC-T4开发板eMMC :16GBLPDDR3 :4GB显示屏 :15.6英寸HDMI接口显示屏u-boot :uboot 2023.04linux :5.2.8 本篇博客是以linux 5.2.8版本源码进行讲解的,与linux 6.3源码略有细微差别,但是整体上大致是一样的。rfkill是Linux内核提供的一个框架,用于控制无线通信硬件(如 WiFi、蓝牙、NFC 等)的开关和状态。
2025-01-02 14:32:15
885
原创 单片机1622/1621驱动程序编写(较为通用版)
使用HT1621为例HT1621.hDescription: HT1621头文件,包含端口初始化及端口定义Function List: // 主要函数及其功能1. -------History: // 历史修改记录Zhao 24/12/9 创建模块 V1.0.0/********************端口定义********************// 不同单片机不同// 端口定义// 引脚定义。
2024-12-09 16:59:54
1813
2
原创 (AVR开发)模拟SPI驱动HT16D35A
刚好有一个项目用的是HT16D35A作为数码管驱动,记个笔记,防止遗忘,同时单片机用的是AVR。数码管是共阴极。看数据手册,HT16D35A使用的是SPI/IIC总线驱动,在PCB布板的时候,考虑到布线难度,并没有使用内部的SPI/IIC,而是采用的模拟方式。因为应用场合并不需要特别的高效,反而需要持久运行,所以整个单片机程序结构使用的是状态机方式编写,而不是事件驱动或者是时间片轮询的写法。在手册中截了一张HT16D35A的内部结构。
2024-04-19 14:25:39
813
原创 (AVR开发)_delay_loop_1,一段内联汇编写的延时程序
也就是1/1MHZ = 1us,不知道对不对,这里所说的循环执行3个时钟周期也就是每次调用就会延时3us,即_delay_loop_1(1)就是3us,但是最多执行256次,也就是传参最大值是256,所以_delay_loop_1(256) = 768us。要准确确定该函数的延时时间,需要知道 AVR 微控制器的时钟频率以及每个循环迭代的执行时间。如果假设在每个循环迭代中,执行时间可以忽略不计,那么每次循环的延时时间将主要由循环的执行次数决定。最终结果将写回到变量。),表示要进行的延时时间(循环次数)。
2024-04-18 16:32:30
648
原创 (AVR开发)pgm_read_word
但是,请注意,使用这种方法时需要特别小心,因为强制转换会绕过编译器的类型检查,可能会导致运行时错误,尤其是如果函数实际上需要参数或返回值,而你在调用时没有提供或处理它们。a+b是一个地址计算,a是一个指向程序存储空间的指针或者是其他的结构,b是一个偏移量或者是索引,从a指向的位置选择特定的函数指针。,这个参数应该是一个函数指针。宏的展开过程将这个函数指针强制转换为指向不接受任何参数且没有返回值的函数的指针,并立即调用它。是指向函数的指针变量,它可以指向任何返回‘int’类型、带有两个‘int’参数的函数。
2024-04-18 15:35:57
841
原创 信号量---《深入学习Linux内核》学习和实践
在单处理器系统和多处理器系统有效。一个与数据结构相关的计数器。把每个信号看成一个对象。信号量是一种同步机制,用于控制多个线程或进程对共享资源的访问,防止多个线程同时访问共享资源,从而避免数据不一致和其他并发问题。down():对信号量的值-1,如果值小于0,表示该方法把正在运行的进程加入到这个信号量链表。然后阻塞进程。up():对信号量值+1,新值大于或等于0,激活信号量链表的一个或多个进程。
2024-01-15 11:15:43
962
原创 qt实现串口调试助手
最近在学习qt,于是打算搞一个串口调试助手,初学C++和QT,有理解错误希望能给出意见。总结归纳2023.09.22:能够显示串口数据。
2023-09-24 21:32:23
1580
原创 verilog状态机
这个状态机包含了四个状态(S0,S1,S2,S3),每个状态下有不同的行为。在每个时钟上升沿(posedge clk)或者复位信号(reset)上升沿,状态机会根据当前的状态和条件决定下一个状态。在Verilog中,状态机可以通过使用。块用于根据当前的状态来更新输出。
2023-09-15 16:41:11
544
原创 verilog实现uart
用于实现USART接收器。在代码中,我们使用了两个always块,第一个用于实现USART接收器,第二个用于实现USART发送器。在接收器中,我们使用。在这个代码中,我们定义了一些参数,如波特率、时钟频率、采样率和比特时间。我们还定义了一些寄存器,如。来控制接收器的使能。在发送器中,我们使用。来跟踪接收的数据,并使用。来跟踪发送的数据,并使用。
2023-09-15 16:05:03
181
原创 STM32 IO口中断配置
2、配置外部中断:接下来,配置外部中断来检测上升沿。选择要用作外部中断的引脚,并相应地配置外部中断控制器。在STM32F103C8T6上,可以使用EXTI_Init函数进行配置。3、中断处理函数:现在,您需要编写中断处理函数来处理上升沿触发的中断。在您的代码中实现EXTI0_IRQHandler函数或您选择的外部中断线路的相应中断处理函数。1、配置引脚作为输入:将要检测上升沿的引脚配置为输入模式。可以使用GPIO_Init函数来完成配置。在中断处理函数中,您可以根据需要执行计数逻辑,例如增加计数器的值。
2023-09-09 13:38:28
722
原创 windows安装sqlite3
win10上右击此电脑选择属性,在关于的右侧有个高级环境设置,在高级的最下面可以看到环境变量。选择系统变量里面的Path,双击然后新建选择刚才的sqlite目录,即C:\sqlite。重新回顾sqlite,之前在linux上直接安装,现在切换到windows上。输入cd:\,然后输入sqlite3,就可以看到sqlite相关的信息。1、直接解压缩到C盘,然后添加环境变量。
2023-09-05 13:53:14
494
原创 C++中的unordered_map
因此,可以通过判断 find 方法的返回值是否等于 map.end() 来判断是否存在键为 temp 的元素,从而决定是否需要将当前元素的值和下标保存到哈希表中。因此,可以通过判断 find 方法的返回值是否等于 map.end() 来判断是否存在键为 temp 的元素,从而决定是否需要将当前元素的值和下标保存到哈希表中。如果 find 方法返回的迭代器指向哈希表的尾部,则说明哈希表中不存在键为 temp 的元素,需要将当前元素的值和下标保存到哈希表中。3、在哈希表中查找是否存在键为 temp 的元素。
2023-05-29 08:37:23
3559
原创 C++:ofstream文件流操作(precison和ios_base)
比如std::ios_base::in将输入流设置为只读,std::ios_base::out设置为只写模式, std::ios_base::out设置为二进制I/O模式。这段代码使用C++文件流对象ofstream创建新文件,命名为 “adasd.txt”,通过 precision() 和 setf() 函数设置输出精度和输出格式,最后调用了 close() 函数关闭文件。ios_base提供了一些共性操作和基础成员变量,用于支持流的输入输出操作,并可以完成流的基本工作。
2023-05-15 08:48:31
1196
原创 C++ primer plus笔记 --- 第17章、输入、输出和文件
C++中的输入流和输出流是对程序进行输入和输出操作的主要方式。输入流用于从外部获取数据,输出流用于向外部输出数据。C++中的输入输出操作都是通过I/O流(输入/输出流)来完成的。I/O流是指stream,它是一个抽象类,派生出了继承了它的输入流istream和输出流ostream。输入流和输出流分别和两个预定义的对象cin和cout绑定,它们在iostream头文件中定义。数据的输入和输出都是针对流对象进行操作。cin和cout对象依赖于系统,因此在不同的系统之间可能会有一些差异。
2023-05-11 09:01:06
710
原创 C++ primer plus笔记 --- 第16章、string类和标准模板库
在C++中,STL库中提供了一些预定义的函数符,可以直接使用,也可以作为其他函数符的基础。这些预定义的函数符包括:less/greater: 用于比较两个类型为T的值的大小,返回true/false。plus/minus/multiplies/divides/modulus: 分别表示加、减、乘、除、取模操作,用于支持对应的数值类型T。
2023-05-11 08:29:17
258
原创 C++ primer plus笔记 --- 第15章、友元、异常和其他
在 C++ 中,友元是一种特殊的关系,它使得一个函数或者类能够访问另一个类的私有成员变量或者成员函数。友元可以被定义为一个函数、类、成员函数、或者整个命名空间。在使用友元时,需要在被访问的类中声明友元,可以在类定义中使用friend在上面的代码中,我们通过使用friend关键字声明了一个友元类MyClass和一个友元函数,它们都能够访问类的私有成员变量。使用友元可以提高代码的灵活性和可维护性,但也会降低封装性,增大了代码的复杂度,因此应该谨慎使用。
2023-05-10 08:49:33
235
原创 C++ primer plus笔记 --- 第14章、C++中的代码重用
valarray类是C++标准库中提供的一个通用数组类。它是一个模板类,能够存储任意类型的数据,并提供了很多操作数组的函数和运算符。使用这些函数和运算符可以方便地对数组进行数学运算和算法实现。valarray类的主要特点如下:支持常规数组的操作,例如访问特定元素,对所有元素应用任意函数,以及提取部分数组。支持所有基本数学算法,例如对valarray对象进行运算,在valarray对象之间进行运算,并进行逐元素的数学函数应用。
2023-05-10 08:17:54
397
原创 C++ primer plus学习笔记 --- 第13章、类继承
一个简单的基类通常包括一些数据成员和成员函数,而这些成员函数可以用于被派生类继承和/或重写。在上述源代码中,我们定义了一个Shape类,作为几何图形的基类。Shape类有两个虚函数area()和,用于返回图形的面积和周长。这些虚函数将被派生类继承和重写。在这个例子中,我们并没有定义任何数据成员。注意,我们在虚函数的声明中使用了virtual关键字来标识这些函数。这表示这些函数是虚函数,并且需要在派生类中进行重写,以提供特定于派生类的实现。如果不使用virtual。
2023-05-09 13:10:19
522
原创 C++ primer plus笔记 --- 第12章、类和动态内存分配
在 C++ 中,我们可以使用动态内存分配来为类对象动态分配内存。动态内存分配指的是在程序运行的过程中,根据需要动态地分配内存空间。与之相对应的是静态内存分配,即在程序编译时就就已经确定了内存的分配情况,无法根据程序运行的需要进行调整。new和delete。其中,new运算符用于向操作系统申请内存空间,返回指向该空间的指针;delete运算符用于释放之前申请的动态内存空间,使该空间变为可用状态。上述代码中,我们定义了一个名为MyString的类,其中包含了指向字符数组的指针buf_和字符数组的长度。
2023-05-09 08:46:02
371
原创 C++ primer plus学习笔记 --- 第11章、使用类
运算符重载是指在C++中,可以对运算符进行重载来定义类的行为,从而使得类的对象可以像基本数据类型一样进行运算。通常情况下,运算符重载是通过类的成员函数或全局函数来实现的。其中,operator是关键字,用于声明运算符名称。在参数列表中可以定义运算符的几个操作数,如果是成员函数,则第一个参数为隐式的this指针。例如,假设定义了一个名为Vector的向量类,可以重载加号运算符,使得两个向量对象可以相加。在上述代码中,Vector类定义了一个公有成员函数,用于重载加号运算符。当对Vector。
2023-05-08 09:47:56
245
原创 C++ primer plus笔记 --- 第10章、抽象和类
在C++中,声明和定义构造函数的方法与普通函数类似。在类的定义中,可以声明构造函数,也可以定义构造函数。声明和定义构造函数的语法如下:public:MyClass();// 声明构造函数// 实现构造函数的功能还可以实现带参数的构造函数,方法与定义默认构造函数类似。public:// 声明构造函数// 实现构造函数的功能需要注意的是,函数声明时不能包含函数体,函数定义时必须包含函数体。在定义构造函数时,应当完成类的初始化、内存分配、资源申请等操作,保证类的对象能够正确地进行使用。
2023-05-08 09:12:48
201
原创 C++ primer plus学习笔记 --- 第9章、内存模型和名称空间
单独编译是指将一个大型程序划分为多个源文件,并将这些源文件分别编译为单独的目标文件,再将这些目标文件链接为最终的可执行文件。使用单独编译可以简化程序的维护和管理,并提高代码的复用性和可读性。在 C++ 中,单独编译的工具是编译器和链接器。编译器负责将源代码编译为目标文件,而链接器负责将这些目标文件链接在一起,生成最终的可执行文件。在单独编译的过程中,开发人员需要合理编写头文件和源文件,以尽可能减小重复编译的次数,从而提高编译效率。在这个示例中,我们将Circle类的定义分别放在头文件Circle.h。
2023-05-06 08:51:08
188
原创 C++ primer plus学习笔记 --- 第8章、函数探幽
C++ 内联函数是一种函数调用机制,在编译器的优化下颇为常见,其主要目的是因为函数调用在运行期间会存在一定的时间和空间开销。内联函数允许编译器将被调用的函数代码直接嵌入到调用该函数的位置,这样可以避免额外的函数调用开销和参数传递,从而提高程序的运行速度。在 C++ 中,内联函数一般通过在函数定义前面加上inline关键字来声明。在上述代码中,add()函数被声明为内联函数,通过inline关键字告诉编译器将该函数的代码展开到调用其的位置。需要注意的是,内联函数并非在所有情况下都比普通函数更快。
2023-05-06 08:24:10
242
原创 C++ primer plus学习笔记 --- 第7章、C++的编程模块
在 C++ 中,我们可以使用的语法定义函数,其中为函数名,括号中可以包含函数的参数列表。在函数定义中,我们需要指定函数的返回值类型、函数名和参数列表,以及函数体中的具体操作。int x = 1;int y = 2;// 调用 sum() 函数,计算 x 和 y 的和,结果赋值给 zreturn 0;在上面的示例代码中,我们定义了一个sum()函数,它接受两个整数参数a和b,返回它们的和。在main()函数中,我们定义了两个变量x和y,并将它们作为参数调用sum()函数,将结果赋值给变量z。
2023-05-05 13:13:21
434
原创 C++ primer plus学习笔记 --- 第6章、分支语句和逻辑运算符
if 语句是 C++ 中最基本的控制流语句之一。其中condition是一个返回 bool 类型的表达式。当condition的值为 true 时,if 语句后面的代码块将会被执行;否则,if 语句后面的代码块将被跳过。在上面的代码中,定义了变量x并将其初始化为 10。if 语句中的条件为x > 5,因此 if 语句后的代码块被执行,并将 “x is greater than 5” 输出到标准输出流中。在 if 语句中,如果只有一条语句需要执行,那么可以省略代码块的大括号。
2023-05-05 08:21:43
379
原创 C++ primer plus学习笔记 --- 第5章、循环和关系表达式
本文介绍了 C++ 中循环结构的不同类型及其用法,包括 for 循环、while 循环、do-while 循环和范围-for 循环。其中 for 循环是最常见的循环结构,可以使用多种方式进行重载。while 循环和 do-while 循环则适用于需要根据特定条件重复执行的情况。范围-for 循环则是 C++11 引入的新特性,用于简化迭代器和指针的使用。此外,本文还介绍了嵌套循环和二维数组的概念。使用二维数组时,常采用嵌套循环的方式遍历每个元素。
2023-05-04 15:49:35
543
原创 C++ primer plus笔记 --- 第4章、复合类型
string 类,必须包含头文件string,string类位于名称空间中。C++ 11字符串初始化,注意C/C++两种风格// C语言风格// C语言风格// C++风格// C++风格// C++风格C语言风格不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。结构(Structure)是一种用户自定义的数据类型,在程序中用于组织和存储相关的变量。结构包含一组不同的变量,这些变量可能是不同的数据类型,例如整型、浮点型、字符型等。在C++中,结构通过。
2023-05-04 08:59:48
441
1
原创 vscode无法连接到虚拟机,显示管道错误
重装了ubuntu系统,之前用vscode连接过云服务器和之前linux版本的虚拟机。找到.ssh文件夹,比如C:\Users\Administrator\,找到.ssh文件夹然后整个删除。最后,再重装ssh-remote这个插件,即可连接。
2022-05-26 21:15:57
773
原创 (PCB)如何选中PCB中keep-out layer外框
工作中画PCB,更换CPU。但外部尺寸是一定的,这时候需要拷贝之前老的方案的PCB外框。切到keep-out layer层,选中外框的一条线,然后按住tab,就能选中PCB的整个外框,之后ctrl+c,ctrl+v就能完整的复制出来了。...
2022-05-06 10:02:17
2069
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人