基于单片机的GPS定位系统设计
1 系统硬件
1.1单片机模块
单片机的种类和型号可以说是有成百上千种,很多大的公司和企业都生产开发自己的单片机芯片,并且广泛应用于各种产品。Intel、 philips、 摩托罗拉、凌阳、宏晶等等种类繁多。大体上可以分为51系列单片机和非51系列单片机。
其主要特点是:属于增强型的80C51系列单片机,指令能够向上兼容。额定工作电压是3到5V,功耗相对较低,通用性强。程序存储空间有8K字节,完全够用。本设计选择的是每个机器周期含有12个时钟的型号,在实际使用中频率最高可以达到48MHz,刚好满足GPS信号接收机的刷新频率。不需要专门的编程器,可以快速地将程序烧录到单片机存储器中。具备异步串行通信接口(即UART接口),同时抗干扰能力较强。掉电模式下可由外部中断唤醒,方便于电池供电及便携设备。能够适应严酷的温度环境,最低温度零下40°C, 最高温度85℃都可以正常使用。单片机上有512字节的只读内存。芯片通用32个I/O端口。复位后:P1/P2/P3/P4为内部带有弱上拉电阻的准双向口,P0为开路漏极输出,用作母线延伸时,不需要外接上拉电阻,但当其用作I/O端口时,需要外接上拉电阻。ISP(可编程系统)/IAP(可编程应用程序),不用专门的程序编辑器,不用特殊的仿真器,可以直接通过串口(RXD/P3.0,TXD/P3.1)下载用户所需的程序,并在几秒钟内完成一片具有看门狗功能的EEPROM功能,总共有3个16位计时器/计数器。定时器T0、T1、T2外部中断4通道、降边中断或低电平触发电路,采用外部中断、低电平触发中断模式激发Power Dawn模式,通用异步收发传输器(UART)通过使用定时器软件可实现多个。单片机采取PDIP封装。
单片机下电模式:典型功耗小于0.1μA,其唤醒可通过外部中断。中断返回后,接着运行原程序。空闲模式:一般情况下的功耗为2mA。正常运行模式:一般情况下的功耗是4mA~7ma外部中断可以唤醒下电模式,适合运用于水表、煤气表、便携设备等电池电源系统以及方便携带的设备。
STC89C52RC引脚功能说明:
主电源引脚:
VCC(40引脚):电源电压
VSS(20引脚):接地
可编程输入输出引脚:
P0端口(P0.0~P0.7,39~32引脚):端口P0是一个8位双向I/O端口,具有漏极开路。作为输出端口,各个管脚都可驱动8个使用双极晶体管的数字电路。当将“1”写入端口P0时,它可以用作高阻抗输入。当访问外部程序和数据存储器时,端口P0还能提供低8位地址和8位数据的多路复用总线。这时,端口P0的内部上拉电阻是有效的。在闪存编程中,端口P0接收指令字节,但在程序验证中,端口P0反而输出指令字节。校验时,需将上拉电阻接在外部。
P1端口(P1.0~P1.7,1~8引脚):端口P1是具有内部上拉电阻的一个8位双向I/O端口。P1端口的输出缓冲器能够驱动(吸收或输出电流模式)4个TTL输入。当将1写入P1端口时,内部上拉电阻能将端口拉到很高的电位,这时可以用作输入端口。当使用端口p1作为输入端口时,由于存在内部上拉电阻,从外部拉下的引脚将会出现输出电流。
此外,P1.0和P1.1还可用作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),详情见表3-1-1:
内置上拉电阻。P2的输出缓冲器可以驱动(吸收或输出电流模式)4个TTL输入。当端口写入1时,内部上拉电阻将端口拉到较高的电平,可用作输入端口。当使用p2作为输入端口时,外部信号拉低的引脚会由于内部拉起电阻而输出电流。
当访问16位地址的外部程序存储器和外部数据存储器(例如执行“MOVX@DPTR”指令)时,P2发送高8位地址。当访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2端口pin的内容(即特殊寄存器(SFR)区域中P2寄存器的内容)在整个访问期间不会改变。在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。
P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻器的8位双向I/O端口。P3的输出缓冲器可以驱动(吸收或输出电流模式)4个TTL输入。向端口写入1时,通过内部拉出电阻器将端口拉至高电位,并将其用作输入端口。当P3作为输入端口时,由于内部上拉电阻,由外部信号下拉的引脚将输入电流。在flash ROM编程或程序验证中,P3还接收一些控制信号。除了作为一个通用的I/O端口,P3端口还具有其他多路复用功能,如表3-1-2所示。
控制引脚:
RST(9引脚):重置输入。当输入的高电平达两个以上的连续机器循环时,它是有效的。用于达到单片机的复位和初始化操作。看门狗定时结束后,该引脚持续发出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可能会使该功能没有反应。在DISRTO默认状态下,复位高电平是可行的。
ALE(30引脚):地址锁存控制信号(ALE)在访问外部程序存储器时,会锁存住较低8位地址的输出脉冲。在闪存编程时,该引脚也用作编程输入脉冲。
一般来说,ALE以晶体振荡器六分之一的固定频率输出脉冲,可用作外部定时器或时钟。但特别强调的是,每次访问外部数据存储器时,ALE脉冲将会被跳过。
如有必要,将地址位8EH的SFR的第0位置“1”,ALE操作无效。在此位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被稍微拉高。此ALE启用标志位(地址位8EH的SFR的第0位)设置为在外部执行模式下对微控制器有效。
PSEN(29引脚):外接程序存储器选通信号,当单片机从外接程序存储器运行外界代码时,它在每一个机器循环中都要被激活两次,但当访问外界数据存储器时,它就不需要被激活。
EA/VPP(31引脚):访问外部程序存储器控制信号。为使其可以从0000H至FFFFH的外接程序存储器读取到指令,EA一定要接GND。请注意,应用加密方式1时,请重置内部锁定。为了其可以运行内部程序指令,应连接VCC。在闪存编程过程中,还要连接12伏VPP电压。
XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端口。
XTAL2(18引脚):振荡器反相放大器的输入端口。
特殊功能寄存器
在STC89C52RC片内存储器中,80H~FFH一共有128个单元位具有特殊功能寄存器(SFR),SFR的地址空间如下表3-1-3所示。
并不是所有的地址都能被定义,在80H~FFH共128个字节中只有一部分被定义。还有相当多的一部分并没有被定义。对没有被定义的单元读写将是无效的,读出的数值将不确定,而写入进去的数据也将会遗失。
不应将“1”写入还未被定义的单元,由于这些单元在将来的产品中有可能会被赋予新的功能,在这种情况下,复位后这些单元数值都将会是“0”。
STC89C52RC除了拥有计时器/计数器0与计时器/计数器1之外,还增添了一个计时器/计数器2、计时器/计数器2的控制和状态位位于T2CON(见表3-1-4)和T2MOD(见表3-1-7)。
计时器2是一个16位计时/计数器。通过对特殊功能的寄存器T2CON中的C/T2位进行设置,可将其视作计时器或计数器使用(T2CON的描述见表3-1-4所列)。计时器2有3种操作模式:捕获、自动加载(递增或递减计数)和波特率发生器,这3种模式由T2CON中的位进行选择(如表3-1-5所列)
捕获模式:
在捕获模式中,通过T2CON中的EXEN2得到2个选项。若EXEN2=0, 计时器2作为一个16位计时器或计数器(由T2CON中的C/位选择),溢出时置位为TF2(计时器2溢出标志位)。此位可用来生成中断(经由存在于使能IE寄存器的计时器2中断使能位)。若EXEN2=1,与上述描述类似,但增添了一个特性,即为外界输入T2EX由1变0时,将存在于计时器2的TL2和TH2的当前值各自捕捉到RCAP2L和RACP2H。此外,T2EX的负跳变使T2CON中的EXF2置1,EXF2和TF2一样可以发生中断(它的向量与定时器2溢出的中断地址一样,计时器2中断服务程序通过访问TF2和EXF2来弄清引发中断的原因),捕获模式如图3-1-2所示。在此模式中,TL2和TH2不需重新装载值,甚至当T2EX生成捕获时间的时候,计数器还是以T2EX的负跳变或振荡频率的1/2(12时钟模式)或者1/6(6时钟模式)计数。
自动加载(递增/递减计数器):
16位自动加载中,计时器2可通过C/T2配置为计时器/计数器,程序控制递增/递减。计数的方向根据DCEN(递减计数使能位)来确定,DCEN位于T2MMOD寄存器中,T2MOD寄存器每一位的功能描述如表3-1-7所示。当DCEN=0时,定时器2自行认定为向上计数;当DCEN=1时,计时器2可通过T2EX确定到底是递增还是递减计数。图3-1-3展示了当DCEN=0时,定时器2如何自行认定递增计数。在此种模式中,选哪种计数方式由设置EXEN2位来决定。假设EXEN2=0,定时器2依次递增计数直至0FFFFH,并且在其溢出后将TF2置1,再将RCAP2L和RCAP2H中的16位的数值当作重新加载的值输入定时器2。RCAP2L和RCAP2H的值是可以通过软件预先设置的。
使用者切勿将其置1。这些是在将来89C51系列单片机中用来实现的新特性。在这一情况下,要用到保留位,在复位或无效状态的情况下,它的值应为0;而在这些位的有效状态情况下,它的值为1。保留位读取到的值并不是确定的。
如果EXEN2=1,16位的重新装载可通过满溢或T2EX由1至0的负跳变来实现。在负跳变同时将EXF2置1。如果计时器2中断被充能,那么当TF2或EXF2置1时,定时器2实行递增计数,计数到0FFFFH后溢出并将TF2置1,同时还将产生中断。定时器2的溢出将使RCAP2L和RCAP2H中的16位值作为重新加载的值存入TL2和TH2。
当T2EX置0时,将会使定时器2开始递减计数。当TL2和TH2计数到与RCAP2L和RCAP2H中的值相同时,定时器将会产生中断。
波特率发生器模式:
定时器1或定时器2被寄存器T2CON的位TCLK和RCLK许可得到串行口发送和接收的波特率。当TCLK=0时,定时器1被当做串行口发送波特率的发生器;反之,定时器2被当做串行口发送波特率的发生器。RCLK对串行口接收到的波特率拥有一样的效果。通过这两位,串行口能获得不一样的接收和发送波特率,一个是由定时器1产生的,另一个是由定时器2产生的。
如图3-1-5所示为定时器工作在波特率的发生器模式的情况。与自动加载相似,当TH2溢出时,波特率发生器模式使定时器2寄存器重新装载值,其值由寄存器RCAP2H和RCAP2L的16位提供,寄存器RCAP2H和RCAP2L的值是通过软件来预先设置的。当工作在模式1和模式3的情况下,波特率由下面的公式所决定:
定时器可设置成“定时”或“计数”方式,在大多应用上,定时器都会被设置成“定时”方式(C/=0)。当定时器2作为定时器时,它的操作波特率发生器并不一样。通常情况下定时器2会作为定时器来使用,它会在每个机器循环依次递增(1/6或1/12振荡频率)。当定时器2作为波特率发生器使用时,它在6时钟模式下,以振荡器的频率递增(12时钟模式时为1/12振荡频率)。
如图3-1-5所示,定时器2处在波特率发生器模式,只有在寄存器T2CON中的RCLK和TCLK=1时,定时器2才会作为波特率发生器有效。应当注意的是TH2的溢出不会将TF2置1,也不能够产生中断。在这种情况下,当定时器被当做波特率发生器时,定时器2的中断不必被禁止。如果EXEN2(T2外界使能标志)被置1,在T2EX中从1至0的转换会将EXF2(T2外部标志位)置1,但并不能致使TH2和TL2重新加载。当定时器2被用为波特率发生器时,若有需要的话,T2EX可被当做附加的外部中断。
当计时器工作在波特率发生器模式下,就不用对TH2和TL2进行读或者写操作,每经过一个状态时间或者收到由T2进入的异步信号,定时器2将会加1。在这时,对TH2和TL2进行读或写操作都绝对不可能是准确的;可以对RCAP2寄存器进行读操作,但不能进行写操作,否则将导致自动加载产生错误。当对定时器2或者寄存器RCAP进行查询时。应先关闭定时器(清零TR2)之后在进行访问。表3-1-8列出了常用的波特率还有怎样用定时器2得到的这些波特率。
看门狗应用:
STC单片机有两种时钟模式,一种是单倍速,也就是12时钟模式,在这种模式下,STC单片机和除STC系列外的51单片机具有一样的机器循环,即12个振荡周期为一个机器循环;另一种是双倍速,又称6时钟模式,在这种模式下,STC单片机比其他51系列单片机运行速度快了接近一倍之多。
2 系统软件
2.1 初始化模块
初始化模块应该在通电开机后,实现单片机、LCD1602液晶显示屏和GPS模块的初始化。应该对单片机完成设置串口的工作模式、设置波特率和中断的工作模式;也要对液晶显示屏进行设置开机画面和显示模式的工作;同时也应该做到对GPS模块串口的成功通信。
2.2数据接收处理模块
NMEA-0183数据格式
NMEA-0183是由美国国家海洋电子协会给海上应用的电子设备规定的标准格式。它是在以前的海上应用的电子设备的标准格式0180和0182的基础之上,添加了GPS接收机发出的内容才完成的。现在大泛围采取应用的是Ver 2.00版本。目前除了少数初始时期的GPS接收机外,极大多数的GPS接收机都使用了这一种格式。这个协议是给在不同的GPS导航设备中设立一个一致的RTCM标准。这种数据格式的广泛使用让GPS接收模块的通用性和互换性大大提高。
此格式输出的语句运用的是ASCII字符码,包括了纬度、经度、速度、日期、时间、航向、以及卫星信号情况等信息。其串行通信默认参数为:波特率=9600bps,数据位=8bit,开始位=1bit,停止位=1bit,没有奇偶校验。
帧格式形如: a a c c c , d d d , d d d , … , d d d ∗ h h < C R > < L F > 1. aaccc,ddd,ddd,…,ddd*hh<CR><LF> 1. aaccc,ddd,ddd,…,ddd∗hh<CR><LF> 1.”:帧命令起始位;
2. aaccc:地址域,前两位为识别符,后三位为语句名;
3. ddd…ddd:数据;
4. “”:校验和前缀;
5. hh:校验和(check sum),在$和之间全部字符ASCII码的校验和(每个字节都做异或运算,得到校验和以后,再变换成16进制格式的ASCII字符码。)
6. :Carriage Return和Line Feed的缩写,回车和换行,表示帧结束。
输入语句
NMEA-0183输入语句是指GPS接收模块可以接收的语句。输入语句包括初始位置,时间,秒脉冲状态,差分模式,NMEA输出间隔等设置信息。这些是GPS接收机可以读取的语句。通常情况下初始化信息语句为PGRMI。
$GPRMI,(1),(2),(3),(4),(5),(6),(7)hh(CR)(LF)
1)纬度ddmm.mmmm(度分)格式(前面的0也会被发送);
(2)纬度半球分为N(北半球)或S(南半球);
(3)经度dddmm.mmmm(度分)格式(前面的0也会被发送);
(4)经度半球分为E(东经)或W(西经);
(5)国际协调日期,ddmmyy(日月年)格式;
(6)国际协调时间,hhmmss(时分秒)格式;
(7)接收机两种命令,分别为A和R,其中A为自动定位,R为机器重新启动。
输出语句
SiRF Star II的输出语句共有十余种之多,其主要语句有GPALM(历书数据)、GPGGA(GPS标准数据)、GPGSV(卫星状态)、GPVTG、GPRMC、GPGSA、PGRME、PGRMF、PGRMT、PGRMV(GARMIN定义的语句,3D速度信息)、LCGLL、LCVTG(NMEA标准语句)等。可以经GPS串口调试软件为SiRF Star II芯片传输命令语句,在此之后芯片会按照命令语句设置参数。
几种常用的数据格式如下:
1 .GPS标准数据(GPGGA),其结构为:
$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14)(15)(CR)(LF)
(1)国际协调时间,其格式是hhmmss.sss;
(2)纬度,格式是ddmm.mmmm(位数不够的则需在前面补0);
(3)纬度半球,N或S(北纬或南纬);
(4)经度,格式为dddmm.mmmm(位数不够的则需在前面补0);
(5)经度半球,E或W(东经或西经);
(6)定位质量效果指示,0表示定位无效,1表示定位有效;
(7)使用卫星的数量,从00到12(位数不足则需在前面补0);
(8)水平的精确度,由0.5至99.9;
(9) 天线距离海平面的高度,从-9999.9到9999.9米 ;
(10)高度单位,M表示长度单位米;
(11)大地椭球面相对海平面的高度,从-999.9到9999.9米;
(12) 和(10)一样;
(13) 差分GPS数据间隔(RTCM SC-104),最后设立RTCM传送的秒数;
(14) 差分参考基站标号,从0000到1023(位数不够的则需在前面补0);
(15) 校验和。
2.可视卫星状态输出语句(GPGSV),其结构为:
$GPGSV,(1),(2),(3),(4),(5),(6),(7),…,(4),(5),(6),(7)(8)(CR)(LF)
(1)GSV所有的语句电文数;
(2)此刻GSV的语句号;
(3)可视卫星的总数,00至12;
(4)卫星的编号,由01至32;
5)卫星的仰角,00至90度;
6)卫星的方位角,000至359度,实际值;
7)信噪比(C/No),00至99dB;无表示没有接收到讯号;
8) 校验和。
3. 推荐最小的GPS/TRANSIT数据(GPRMC),其结构是:
G P R M C , ( 1 ) , ( 2 ) , ( 3 ) , ( 4 ) , ( 5 ) , ( 6 ) , ( 7 ) , ( 8 ) , ( 9 ) , ( 10 ) , ( 11 ) , ( 12 ) ∗ h h ( C R ) ( L F ) 当中“ G P ”是交谈识别符;“ R M C ”是语句识别符;“ h h ”为校验和,它代表了在“ GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF) 当中“GP”是交谈识别符;“RMC”是语句识别符;“hh”为校验和,它代表了在“ GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)∗hh(CR)(LF)当中“GP”是交谈识别符;“RMC”是语句识别符;“hh”为校验和,它代表了在“”和“”之间全部字符的按位异或值(但不包含这两个字符)。
$GPRMC语句数据区的内容是:
(1)定位地点的UTC,hhmmss(时分秒)格式;
(2)定位的两种状态,分别是A和V,A表示有效定位,V表示无效定位;
(3)定位点的纬度,ddmm.mmmm(度分)格式;
(4)纬度半球,N(北半球)或S(南半球);
(5)定位点经度,dddmm.mmmm(度分)格式;
(6)经度半球,E(东半球)或W(西半球);
(7)地面的速率,000.0~999.9节;
8)地面航向,000.0~359.9度;
9)国际协调日期,ddmmyy(日月年)格式;
10)磁偏角,000.0~180度;
11)磁偏角方向,E(东)或W(西);
12)四种工作的模式:分别为A、D、E和N,A表示自主,D表示差分,E表示评估,N表示数据无效。
3 系统仿真
3.1 Proteus软件介绍
Proteus是来自英国LabcenterE1 ectronics公司的EDA工具软件.Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具-样的原理布图、PCB 自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus 为设计者建立了完备的电子设计开发环境。
Proteus软件具有以下两个重要特点:(1)互动的电路仿真。用户可以实时采用诸如RAM, ROM,键盘,马达,LED, LCD, AD/DA,部分SPI器件,部分IIC器件进行电路仿真。(2)仿真处理器及其外围电路。可以仿真51系列、AVR、PIC、 ARM等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配台显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建 立了完备的电子设计开发环境。
Keil软件是目前最流行的开发MCS-51系列单片机的软件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision) 将这些部份组合在一起。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。
Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
C51工具包的中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.0BJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由0H51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
4 仿真过程
在Proteus软件中搜索相关零部件,依据电路图连接,仔细检查是否有错误检查接线。完成电路图连接如图5-1
使用keil软件编译程序源码软件测试和修正,编译成功结果如图5-2
使用Virtual GPS模拟GPS信号,如图5-3
双击单片机烧写程序后上电测试运行结果,液晶显示如图5-3
调试过程可以分为三个部分:
第一部分:通过实践表明,电子装置即运用依照电路的完善参数安装设计也不可避免产生出较小的误差。因此,设计的时候,可能出现很多方面想不到的问题,在改善之后,运用了多种方式,通过各种各样的途径实现装置的技术指标。
第二部分:对于软件部分的调试,应用KEIL软件界面,在程序编辑的窗口,选好单片机的类型,编译程序源码,链接,通过软件仿真调试器。
第三部分:是软件和调试,实现GPS信号的液晶显示。
相关文章:
基于单片机的GPS定位系统设计
1 系统硬件 1.1单片机模块 单片机的种类和型号可以说是有成百上千种,很多大的公司和企业都生产开发自己的单片机芯片,并且广泛应用于各种产品。Intel、 philips、 摩托罗拉、凌阳、宏晶等等种类繁多。大体上可以分为51系列单片机和非51系列单片机。 其…...
[React]Render Props、自定义Hooks和Context API优化详解
关于React中的Render Props、自定义Hooks和Context API优化的详解。我需要根据我搜索到的资料来综合回答这三个部分。首先,我需要分别理解每个概念的定义、用途以及优化方法。 首先看Render Props。根据Render Props是一种通过传递函数作为prop来共享组件间逻辑的技…...
关于大型语言模型的结构修剪
本文介绍了一种名为 **LLM-Pruner** 的方法,用于对大型语言模型(LLMs)进行结构化剪枝,以减少模型大小和计算需求,同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝,并…...
【语法】C++中string类中的两个问题及解答
贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中,调用的是这个string对象的容量(可以存多少个有效字符),而size()是调用的string对象现在有…...
Linux(centOS) 命令提示符格式修改(PS1)
1. 命令提示符的组成 命令提示符(PS1)通常由以下部分组成: 部分示例说明[ 和 ][...]提示符的开头和结尾,用于视觉分隔。用户名root 或 tianjiajie当前登录的用户。root 是超级用户,普通用户可能是其他名称。分隔用户…...
QwenVL 2.5-本地安装编译布署全教程
开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…...
Hutool - JWT:轻松玩转 JSON Web Token
各位开发者朋友们,在现代的前后端分离开发模式里,身份验证和授权可是至关重要的环节。JSON Web Token(JWT)作为一种轻量级的身份验证和授权机制,在很多项目中都得到了广泛应用。它可以在客户端和服务器之间安全地传输信…...
2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题D:回文数组试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需…...
【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录
小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…...
W3C标准和ES规范之一文通
W3C标准和ES规范之一文通 以下是关于W3C标准和ES规范的透彻解析,通过结构化对比和生活化类比帮助理解和记忆: 一、核心概念对比(总览) 维度W3C标准ES规范(ECMAScript)定位Web技术的建筑蓝图JavaScript的语…...
Linux:应用层协议
协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢? 无论我们采用什么方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种…...
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
# 深度学习五虎将:当CNN遇见Transformer的奇幻漂流 ## 序章:AI江湖的兵器谱排行 2012年,多伦多大学的厨房里,Hinton的学生们用GPU煎了个"AlexNet"荷包蛋,从此开启了深度学习的热兵器时代。如今五大模型各显…...
微服务组件详解——sentinel
1.启动sentinel: 下载jar sentinel-dashboard-1.8.0.jar 使用以下命令直接运行 jar 包(JDK 版本必须≥ 1.8): java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制台访问地址:http://localhost:9999…...
波导阵列天线 学习笔记11双极化全金属垂直公共馈电平板波导槽阵列天线
摘要: 本communicaition提出了一种双极化全金属垂直公共馈电平板波导槽阵列天线。最初提出了一种公共馈电的单层槽平板波导来实现双极化阵列。此设计消除了传统背腔公共馈电的复杂腔体边缘的必要性,提供了一种更简单的天线结构。在2x2子阵列种发展了宽十…...
swift 开发效率提升工具
安装github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安装swiftformat for xcode brew install swiftformatXcode Swift File代码格式化-SwiftFormat...
3-5 WPS JS宏 工作表的移动与复制学习笔记
************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…...
Centos7部署k8s(单master节点安装)
单master节点部署k8s集群(Centos) 一、安装前准备 1、修改主机名 按照资源准备修改即可 # master01 hostnamectl set-hostname master01 ; bash # node1 hostnamectl set-hostname node1 ; bash # node2 hostnamectl set-hostname node2 ; bash2、修改hosts文件 以下命令所…...
Tomcat
1.Tomcat是什么? Tomcat 是一个开源的、轻量级的 Servlet 容器,也被称为 Web 服务器,由 Apache 软件基金会的 Jakarta 项目开发,在 Java Web 开发领域应用广泛。 1)Servlet 容器:Servlet 是 Java 语言编写…...
基于SpringBoot+Vue的电影订票及评论网站的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
地基简识Spring MVC 组件
Spring MVC 是一个基于 MVC 设计模式的框架,其核心组件协同工作以处理 HTTP 请求并生成响应。以下是各组件的详细说明及其协作流程: 一、核心组件 DispatcherServlet(前端控制器) 作用:接收所有请求并协调其他…...
如何通过Python网络爬虫技术应对复杂的反爬机制?
要使用Python网络爬虫技术绕过复杂的反爬虫机制,可以采取以下几种策略: 设置User-Agent:通过设置不同的User-Agent,模拟正常用户的浏览器访问,避免被网站识别为爬虫。可以使用fake_useragent库来随机生成User-Agent。…...
深入浅出:Spring AI 集成 DeepSeek 构建智能应用
Spring AI 作为 Java 生态中备受瞩目的 AI 应用开发框架,凭借其简洁的 API 设计和强大的功能,为开发者提供了构建智能应用的强大工具。与此同时,DeepSeek 作为领先的 AI 模型服务提供商,在自然语言处理、计算机视觉等领域展现了卓…...
Node.js二:第一个Node.js应用
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的: 1.引入 required 模块:我们可以使用 requi…...
【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案
【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案 一、V1和V2为什么需要混用 自从api7开始,一直到api10。V1的实际使用中,开发人员发现Observed和ObjectLink 监听实现多层级嵌套对象的更新的方案,太过于臃肿。当需要监听处理更新的多层…...
【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制
【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制 Kafka 使用消息日志(Log)机制来持久化保存数据,我们知道Kafka实际是以Partition分区为单位进行负载均衡和资源分配,每个Partition又由多个Replica副本组成,副本之间分布于不同的Broker上来保证高可用,因此…...
PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】
今天尝试在pycharm上接入了本地部署的deepseek,实现了AI编程,体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI(CodeGPT) 首先了解不同版本的deepsee…...
腾讯云扩容记录
腾讯云扩容: sudo yum install -y cloud-utils-growpart 安装扩容工具 sudo file -s /dev/vda1 有数据 sudo LC_ALLen_US.UTF-8 growpart /dev/vda 1 sudo resize2fs /dev/vda1 df -Th 完毕 以下是对执行的命令的详细解释以及背后的原理: 1. 安装 cloud…...
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
本地部署大语言模型-DeepSeek
DeepSeek 是国内顶尖 AI 团队「深度求索」开发的多模态大模型,具备数学推理、代码生成等深度能力,堪称"AI界的六边形战士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服务器提供多种计费模式。 DeepSeek-R1-32B配置 配置项 规…...
Windows逆向工程入门之MASM数据结构使用
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 第一章:MASM数据定义体系精要 1.1 基础数据类型全景 1.1.1 整型数据规范 1.1.2 浮点数据编码 1.2 复合数据结构 1.2.1 多维数组定义 1.2.2 复杂结构体 第二章…...
python 之协程笔记
协程 协程的本质是用户态线程,由程序自行控制切换时机,无需操作系统介入。与线程相比,协程的三大核心优势: 资源占用极低:一个协程仅需KB级内存,可轻松创建数万个切换效率惊人:上下文切换在用户…...
使用 REINFORCE 算法强化梯度策略
一、整体概述 此代码利用 REINFORCE 算法(一种基于策略梯度的强化学习算法)来解决 OpenAI Gym 中的 CartPole-v1 环境问题。CartPole-v1 环境的任务是控制一个小车,使连接在小车上的杆子保持平衡。代码通过构建一个神经网络作为策略网络&…...
【C++并发编程实战】第1章 你好,C++的并发世界!
文章目录 1. 何谓并发2. 为什么使用并发?3. 什么时候不使用并发4. C多线程历史5. 第一个并发程序 1. 何谓并发 最简单和最基本的并发,是指两个或更多独立的活动同时发生。计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些…...
【QT线程】子线程阻塞主线程的一次网络api请求案例
阻塞源码赏析 这是最近一次项目遇到的问题,原因是我觉得子线程里俩次请求间隔太短了,会引起服务器屏蔽我的api因此,我故作聪明加多了一个延时函数,欢迎各位鉴赏代码。 // 并行发起双请求 QNetworkRequest liveRequest(liveUrl);…...
DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ 中文版请访问这里…...
【计算机网络入门】初学计算机网络(五)
目录 1.编码&解码、调制&解调 2.常用编码方法 2.1 不归零编码(NRZ) 2.2 归零编码(RZ) 2.3 反向非归零编码(NRZI) 2.4 曼彻斯特编码 2.5 差分曼彻斯特编码 3. 各种编码的特点 4.调制 5.有线传输介质 5.1 双绞线 5.2 同轴电缆 5.3 光…...
unity学习60: 滑动条 和 滚动条 滚动区域
目录 1 滚动条 scrollbar 1.1 创建滚动条 1.2 scrollbar的子物体 1.3 scrollbar的属性 2 滚动视图 scroll View 2.1 创建1个scroll View 2.1.1 实际类比,网页就是一个 scroll view吧 2.2 子物体构成 2.3 核心component : Scroll Rect 3 可视区域 view p…...
【Linux网络-HTTP协议】HTTP基础概念+构建HTTP
代码定位:南毅c/Linux - Gitee.com HTTP协议 介绍 虽然我们说,应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。 在互联网世界中,…...
2025年企业网络安全实战指南:常见漏洞解析与全方位防御策略
2025年企业网络安全实战指南:常见漏洞解析与全方位防御策略 作者: 网络安全专家 日期: 2025-02-27 分类: [网络安全] 标签: [漏洞防护, 信息安全, 企业安全] 引言:漏洞是攻击者的入口,防御是安全的基石 2025年,网络安全威胁持续升级。根据Gartner最新报告,全球企业因漏洞…...
一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙
import os import argparse import pymssql import json import pandas as pd from datetime import datetime from pandas.io.formats.excel import ExcelFormatter import openpyxl# 投注类型映射字典 BET_MAPPING {1: WIN, 2: PLA, 3: QIN, 4: QPL,5: DBL, 6: TCE, 7: QTT,…...
P1123 取数游戏
题目描述 一个 NM 的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻 8 个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少。 输入格式…...
Spock框架:让单元测试更优雅的高效武器
📖 前言:为什么选择Spock? 在软件开发领域,单元测试是保证代码质量的基石。但传统的JUnit/TestNG测试框架在面对复杂测试场景时,往往会显得力不从心。Spock框架作为新一代测试框架的佼佼者,以其独特的BDD&…...
STM32中的ADC
目录 一:什么是ADC 二:ADC的用途 三:STM32F103ZET6的ADC 3.1ADC对应的引脚 3.2ADC时钟 3.3ADC的工作模式 编辑3.4ADC校准 3.5ADC转换结构和实际电压的换算 四:ADC配置步骤 五:两个重要的函数 一:…...
React Portals深度解析:突破组件层级的渲染艺术
React Portals的核心概念、使用场景、实现方法、优缺点以及最佳实践。根据我搜索到的资料,都详细讨论了Portals的使用方法、应用场景和注意事项。比如提供了代码示例,说明如何用createPortal将组件渲染到DOM的其他位置,而则强调了Portals在解决z-index和overflow问题上的优势…...
AWS SQS跨账户访问失败排查指南
引言 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接…...
数据挖掘工程师的技术图谱和学习路径
数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…...
0301 leetcode - 1502.判断是否能形成等差数列、 682.棒球比赛、657.机器人能否返回原点
1502.判断是否能形成等差数列 题目 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false…...
【03】STM32F407 HAL 库框架设计学习
【03】STM32F407 HAL 库框架设计学习 摘要 本文旨在为初学者提供一个关于STM32F407微控制器HAL(Hardware Abstraction Layer)库框架设计的详细学习教程。通过本文,读者将从零开始,逐步掌握STM32F407的基本知识、HAL库的配置步骤…...
React低代码项目:Redux 状态管理
吐司问卷:Redux 状态管理 Date: February 18, 2025 5:37 PM (GMT8) Redux 管理用户信息 命名规范: 以 Info 结尾表示获取Reudx信息,比如 useGetUserInfo.ts 以 data 结尾表示获取服务端信息,比如 useLoadQuestionData 采用 Re…...
Vue核心知识:动态路由实现完整方案
在Vue中实现动态路由,并结合后端接口和数据库表设计,是一个复杂的项目,需要多个技术栈和步骤的配合。以下将详细描述整个实现过程,包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…...