当前位置: 首页 > news >正文

Verilog 学习第五节(串口发送部分)

小梅哥串口部分学习part1

  • 串口通信发送原理
  • 串口通信发送的Verilog设计与调试
  • 串口发送应用之发送数据
  • 串口发送应用之采用状态机实现多字节数据发送

串口通信发送原理

1:串口通信模块设计的目的是用来发送数据的,因此需要有一个数据输入端口
2:串口通信,支持不同的波特率,所以需要一个波特率设置端口
3:串口通信的本质就是将8位并行数据通过一根信号线,在不同的时刻传输并行数据的不同位,通过多个时刻,最终将8位并行数据全部传出
4:串口通信以1位的低电平标志串行传输的开始,待8位数据传输完成之后,在1位的高电平标志传输的结束
5:控制信号,控制并转串模块什么时候开始工作;什么时候一个数据发送完成?须有一个发送开始信号,以及一个发送完成信号
在这里插入图片描述
注:图中少了一个波特率设置端口

串口通信发送的Verilog设计与调试

1:波特率为300起对应的计算公式为1000 000 000/300=3 333 333ns
3 333 333ns/20=166 666次 对应的是18位,所以一般有关波特率设置的端口设置的最大值为18位计数
在这里插入图片描述
源代码


module uart_byte_tx(input [7:0]Data,input Send_en,input Clk,input Reset_n,input [2:0]Baud_set,output reg uart_tx,output reg Tx_done);//Baud_set=0  就让波特率=9600//Baud_set=1  就让波特率=19200//Baud_set=2  就让波特率=38400//Baud_set=3  就让波特率=57600//Baud_set=4  就让波特率=115200reg [17:0]bps_DR;always@(*)begincase(Baud_set)0:bps_DR=1000000000/9600/20;1:bps_DR=1000000000/19200/20;2:bps_DR=1000000000/38400/20;3:bps_DR=1000000000/57600/20;4:bps_DR=1000000000/115200/20;default:bps_DR=1000000000/9600/20;endcaseendwire bps_clk;assign bps_clk = (div_cnt == 1);reg [17:0]div_cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)div_cnt<=0;else if(Send_en)beginif(div_cnt==bps_DR-1)div_cnt<=0;elsediv_cnt<=div_cnt+1'b1;endelsediv_cnt<=0;endreg [3:0]bps_cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)bps_cnt<=0;else if(Send_en)beginif(bps_clk)beginif(bps_cnt==11)bps_cnt<=0;elsebps_cnt<=bps_cnt+1;endendelsebps_cnt<=1'b1;end//并串转换always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)beginuart_tx<=1'b0;Tx_done<=1'b0;endelse begincase(bps_cnt)1:begin uart_tx<=1'b0;Tx_done=1'b0;end2:uart_tx<=Data[0];3:uart_tx<=Data[1];4:uart_tx<=Data[2];5:uart_tx<=Data[3];6:uart_tx<=Data[4];7:uart_tx<=Data[5];8:uart_tx<=Data[6];9:uart_tx<=Data[7];10:uart_tx<=1'b1;11:begin uart_tx<=1'b1;Tx_done=1'b1; end default: uart_tx<=1'b1;endcaseendendendmodule

测试文件

`timescale 1ns / 1ns
module uart_byte_tx_tb();reg [7:0]Data;reg Send_en;reg Clk;reg Reset_n;reg [2:0]Baud_set;wire uart_tx;wire Tx_done;uart_byte_tx uart_byte_tx(.Data(Data),.Send_en(Send_en),.Clk(Clk),.Reset_n(Reset_n),.Baud_set(Baud_set),.uart_tx(uart_tx),.Tx_done(Tx_done));initial Clk=0;always#10 Clk=!Clk;initial beginReset_n=0;Send_en=0;Data=0;Baud_set=4;#201;Reset_n=1;Data=8'h57;Send_en=1;#20;//下面的意思是一直在等待Tx_done变量,没有等到的话就不往下进行@(posedge Tx_done);Send_en=0;#20000;Data=8'h75;Send_en=1;#20;@(posedge Tx_done);Send_en=0;#20000;$stop;endendmodule

仿真截图
在这里插入图片描述

收获:
1:在有多级if else的时候要记得加上begin end 否则可能造成识别不出来,导致结果错误~
2:在主代码中为了模拟实际电路中的赋值情况,可以设置#10代表延时时间,上面记得加`timescale 1ns/1ns,因为在下载到电路板上以及vivado识别的时候会自动略去这里的延时,但是这么写对实际电路仿真的时候却又非常有用

