- 博客(42)
- 收藏
- 关注
原创 基于FPGA + Qt + OpenCv的人脸考勤系统
简介:首先服务端在先注册人脸,然后客户端界面进行人脸识别,将人脸识别的图像发送给服务端以后,服务端在图像数据库里寻找人脸比对,若有数据就将查询到的个人信息发送给客户端,并在客户端显示,查询界面是用来查询员工或考勤的数据库显示。
2024-07-24 21:34:24
479
原创 Qt常用技巧代码分享
首先Qt主要是面向于界面设计,界面有些布局以及用法很多,可以不会写代码,但是要知道Qt可以实现这个功能,然后一点点去寻找学习,问AI也好,百度也好都可以,总比Qt可以实现某些布局功能,但是你不知道怎么去实现这些功能要好得多。俗话说的好,可以不会,但是不能不知道,知道是迈向成功的第一步。
2024-07-02 14:56:09
107
原创 QT事件----QPaintEvent绘图事件,QwheelEvent鼠标滚轮事件等; 用事件自定义按键;QT事件过滤器。
使用自定义的按键mybutton,继承于QWidget,实现当鼠标进入时显示一张图片s1.png,当鼠标离开时显示另一张图片note.png,当点击鼠标按钮时会显示另外一张图片o1.png。首先定义一个C++类,名为mybutton。然后在mybutton.hQ_OBJECTpublic://检测鼠标离开事件//检测鼠标进入事件//重写绘图事件signals://将按键大小设置为图片大小update();//回调画图函数//鼠标点击事件update();//回调画图函数。
2024-05-30 17:04:22
336
原创 Qt中 QMap 类、QHash 类、QVector 类详解
提供一个从类型为 Key 的键到类型为T的值的映射。通常QMap 存储的数据形式是一个键对应一个值,并且按照键 Key 的次序存储数据。为了能够支持一键多值的情况,QMap 提供 QMap::insertMulti()和QMap::values()函数。在一个QVector 的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由 QVector 存储数据的方式决定的。QHash 以任意的顺序组织它的数据。
2024-05-27 15:19:07
90
原创 QT---JSON使用
JSON是一种轻量级的数据交换格式,它基于ECMAScript的一个子集,采用完全独立于语言的文本格式来存储和表示数据。5.2 JSON与XML相比有哪些优点?JSON格式更加简洁,易于阅读和编写。JSON解析速度通常比XML快。JSON的数据类型没有XML那么复杂,更易于在JavaScript中使用。5.3 JSON支持哪些数据类型?
2024-05-23 12:00:03
600
原创 网络调试助手项目
连接半打开状态(TCP SYN SENT状态)是指TCP连接建立过程中,客户端发送SYN包给服务器,但是服务器还没有发送ACK包进行确认的状态。在这个状态下,客户端等待服务器的确认,如果服务器没有响应,则客户端会发送多个SYN包,直到建立连接或者达到重试次数上限为止。头关闭状态(TCP FIN_WAIT 1和FIN_WAIT 2状态)是指TCP连接关闭过程中,发送方(可以是客户端也可以是服务器)发送FIN包给接收方,请求关闭连接之后,等待接收方的ACK包的状态。
2024-05-17 15:10:48
45
原创 QT串口助手项目
因此,这段代码的作用是当串口准备好读取数据时,读取串口中的数据并输出到调试窗口中,同时将数据追加显示在界面上的文本编辑框中,以便用户查看接收到的数据。总的来说,这段代码的作用是尝试打开一个串口,如果打开成功则输出成功信息到调试日志中,如果打开失败则弹出消息框提示用户。如果串口成功打开,则会输出一条调试信息到调试日志中,提示串口已经成功打开,并显示打开的串口名称。另外,需要在适当的时候关闭串口以释放资源。总的来说,这段代码的功能是根据用户在界面上选择的串口参数,配置串口并尝试打开串口,以便进行串口通讯操作。
2024-05-07 16:13:54
110
原创 小梅哥Xilinx FPGA学习笔记22——ip核之FIFO
FIFO 本质上是由 RAM加读写控制逻辑构成的一种先进先出的数据缓冲器,其与普通存储器RAM的区别在于FIFO没有外部读写地址线,使用起来非常简单,但FIFO只能顺序写入数据,并按顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址,不过也正是因为这个特性,使得FIFO在使用时并不存在像RAM那样的读写冲突问题。根据 FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO。
2024-01-09 22:03:43
1631
原创 小梅哥Xilinx FPGA学习笔记21——IP核之RAM实验
存储器的分类在了解RAM IP核之前,我们先来看下存储器的大致分类,如下图所示:由上图可知,存储器包括随机存储器和只读存储器,随机存储器包括。
2024-01-05 16:39:57
1988
原创 小梅哥Xilinx FPGA学习笔记20——无源蜂鸣器驱动设计与验证(音乐发生器设计)
从波形上可以看出,循环音乐循环播放之间有一定的时间间隔,这个与设计预期是一致的。可以放大波形后看,其波形也是与预期设计是一致的。有的两个连续的音符上面带弧线,表示连音,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更。由上图可知,当信号周期一定,信号高电平时间所占信号周期的百分比不一样,即为不同占空比的。信号的频率,并将同时影响输出占空比,而在预重装值确定的情况下,修改输出比较值,则可以设置。计数值与用户设定的比较值的大小,根据比较结果来控制输出信号的电平高低。
2024-01-04 16:44:51
1765
原创 小梅哥Xilinx FPGA学习笔记19——IP 核使用之 ROM
ROM 是只读存储器()的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除,且资料不会因为电源关闭而消失。而事实上在FPGA中通过IP核生成的ROM或RAM,调用的都是FPGA内部的RAM资源,掉电内容都会丢失(这也很容易解释,FPGA芯片内部本来就没有掉电非易失存储器单元)。用IP核生成的ROM模块只是提前添加了数据文件.coe格式),在FPGA运行时通过数据文件给ROM模块初始化,才使得ROM。
2023-12-28 17:32:18
3815
原创 小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP
IPIntellectual Property)即知识产权,简言而之,IP即电路功能模块。IP核在数字电路中常用于比较复杂的功能模块(如FIFORAMFIR滤波器、SDRAM控制器、PCIE接口等)设计成参数可修改的模块,让其他用户可以直接调用这些模块。IP核有三种不同的存在形式:HDL 语言形式---(软核)硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少网表形式---(固核)完成了综合的功能块;
2023-12-27 17:04:56
2821
原创 小梅哥Xilinx FPGA学习笔记17——模块化设计基础之加减法计数器
在相对大一点的工程设计过程中,设计内容通常不会写在一个设计文件而是会针对不同的功能设计出不同的子文件,最后在顶层文件中再进行例化调用。在上面设计并验证了独立按键的消抖,这里基于上一讲的按键消抖模块,利用 EDA 扩展板来实现一个加减法、移位计数器,实现每次按下按键。在后面章节中将利用第四章编写好的独立模块,组合起来设计一些应用性较强的项目,进一步理解模块化设计方式的优点。控制模块,其模块间的连线如下图所示,这里的 key_in0~3。,8 个 LED 显示状态以二进制加法格式。
2023-12-26 17:04:17
576
原创 小梅哥Xilinx FPGA学习笔记16——FSM(状态机)的学习
一、 状态机导读状态机大家一定都听说过,为什么需要状态机呢?通过前面的学习我们都知道FPGA 是并行执行的,如果我们想要处理具有前后顺序的事件该怎么办呢?这时就需要引入状态机了。本文将从原理、实例、应用为大家总结了状态机设计和实现的方法。1.1 理论学习状态机简写为FSMFinite State Machine),也称为同步有限状态机,我们一般简称为状态机,之所以说“同步”是因为状态机中所有的状态跳转都是在时钟的作用下进行的,而“有限”则是说状态的个数是有限的。
2023-12-26 11:12:32
1400
原创 ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信
通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。
2023-12-25 21:01:35
2101
原创 小梅哥Xilinx FPGA学习笔记15——基于SPI接口的ADC芯片驱动
ADC(Analog to Digital Conver),通常是指一个将转变为数字信号(二进制表示的离散信号)的转换器。先将输入模拟电压转换成时间或频率,再把中间量转换成数字量双积分型 ADC,先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。抗干扰能力强,稳定性好,但转换速度低。①并联比较型 ADC,采用各量级同时并行比较,各位输出码也是同时并行产生,转换速度快。缺点是成本高、功耗大。
2023-12-12 11:01:01
3616
1
原创 小梅哥Xilinx FPGA学习笔记14——基于74HC595动态扫描数码管显示
74HC595 是用于 CMOS 应用的 HC 系列逻辑器件中的一部分。74HC595 器件包含对8位 D 类存储寄存器进行馈送的 8位串行输入/并行输出移位寄存器。移位寄存器时钟(SRCLK)和存储寄存器时钟(RCLK) 均为正边沿触发。如果将两个时钟连接在一起,则移位寄存器始终比存储寄存器早一个时钟脉冲。
2023-12-08 19:29:05
648
原创 小梅哥Xilinx FPGA学习笔记13——动态数码管显示
根据这两种现象我们可以想到,如果让数码管轮流显示,而且轮流显示速度很快,这样会不会看起来六个数码管都在显示呢?时间,光的作用结束后,视觉影像并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。样我们就可以通过位选信号去控制数码管亮,而在同一时刻,位选选通的数码管上显示的。同了,数码管的这种显示方式即为静态显示。这样我们段选信号点亮的就只是我们选中数码管的值了,那是不是就可以给每个数码管显。在点亮的时间去点亮其他数码管,让其他数码管也达到这样的效果,这样就可以让我们人。
2023-12-06 13:17:13
603
原创 小梅哥Xilinx FPGA学习笔记12——使用状态机实现按键消抖
第二件事是20ms内检测到上升沿,则表明此时处于抖动状态,立即退回空闲状态。第三件事是20ms内未检测到上升沿,就干巴巴的等待20ms,直至20ms结束仍未有上升沿就进入第一件事。第二件事是20ms内检测到下降沿,则表明此时处于抖动状态,立即退回等待状态。第三件事是20ms内未检测到下降沿,就干巴巴的等待20ms,直至20ms结束仍未有下降沿就进入第一件事。,此时按键已经被按下,这个状态要做的事就是一直检测上升沿的到来,如果上升沿没到来就一直待在等待状态,如果一旦检测到上升沿出现,则立即进入。
2023-12-04 22:16:00
587
原创 小梅哥Xilinx FPGA学习笔记11——亚稳态
亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。
2023-12-04 21:21:56
310
原创 小梅哥Xilinx FPGA学习笔记9——串口通信发送逻辑
RS232 通信接口标准,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。UART 是异步串行通信的总称(UART 是一种协议)。
2023-11-27 21:35:00
687
原创 小梅哥Xilinx FPGA学习笔记8——从计数器到可控线性序列机
让LED灯按照亮0.25秒,灭0.75秒的状态循环亮灭任务2:让LED灯按照亮0.25秒,灭0.5秒,亮0.75秒,灭1秒的状态循环亮灭以0.25为基本的LED状态变化间隔(最小时间单元)以8小段·为一个循环周期(参考任务二10个小段);LED在每一小段该点亮还是该熄灭由8个输入端口决定。任务4:在任务三的基础上,实现每隔一定时间,比如1秒钟,执行一轮LED8个状态的切换控制。1.case语句,没有列举完的情况,需要加一个默认项列举完//语句1endcase。
2023-11-19 21:22:28
319
原创 小梅哥Xilinx FPGA学习笔记7——语法(阻塞与非阻塞赋值)
1.阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕。2.阻塞赋值语句使用等号 = 作为赋值符。3.前面的仿真中,initial 里面的赋值语句都是用的阻塞赋值。4.阻塞赋值时赋值顺序调换所得到的结果不同。非阻塞赋值:1.非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。2.非阻塞赋值语句使用小于等于号
2023-11-15 18:11:00
168
1
原创 小梅哥Xilinx FPGA学习笔记6——参数化设计及模块重用设计不同频率的流水灯
8个Led灯分别以不同频率循环闪烁,led[0]0.05s亮一次;led[1]0.1s亮一次;led[2]0.125s亮一次;led[3]0.25s亮一次;led[4]0.5s亮一次;led[5]1s亮一次;led[6]1.25s亮一次;led[7]2s亮一次.1.在主模块led_flicker_8模块中,通过调用子模块单个led闪烁功能,用LED_Flicker_inst0.MCNT 对8个led分别进行闪烁频率配置;并且要注意每一次调用子模块的函数名应当不同,要有唯一性;#(或者。
2023-11-14 21:57:06
162
原创 小梅哥Xilinx FPGA学习笔记5——调用子模块使用三八译码器设计流水灯
8个Led灯以0.5s的的速率循环闪烁,调用三八译码器模块完成该设计。三八译码器模块见小梅哥Xilinx ZYNQ学习笔记2——38译码器-CSDN博客1.调用子模块decoder_3_8的时候,对其端口进行例化.out(Led)//系统自动分配8对应LED输出,并且LED的输出此时是由三八译码器输出决定的,所以不再使用reg型,而应该是wire型2.在LED_Run.v中,输出不需要定义成reg型;
2023-11-14 20:30:07
252
原创 小梅哥Xilinx FPGA学习笔记4——流水灯
1.学习板上晶振为 50MHz,也就是说时钟周期为 20ns,这样可以计算得出 500ms =500_000_000ns/20ns = 25_000_000,即需要计数器计数 25_000_000 次,也就是需要一个至少25 位的计数器(225>25_000_000>224)。且每当计数次数达到需要清零并重新计数。2.可以用"位拼接"{led[6:0,led[7]]}对led进程进行改写;if(!Reset_n)//以下两种写法都可以。
2023-11-13 21:32:52
607
原创 小梅哥Xilinx FPGA学习笔记3——时序逻辑电路设计之计数器(LED闪烁)
时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入形成的状态有关。这跟组合逻辑电路相反,组合逻辑的输出只会跟目前的输入成一种函数关系。换句话说,时序逻辑拥有储存元件来存储信息,而组合逻辑则没有。此处设计一个计数器,使开发板上的 LED 状态每 500ms 翻转一次。1.学习板上晶振为 50MHz,也就是说时钟周期为 20ns,这样可以计算得出 500ms =
2023-11-13 20:59:54
457
原创 小梅哥Xilinx ZYNQ学习笔记2——38译码器
译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。
2023-11-08 15:26:33
1064
1
原创 小梅哥Xilinx ZYNQ学习笔记1——二选一多路器
1.`timescale 1ns/1ns //时间刻度 前面的1ns是时间单位,后面的代表精度;2.所有程序总是从modbule开始,endmodule结束;a:b;相当于c语言中的if条件判断。4.激励文件中的例化步骤:1)把设计文件 mux2( a,b,sel,out所以的信号);都搬过来,进行在测试平台上面的例化;a.把设计文件mux2( a,b,sel,out所以的信号);都搬过来module mux2( //模块名和端口a,b,sel,out。
2023-11-07 09:29:07
314
原创 linux内核结构介绍(面试可能会问)
在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需要管寄存器,协议,总线…如今,由于图形化界面的普及,终端往往就像下图一样,是一个图形化的窗口。你可以通过这个窗口输入或者输出文本,这个文本直接传递给shell进行分析解释,然后执行,本质就是提供和内核交互的程序。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。
2023-04-16 15:45:08
107
原创 linux文件系统、文件系统目录结构、虚拟文件系统
文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法。根分区/根目录。
2023-04-15 23:06:15
185
原创 树莓派Linux源码配置,内核编译以及内核更换
编译完成后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。我们工作的时候,需要进行驱动代码编写,紧接着对驱动代码进行编译,但驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置。驱动代码的编译需要一个提前编译好的内核,所以需要先编译内核,而编译内核又必须提前完成相关的源码配置;
2023-04-11 21:23:58
1743
原创 Linux交叉编译
编译:是在一个平台上生成在该平台上的可执行代码交叉编译:是在一个平台上生成另一个平台上的可执行代码。● 我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行● 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行的。
2023-04-10 22:47:28
2945
原创 基于Linux的树莓派和电脑之间的串口通信编程
● 对于USB口而言,是没法和TTL串口直接通信的,因为接口不匹配,电平也不匹配,这时候就需要借助其它设备来实现接口与电平的转换;● 如果需要看串口的打印信息,一般是需要接一个上位机的,常规的就是电脑,而现在的电脑一般的通信接口只有USB;● 常规操作是使用CH340这种芯片所制作的USB转串口模块,这个模块就可以实现TTL串口和USB之前的转换。● 我们常用的单片机,引出来的串口,如果不加其他的接口电路,出来的信号就是TTL电平;● 波特率:好比人的语速,常用的115200,9600;
2023-04-06 16:58:44
1620
原创 用树莓派实现超声波测距
gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中。开始发送波,启动定时器,接收到返回波,停止计时器。计算距离:测试距离=(高电平时间*声速(340m/s))/2。② 计算波在空气中的时间,要尽量统一把时间单位换算成微妙。让它发送波:给Trig端口至少10us的高电平。开始发送波:Echo信号由低电平跳转到高电平。接收返回波:Echo信号由高电平跳转回低电平。计算时间:Echo引脚维持高电平的时间!① 代码编写一定要结合时序图分析过程;
2023-04-05 15:10:34
380
原创 树莓派控制继电器和继电器组
若要控制多个开关元件需要接很多杜邦线,很麻烦,所以要引入继电器组,其实控制继电器组和控制单个继电器操作一样,只是继电器组要多设置一些控制的io口而已!继电器通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。1、DC+:接电源正极(电压按继电器要求,有5V.9V.12V和24V选择)3、NC: == 继电器常闭接口==,继电器吸合前与COM短接,吸合后悬空。1、NO: 继电器常开接口,继电器吸合前悬空,吸合后与COM短接。● 本次用的继电器组是4个继电器组;
2023-04-04 20:37:23
872
原创 【Linux】静态库和动态库的生成与使用
实现一个项目需要实现很多的功能,那么这些功能不可能在一个".c"文件下实现,需要多个".c"文件来共同实现,但是程序的入口只有一个,就体现了分文件编程的重要性。:把生成的动态库文件libtest.so拷贝到/usr/lib/这个路径下,因为它会默认去/usr/lib/下去寻找动态库文件。1,mv xxx.c ~ 将原先的功能文件和生成的.o文件移至工作目录,只留下.h头文件和主函数文件,还有生成的静态库文件。1,将 xxx.c 文件生成 xxx.o 文件:gcc xxx.c -c;
2023-04-04 16:53:34
826
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人