串口发送应用之发送数据

题目:使用上面的串口发送模块,设计一个数据发送器,每10ms以115200的波特率发送一个数据,每次发送的数据比前一个数据大一(计数器)
在这里插入图片描述
在这里插入图片描述
uart_byte_tx代码


module uart_byte_tx(input [7:0]Data,input Send_Go,input Clk,input Reset_n,input [2:0]Baud_set,output reg uart_tx,output reg Tx_done);reg Send_en;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)Send_en<=0;else if(Send_Go)Send_en<=1;else if(Tx_done)Send_en <= 0;endreg [7:0]r_Data;always@(posedge Clk)beginif(Send_Go)r_Data<=Data;elser_Data<=r_Data;end//Baud_set=0  就让波特率=9600//Baud_set=1  就让波特率=19200//Baud_set=2  就让波特率=38400//Baud_set=3  就让波特率=57600//Baud_set=4  就让波特率=115200reg [17:0]bps_DR;always@(*)begincase(Baud_set)0:bps_DR=1000000000/9600/20;1:bps_DR=1000000000/19200/20;2:bps_DR=1000000000/38400/20;3:bps_DR=1000000000/57600/20;4:bps_DR=1000000000/115200/20;default:bps_DR=1000000000/9600/20;endcaseendwire bps_clk;assign bps_clk = (div_cnt == 1);reg [17:0]div_cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)div_cnt<=0;else if(Send_en)beginif(div_cnt==bps_DR-1)div_cnt<=0;elsediv_cnt<=div_cnt+1'b1;endelsediv_cnt<=0;endreg [3:0]bps_cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)bps_cnt<=0;else if(Send_en)beginif(bps_clk)beginif(bps_cnt==11)bps_cnt<=0;elsebps_cnt<=bps_cnt+1;endendelsebps_cnt<=1'b0;end//并串转换always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)beginuart_tx<=1'b0;endelse begincase(bps_cnt)1:uart_tx<=1'b0;2:uart_tx<=r_Data[0];3:uart_tx<=r_Data[1];4:uart_tx<=r_Data[2];5:uart_tx<=r_Data[3];6:uart_tx<=r_Data[4];7:uart_tx<=r_Data[5];8:uart_tx<=r_Data[6];9:uart_tx<=r_Data[7];10:uart_tx<=1'b1;11: uart_tx<=1'b1;default: uart_tx<=1'b1;endcaseendendalways@(posedge Clk or negedge Reset_n)beginif(!Reset_n)Tx_done<=1'b0;else if((bps_cnt==10)&&(bps_clk==1))Tx_done<=1'b1;else Tx_done<=1'b0;end
endmodule

uart_tx_test代码顶层模块


module uart_tx_test(input Clk,input Reset_n,output uart_tx);reg [7:0]Data;reg Send_Go;wire Tx_done;uart_byte_tx uart_byte_tx(.Data(Data),.Send_Go(Send_Go),.Clk(Clk),.Reset_n(Reset_n),.Baud_set(3'd4),.uart_tx(uart_tx),.Tx_done(Tx_done));//首先计时10msreg [18:0] cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)cnt<=0;else if(cnt==499999)cnt<=0;elsecnt<=cnt+1'b1;end//接着设计何时Send_Go开始发送数据always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)Send_Go<=0;else if(cnt==1)Send_Go<=1;//这里需要注意本来的Send_en是一段时间的信号,比较长,但是Send_Go属于脉冲信号就一下else Send_Go<=0;end//接着设计数据变化always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)Data<=0;else if(Tx_done)Data<=Data+1;endendmodule

uart_tx_test_tb测试文件

`timescale 1ns / 1ns
module uart_tx_test_tb();reg Clk;reg Reset_n;wire uart_tx;
uart_tx_test uart_tx_test(.Clk(Clk),.Reset_n(Reset_n),.uart_tx(uart_tx));initial Clk=0;always #10 Clk=!Clk;initial begin Reset_n=0;#201;Reset_n=1;#50000000;$stop;endendmodule

仿真截图
在这里插入图片描述

收获
1:对于一些很重要的控制信号最好单独拿出来写,参杂在一些其他功能中很可能会产生其他的影响,例如Tx_done
2:Go一般是单脉冲信号,en是电平信号

串口发送应用之采用状态机实现多字节数据发送

有些人会了8位的串口传送数据但是总会有一些问题例如,
1.ADC,采样的结果是12位的,怎么使用串口发送
2.16位的数据,怎样通过串口发送
3.有多个字节的数据通过串口发送
不能直接将8位改成12位、16位,因为UART规定了,发送的数据位只能有6、7、8位所以应该把大于8位的字节分成多个字节进行发送

三种情况:
1:没有开始发送(上一次的已经发送完成,新的40位数据的发送请求没有出现)
2:来了发送40位数据的请求信号
3:依次发送数据的状态

第一个状态:第一种情况的时候,咱干什么事情?等待传输请求(Trans_Go)的到来,Data40[7:0]给到uart_byte_tx的Data,并同时产生Send_Go信号,启动第一个字节的发送
接着应该等待,等待Tx_Done信号的到来
40位数据是否发完了?发完了,回到第一个状态继续等Trans_Go,没发完,启动下一个8位数据的发送

源代码:

//该模块完成的功能是采用状态机实现多字节数据发送
module uart_tx_data(input Clk,input Reset_n,input [39:0]Data40,input Trans_Go,//表示合适开始发送数据,即传输请求output reg Trans_Down,//表示一次40位的数据传输完成output  uart_tx);reg [7:0]Data;reg Send_Go;wire Tx_done;uart_byte_tx uart_byte_tx(.Data(Data),.Send_Go(Send_Go),.Clk(Clk),.Reset_n(Reset_n),.Baud_set(3'h4),.uart_tx(uart_tx),.Tx_done(Tx_done));reg [2:0]state;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)beginstate<=0;Data<=0;Send_Go<=0;Trans_Down<=0;end//下面部分也可以用case语句实现,记得加default~else if(state==0)beginTrans_Down<=0;if(Trans_Go)beginData<=Data40[7:0];state<=1;Send_Go<=1;endelse beginData<=Data;state<=0;Send_Go<=0;endendelse if(state==1)beginif(Tx_done)beginData<=Data40[15:8];state<=2;Send_Go<=1;endelse beginData<=Data;state<=1;Send_Go<=0;endendelse if(state==2)beginif(Tx_done)beginData<=Data40[23:16];state<=3;Send_Go<=1;endelse beginData<=Data;state<=2;Send_Go<=0;endendelse if(state==3)beginif(Tx_done)beginData<=Data40[31:24];state<=4;Send_Go<=1;endelse beginData<=Data;state<=3;Send_Go<=0;endendelse if(state==4)beginif(Tx_done)beginData<=Data40[39:32];state<=5;Send_Go<=1;endelse beginData<=Data;state<=4;Send_Go<=0;endend        else if(state==5)beginif(Tx_done)beginstate<=0;Trans_Down<=1;Send_Go<=0;endelse beginData<=Data;state<=5;Send_Go<=0;endend                               endendmodule

测试文件:

`timescale 1ns / 1nsmodule uart_tx_data_tb();reg Clk;reg Reset_n;reg [39:0]Data40;reg Trans_Go;wire Trans_Down;wire uart_tx;uart_tx_data uart_tx_data(Clk,Reset_n,Data40,Trans_Go,//表示合适开始发送数据,即传输请求Trans_Down,//表示一次40位的数据传输完成uart_tx);initial Clk=0;always #10 Clk=!Clk;initial beginReset_n=0;Data40=0;Trans_Go=0;#201Reset_n=1;#201Data40=40'h123456789a;Trans_Go=1;@(posedge Trans_Down);Trans_Go=0;#201Data40=40'ha987654321;Trans_Go=1;@(posedge Trans_Down);#200000$stop;end
endmodule

仿真截图:
在这里插入图片描述

任务:
1:优化状态机,实现只要2个或3个状态实现发送的功能,并易于修改为发送任意个字节的数据(加个计数器进行二级验证~)
2:思考不使用状态机实现的方法

任务一代码(已进行仿真)

//该模块完成的功能是采用状态机实现多字节数据发送
module uart_tx_data2(input Clk,input Reset_n,input [39:0]Data40,input Trans_Go,//表示合适开始发送数据,即传输请求output reg Trans_Down,//表示一次40位的数据传输完成output  uart_tx);reg [7:0]Data;reg Send_Go;wire Tx_done;uart_byte_tx uart_byte_tx(.Data(Data),.Send_Go(Send_Go),.Clk(Clk),.Reset_n(Reset_n),.Baud_set(3'h4),.uart_tx(uart_tx),.Tx_done(Tx_done));reg [2:0]state;//用来记录当前发送到第几个字节了reg [2:0]cnt;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)begincnt<=0;end else if(Tx_done) beginif(cnt==4)cnt<=0;elsecnt<=cnt+1;endendalways@(posedge Clk or negedge Reset_n)beginif(!Reset_n)beginstate<=0;Data<=0;Send_Go<=0;Trans_Down<=0;end//下面部分也可以用case语句实现,记得加default~else if(state==0)beginTrans_Down<=0;if(Trans_Go)beginTrans_Down<=0;if(Tx_done)begincase(cnt)0:begin Data<=Data40[7:0]; state<=0;end 1:begin Data<=Data40[15:8];state<=0;end2:begin Data<=Data40[23:16];state<=0;end3:begin Data<=Data40[31:24];state<=0;end4:begin Data<=Data40[39:32];state<=1;enddefault:Data<=Data;endcaseSend_Go<=1;endelse beginData<=Data;state<=0;Send_Go<=0;endendend      else if(state==1)beginif(Tx_done)beginstate<=0;Trans_Down<=1;Send_Go<=0;endelse beginData<=Data;state<=1;Send_Go<=0;endend                               endendmodule

相关文章:

Verilog 学习第五节(串口发送部分)

小梅哥串口部分学习part1 串口通信发送原理串口通信发送的Verilog设计与调试串口发送应用之发送数据串口发送应用之采用状态机实现多字节数据发送串口通信发送原理 1&#xff1a;串口通信模块设计的目的是用来发送数据的&#xff0c;因此需要有一个数据输入端口 2&#xff1a;…...

破解遗留系统快速重构的5步心法(附实例)

前两天和一个架构师朋友闲聊&#xff0c;说到了 「重构」 这个话题&#xff0c;他们公司早年间上线的项目系统&#xff0c;因一直没专人在演进过程中为代码质量负责&#xff0c;导致现在代码越来越混乱&#xff0c;逐渐堆积成“屎山”&#xff0c;目前的维护成本已远高于重新开…...

信号量(上)实验

实验1&#xff1a;解决订票终端的临界区管理 订票终端是解决冲突问题&#xff0c;所以信号量的值是1 #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <semaphore.h> int ticketAmout 2; // 票的数量: 全局变量 sem_t mutex…...

阿里5年,一个女工对软件测试的理解

成为一个优秀的测试工程师需要具备哪些知识和经验&#xff1f; 针对这个问题&#xff0c;可以直接拆分以下三个小问题来详细说明&#xff1a; 1、优秀软件测试工程师的标准是什么&#xff1f; 2、一个合格的测试工程师需要具备哪些专业知识&#xff1f; 3、一个合格的测试工程…...

前端练习项目

30 Web Projects 30 多个带有 HTML、CSS 和 JavaScript 的 Web 项目&#xff0c;由 Packt Publishing 提供 https://github.com/PacktPublishing/30-Web-Projects-with-HTML-CSS-and-JavaScript Small projects https://github.com/WebDevVikramChoudhary/small_projects_for_…...

sql复习(set运算符、高级子查询)

一、set运算符 union&#xff1a;得到两个查询结果的并集&#xff0c;并且⾃动去掉重复⾏。不会排序 union all&#xff1a;得到两个查询结果的并集&#xff0c;不会去掉重复⾏。也不会排序 intersect&#xff1a;得到两个查询结果的交集&#xff0c;并且按照结果集的第⼀个列进…...

整车电源的几种模式:OFF/ACC/RUN/CRANK

本文框架1.前言2. 四种电源模式2.1 OFF模式2.2 ACC模式2.3 ON模式2.4 CRANK模式3. KL15/KL301.前言 在诊断或者网络管理相关模块开发对客户的需求进行梳理时&#xff0c;经常会看到客户对不同车辆模式下处理策略的需求&#xff0c;如果前期没接触过这几种模式&#xff0c;可能…...

踩了大坑:wordpress后台 无法将上传的文件移动至wp-content

一、问题描述 今天迁移了wordpress站点至新服务器&#xff0c;结果上传图片出现“无法将上传的文件移动至wp-content/uploads”的提示&#xff0c;这是怎么回事&#xff0c;为什么会这样。 报错如下&#xff1a; 2023/02/20 08:57:48 [error] 9861#9861: *79624 FastCGI sen…...

page cache设计及实现

你好&#xff0c;我是安然无虞。 page cache的设计及实现 page cache 本质上也是一个哈希桶, 它是按照页的数量进行映射的. 当 central cache 向 page cache 申请内存时, page cache 先检查对应位置是否有span, 如果没有则向更大页去寻找一个span, 如果找到则分裂成两个. 比如…...

使用seata来解决分布式事务

文章目录 目录 文章目录 前言 一、Seata的执行流程如下 二、使用步骤 三、配置微服务客户端 总结 前言 Seata部署指南 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模…...

推荐一款新的自动化测试框架:DrissionPage

今天给大家推荐一款基于Python的网页自动化工具&#xff1a;DrissionPage。这款工具既能控制浏览器&#xff0c;也能收发数据包&#xff0c;甚至能把两者合而为一&#xff0c;简单来说&#xff1a;集合了WEB浏览器自动化的便利性和 requests 的高效率。 一、DrissionPage产生背…...

MQ系列面试

先来说说什么是MQ&#xff0c;MQ与多线程之间的区别MQ是消息中间件 可以实现异步 多线程也可以实现异步使用传统http协议方式调用接口存在的缺点如果服务器端没有及时的响应给客户端的时候&#xff0c;容易造成客户端阻塞等待。服务器响应超时 客户端发送重试机制 需要考虑避免…...

一句话设计模式2:原型模式

原型模式:每次得到一个新对象。 文章目录 原型模式:每次得到一个新对象。前言一、原型模式和new的区别二、如何实现原型模式1. 什么clone接口2. 开始使用,并验证浅clone效果3. 深度clone(也就是address也要复制一份)总结前言 原型模式可以说是目前接触的设计模式中,比较无用的…...

c++11特性与c++17特性

1、自动类型推导auto // C11 auto func1() -> int // 需要指定返回值类型 {return 10; }auto func2() -> std::function<void()> {auto lambda []() { };return lambda; }// c17 // 之后无需指定返回值类型 auto func1() {return 10; }auto func2() {auto lambda…...

Redis02: Redis基础命令

一、基础命令 先启动redis服务&#xff0c;使用redis-cli客户端连到redis数据库里面 1. 获取符合规则的键: keys 要点&#xff1a; &#xff08;1&#xff09;keys 后面可以指定正则表达式 &#xff08;2&#xff09;在生产环境下建议禁用keys命令&#xff0c;因为这个命令会查…...

MDK的HardFault硬件异常和NMI异常原因总结

发出来&#xff0c;出现问题自行比对&#xff0c;现在一些代码&#xff0c;也会对这个进行分析。硬件异常原因&#xff1a; Unaligned load or store Load 或者 store 指令访问未对齐地址 Undefined Instruction 执行 ARM 未定义的指令 EPSR Fault 当前程序没有在 Thumb 状态下…...

视频图像质量诊断

视频图像质量诊断有哪些原理&#xff0c;视频图像质量诊断有哪些算法&#xff1f; 视频图像质量诊断技术支持对视频黑屏、视频干扰、视频卡顿、视频遮挡、亮度异常、图像偏色、视频模糊、视频冻结、视频抖动、场景变更、无字符叠加等20种视频图像质量异常进行诊断&#xff0c;…...

make、Makefile项目自动化构建工具

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;前言自动化构建工具是干什么的呢&#xff1f;主要是为了让我们对指令进行一些设置&#xff0c;就比如说&#xff0c;假如一个项目里有很多个源文件&…...

Linux系统之Uboot、Kernel、Busybox思考之一

目录 一 基础环境 1 硬件基础环境 2 软件基础环境 2.1 Uboot 2.2 内核 2.3 文件系统 二 启动过程 1 2 3 4 5 6 7 一 基础环境 1 硬件基础环境 CPU、内存和FLASH为基础环境&#xff0c;有了这三样&#xff0c;程序就可以跑起来。在此基础上补充各种外设&#xff…...

CCNP350-401学习笔记(401-450题)

401、What is the function of vBond in a Cisco SDWAN deployment? A. initiating connections with SD-WAN routers automatically B. pushing of configuration toward SD-WAN routersC. onboarding of SDWAN routers into the SD-WAN overlay D. gathering telemetry dat…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...