(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
前言:
今天有两个项目,分别为:
串口接收:

串口发送:

如上图将文件放在Keli5 中即可,然后烧录在单片机中就行了

烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频:
【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.bilibili.com/video/BV1Mb411e7re?p=2&vd_source=ada7b122ae16cc583b4add52ad89fd5e
串口接收源代码:
头文件要记得宏定义和重定义,避免重复调用:
#ifndef _Timer0_h_//名字根据文件名定义即可
#define _Timer0_h_//声明函数……#endif
main.c
//接收程序
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"unsigned char Sec;void main(){UATE_Init();//初始化while(1){UATE_SendByte(Sec);//发送字节Sec++;//每秒递增Delay(1000);}
}
UART.c
#include <STC89C5xRC.H>//初始化串口
//void UART_Init(){
// SCON=0x40;//0100 0000
// PCON=0;
// //&只有在两个位都为1时结果位才是1,而|只要有一个位为1结果位就是1
// TMOD &= 0x0F; //设置定时器模式,高四位清0,低四位不变
// TMOD |= 0x20; //设置定时器模式,高四位设计成0010,低四位不变,定时器1,模式2
// TL0 = 0x66; //设置定时初值
// TH0 = 0xFC; //设置定时初值
// TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
// ET0=1;//允许中断
// EA=1;//允许总中断
// PT0=0;//低优先级
//}
void UATE_Init() //4800bps@11.0592MHz
{PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率
// AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFA; //设定定时初值TH1 = 0xFA; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1
}//发送字节(只发送,不接受)
void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位
}
UART.h
//UART.h#ifndef __UART_H__
#define __UART_H__void UATE_Init();
void UATE_SendByte(unsigned char Byte);
#endif
Delay.c
//Delay.c#include <STC89C5xRC.H>
#include <INTRINS.H>//延时函数
void Delay(unsigned int xms) //@11.0592MHz
{unsigned char i, j;while(xms){i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}
Delay.h
//Delay.h#ifndef __Delay_H__
#define __Delay_H__//延时函数头文件
void Delay(unsigned int xms);
#endif
串口发送源代码:
头文件要记得宏定义和重定义,避免重复调用:
#ifndef _Timer0_h_//名字根据文件名定义即可
#define _Timer0_h_//声明函数……#endif
main.c
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"void main(){UATE_Init();//初始化while(1){}
}
//中断函数
void UART_Routine() interrupt 4{if(RI==1){//RI等于1表示可以中断P2=~SBUF;//发送数据UATE_SendByte(SBUF);//接收数据RI=0;//软件复位}
}
UART.c
#include <STC89C5xRC.H>//初始化串口
//void UART_Init(){
// SCON=0x40;//0100 0000
// PCON=0;
// //&只有在两个位都为1时结果位才是1,而|只要有一个位为1结果位就是1
// TMOD &= 0x0F; //设置定时器模式,高四位清0,低四位不变
// TMOD |= 0x20; //设置定时器模式,高四位设计成0010,低四位不变,定时器1,模式2
// TL0 = 0x66; //设置定时初值
// TH0 = 0xFC; //设置定时初值
// TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
// ET0=1;//允许中断
// EA=1;//允许总中断
// PT0=0;//低优先级
//}
void UATE_Init() //4800bps@11.0592MHz
{PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率
// AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFA; //设定定时初值TH1 = 0xFA; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1EA=1;//启动总中断ES=1;//启动串口中断}//发送字节(只发送,不接受)
void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位
}串口中断模版
中断函数
//void UART_Routine() interrupt 4{
// if(RI==1){//RI等于1表示可以中断
// P2=~SBUF;//发送数据
// UATE_SendByte(SBUF);//接收数据
// RI=0;//软件复位
// }
//}
UART.h
//UART.h#ifndef __UART_H__
#define __UART_H__void UATE_Init();
void UATE_SendByte(unsigned char Byte);
#endif
Delay.c
//Delay.c#include <STC89C5xRC.H>
#include <INTRINS.H>//延时函数
void Delay(unsigned int xms) //@11.0592MHz
{unsigned char i, j;while(xms){i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}
Delay.h
//Delay.h#ifndef __Delay_H__
#define __Delay_H__//延时函数头文件
void Delay(unsigned int xms);
#endif
注意两个项目的代码有部分不同!!!!
第一个项目是串口接收:
- 主程序代码:
#include <STC89C5xRC.H> #include "Delay.h" #include "UART.h"unsigned char Sec;void main(){UATE_Init();//初始化while(1){UATE_SendByte(Sec);//发送字节Sec++;//每秒递增Delay(1000);} }注意:接收是串口向电脑发送数据,发送一个16进制,每秒增加,电脑接收。而且发送是没有中断的!!!
UART.c代码:
void UATE_Init() //4800bps@11.0592MHz {PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率 // AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T // AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFA; //设定定时初值TH1 = 0xFA; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1 }//发送字节(只发送,不接受) void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位 }没有中断,因此ET1=0,禁止中断。
运行:
- 单片机没有任何变化,电脑端STC-ISP的串口助手接收缓冲区会有逐渐增加的数据。
串口接收数据
第二个项目是串口发送:
- 主程序代码:
#include <STC89C5xRC.H> #include "Delay.h" #include "UART.h"void main(){UATE_Init();//初始化while(1){} } //中断函数 void UART_Routine() interrupt 4{if(RI==1){//RI等于1表示可以中断P2=~SBUF;//发送数据UATE_SendByte(SBUF);//接收数据RI=0;//软件复位} }
注意:发送是电脑向串口发送数据,利用中断来控制LED灯(P2),RI=1打开中断。UART.c代码:
void UATE_Init() //4800bps@11.0592MHz {PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率 // AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T // AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFA; //设定定时初值TH1 = 0xFA; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1EA=1;//启动总中断ES=1;//启动串口中断}//发送字节(只发送,不接受) void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位 }有中断,因此EA,ES启动中断。
运行:
- 发送对应的16进制,用LED灯来检测,如发送0f,就是0000 1111,也就是后四个灯亮,单片机对应的灯会亮。
串口发送数据
代码解析与教程:
Dealy模块
- 包含源代码与头文件,不需要知道怎么实现的会用即可,后续使用,直接将头文件和源代码拿过来用即可;
xms是定义的毫秒,1000毫秒就是1秒;模版生成的是1毫秒的,因此xms等于1000
UART模块
- 包含源代码与头文件,需要知道怎么实现,会用
- 51单片机串口通讯十分重要,要理解怎么用,要知道原理是什么,要结合原理图来分析怎么做,先看代码
#include <STC89C5xRC.H>//初始化串口 //void UART_Init(){ // SCON=0x40;//0100 0000 // PCON=0; // //&只有在两个位都为1时结果位才是1,而|只要有一个位为1结果位就是1 // TMOD &= 0x0F; //设置定时器模式,高四位清0,低四位不变 // TMOD |= 0x20; //设置定时器模式,高四位设计成0010,低四位不变,定时器1,模式2 // TL0 = 0x66; //设置定时初值 // TH0 = 0xFC; //设置定时初值 // TF0 = 0; //清除TF0标志 // TR0 = 1; //定时器0开始计时 // ET0=1;//允许中断 // EA=1;//允许总中断 // PT0=0;//低优先级 //} void UATE_Init() //4800bps@11.0592MHz {PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率 // AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T // AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFA; //设定定时初值TH1 = 0xFA; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1 }//发送字节(只发送,不接受) void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位 }最上面的代码:主要是理解SCON和PCON,其他的就是定时器/计数器,中断的内容
Timer0模块
- 包含源代码与头文件,需要知道怎么实现,会用
- 51单片机的定时器和计数器十分重要,要理解怎么用,要知道原理是什么,要结合原理图来分析怎么做,先看代码
#include <STC89C5xRC.H>//void Timer0_Init() //{ // TF0=0;TR0=1;//TCON,寄存器 // //TMOD=0x01;//0000 0001,寄存器 // TMOD=TMOD&0xF0;//把TMOD的低四位清零,高四位不变,方便使用两个定时器 // TMOD=TMOD&0x01;//把TMOD的最低位置1,高四位不变,方便使用两个定时器 // TH0=64535/256;//高电位,寄存器,1毫秒 // TL0=64535%256;//低电位,寄存器,1毫秒 // ET0=1;EA=1;PT0=0;//打开中断开关 // //} //定时器0初始化函数 void Timer0_Init() //1毫秒@11.0592MHz { // AUXR &= 0x7F; //定时器时钟12T模式TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0=1;//允许中断EA=1;//允许总中断PT0=0;//低优先级 }中断程序函数 //中断函数模版 //void Timer0_Routine() interrupt 1 //{ // static unsigned int T0Count; // TL0 = 0x66; //设置定时初值 // TH0 = 0xFC; //设置定时初值 // T0Count++; // if(T0Count>=1000){ // T0Count=0; // //下面是代码区 // } //}
- 最上面注释掉的代码是要求理解的;中间的代码是STC-ISP软件生成的;最下面的代码是中断函数模版,拿到main.c中可直接使用,但是也要了解原理:
定时器/计数器、中断教程(重点!!!!)
- 首先,要理解原理,会认原理图:
(本篇均是我自己理解的,只是帮助大家理解,若像深学深究,请去自行找资源,如有不对,希望大家指出)
先看官方解释:
- 红色部分是定时器,作用是自己设定一个最大值,让计数器达到时,完成什么什么,比如执行中断
- 黄色部分是计数器,作用是自己设定,让其变化,比如+1,毫秒,微妙,完成时继续怎么怎
- 蓝色部分是中断器,中断当前执行,执行自己设定的东西,中断这部分可以嵌套,像if函数一样,低优先级让高优先级
他们三者的关系非常微妙,仅仅相连,相辅相成:
- 定时器就是设定一个时间,计数器开始计时,到点了中断器开始执行;举个例子:你订一个10.00的闹钟(定时器)提醒你起床,时间一点一点的过去(计数器),10.00的时候闹钟提醒你(定时器),随后你开始起床(中断器);那么他们是怎么实现的呢
定时器/计数器(模式一)
- 先看原理图:
- 相关寄存器:
- 官方解释
- 模式一官方解释
- 下面开始来解释我的理解(再看原理图):
- 序号1是非门:反向输出,例如:GATE是1,输出0,是0,输入1。
- 序号2是或门:符号为梯形(或弧形缺口),逻辑上满足 “有 1 出 1,全 0 出 0”。
- 序号3是与门:符号为矩形缺口,逻辑上满足 “全 1 出 1,有 0 出 0”。
1,2,3序号均是TMOD里的,请看原理图:![]()
- 代码TMOD=0x01,是16进制,转化为二进制为0000 0001,前(高)四位对应着定时器1;后(低)四位对应着定时器0;本代码使用的是定时器0, 0001分别对应GATE,C/T,M1,M0,由上面的官方解释可得,M1=0,M0=1时,就是使用并启动本寄存器。
但是这样定义有弊端,也就是定时器1和定时器0不能一起使用,因次,使用下面的代码:TMOD &=0xF0,也就是TMOD = TMOD & 0xF0(1111 0000)。看不懂没关系,举个例子:1010 0101 & 1111 0000 = 1010 0000,也就是有0出0;
1010 0101 | 1111 0000 = 1111 0101,也就是有1出1;因此使用代码:就可以定义定时器0;
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式- 因此,当GATE=0时,通过序号1,输出1;然后通过序号2,输出1;因此,只需要将TR0设定成1,输出就是1,就可以启动寄存器了。
- 序号4是高电位和低电位寄存器:用来设置定时初值,如图:
![]()
- 先解释上面的代码,可帮助理解,下面的代码可以不理解(后续可生成):TH0和TL0,最大位就是65535,为了分开储存,用TH0和TL0分别储存,例如:现在有一个数123,但是一个盒子只能装进2位数,因此分成123/100=1和123%100=23储存,同理身为16进制,就要用256来做除数;代码中设定为64535的目的是因为1000毫秒就是1秒,65535-64535=1000,用来表示1秒,计时器每次加1秒。
- 序号7.8(图中忘记标了(TR0))是TCON(定时器控制)寄存器:TF0=0时,可以理解成初始化;TR0=1时,表示允许计时;反之两个就是反义理解
- 序号5.6是TMOD(定时器模式)寄存器:用来控制定时器和计数器的模式,本篇只讲用的多的模式一
中断器
- 先看原理图:
这里我们定义好定时器0后,TF0=1,ET0=1,打开中断,随后PT0=0,接入低级优先:理解上面的东西后,再看中断函数:
运用静态局部变量T0Count,来表示定时区间,达到1000毫秒(1秒)后重新执行该函数
P20行代码是代码区,也就是放你想每1秒就重复执行的代码。
串口通讯教程(方式1)(接收和发送)(重点!!!!!!)
主要是理解SCON和PCON,其他的就是定时器/计数器,中断的内容
SCON(方式1)
SCON先看官方解释:
SCON解释:
如图:SCON正好是个16进制,8个变量;我们只用方式1;根据官方解释来看,SM0=0,SM1=1,就是方式1;SM2,TB8,RB8不是方式1的制定为0;REN=1是启动串口接收;TI,RI默认为0,表示串口通讯(中断)允许开启(后续可变);PCON
PCON官方解释:
- PCON解释:
SBUF就是接收数据的,如图:
根据我标的图来看,你需要将数据写进SBUF里,然后通过设置定时器初值波特率倍率,然后从发送端到接收端。//发送字节(只发送,不接受) void UATE_SendByte(unsigned char Byte){SBUF=Byte;//传入字节数据while(TI==0);//发送循环,发送完TI=1;TI=0;//软件复位 }其中TI就是SCON中的其中一个变量,发送的时候TI=0,发送完TI=1,因此要自定义软件复位。EA,ES分别置于1,作用如下:
EA=1;//启动总中断ES=1;//启动串口中断下面来看:
ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1TR1是定时器的教程(放在下面了),作用是打开定时器1
ET1是中断的内容作用是禁止定时器1中断,如图:
现在来看中断函数:
RI=0是接收数据用的,当接收时RI=1,接收完毕后进行软件复位。
LED教程:
- 先看原理图:
LED是高电位,设定为0就是通电
- P2就是16进制的LED灯总控制,如:0xFF=1111 1111,就是全关,例如代码中的:
P2=0xFE,就是1111 1110,就是L1亮,左移一位就是1111 1101,就是L2亮,其他同理,配合中断函数,就可以每秒移动一次
举一反三(新项目):
在第二个项目的基础上,改一下main.c文件
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"void main(){UATE_Init();//初始化UATE_SendByte(SBUF);//发送字节(新增)while(1){}
}
//中断函数
void UART_Routine() interrupt 4{if(RI==1){//RI等于1表示可以中断P2=~SBUF;//发送数据UATE_SendByte(SBUF);//接收数据RI=0;//软件复位}
}
就可以做到发送缓冲区发送后, 接收缓冲区也显示:

注意选择同样的模式(文本模式或者HEX模式) ,支持的文本如下:

效果视频:
串口的接收和发送
注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!
相关文章:
(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
前言: 今天有两个项目,分别为: 串口接收: 串口发送: 如上图将文件放在Keli5 中即可,然后烧录在单片机中就行了 烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频: 【51单片机入门…...
redis 延迟双删
Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略,通常在高并发场景下使用。以下是其核心内容: 1. 问题背景 当更新数据库时,如果未及时删除或更新缓存,可能导致后续读请求仍从缓存中读取旧数据,造成数…...
大语言模型中的幻觉现象深度解析
一、幻觉的定义及出现的原因 1. 基本定义 幻觉(Hallucination) 指大语言模型在自然语言处理过程中产生的与客观事实或既定输入相悖的响应,主要表现为信息失准与逻辑矛盾。 2. 幻觉类型与机制 2.1 事实性幻觉 定义:生成内容与可验证…...
App的欢迎页,以及启动黑屏的问题
1、在styles.xml文件中配置:<style name"WelcomePageStyle" parent"style/Theme.AppCompat.Light.NoActionBar"><item name"android:windowBackground">mipmap/icon_welcome_bg</item><item name"android:…...
各种颜色空间的相互转换方法(RGB,HSV,CMYK,灰度)
各个颜色空间原始值的取值范围: RGB:[0,255] H:[0,360],S:[0,1],V:[0,1] CMYK:[0,1] 灰度:[0,255] 以下给出各个颜色空间转换的伪代码。 RGB转HSV rR/255 gG/255 b…...
详解如何从零用 Python复现类似 GPT-4o 的多模态模型
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
大模型训练关键两步
大模型的核心原理是基于深度学习,通过多层神经网络进行数据建模和特征提取。目前大部分的大模型采用的是Transformer架构,它采用了自注意力机制,能够处理长距离依赖关系,从而更好地捕捉文本的语义和上下文信息。大模型还结合了预训…...
当算力遇上脑科学:破解意识上传的算力密码
目录 一、人脑复刻面临的三座大山 二、自然科学之外的三大麻烦 三、未来发展的三种可能结局 没有人的文明还是文明吗? 最近,全球首例"数字永生"官司闹得沸沸扬扬——美国富豪家属指控科技公司造假,而马斯克却宣布脑机接口芯片升级到第9代。科学家们算了一…...
前端面试宝典---创建对象的配置
Object.create 对整个对象的多个属性值进行配置 创建对象 不可更改属性值 // 创建对象 不可更改属性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…...
【设计模式】创建型 -- 单例模式 (c++实现)
文章目录 单例模式使用场景c实现静态局部变量饿汉式(线程安全)懒汉式(线程安全)懒汉式(线程安全) 智能指针懒汉式(线程安全)智能指针call_once懒汉式(线程安全)智能指针call_onceCRTP 单例模式 单例模式是…...
共享内存(与消息队列相似)
目录 共享内存概述 共享内存函数 (1)shmget函数 功能概述 函数原型 参数解释 返回值 示例 结果 (2)shmat函数 功能概述 函数原型 参数解释 返回值 (3)shmdt函数 功能概述 函数原型 参数解释…...
2025年常见渗透测试面试题- PHP考察(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 PHP考察 php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘&am…...
【C++进阶】关联容器:multimap类型
目录 一、multimap 基础概念与底层实现 1.1 定义与核心特性 1.2 底层数据结构 1.3 类模板定义 1.4 与其他容器的对比 二、multimap 核心操作详解 2.1 定义与初始化 2.2 插入元素 2.3 查找元素 2.4 删除元素 2.5 遍历元素 三、性能分析与适用场景 3.1 时间复杂度分…...
远程管理命令:关机和重启
关机/重启 序号命令对应英文作用01shutdown 选项 时间shutdown关机 / 重新启动 一、shutdown shutdown 命令可以安全关闭 或者 重新启动系统。 选项含义-r重新启动 提示: 不指定选项和参数,默认表示 1 分钟之后 关闭电脑远程维护服务器时࿰…...
塑造现代互联网的力量:Berkeley在网络领域的影响与贡献
引言 “Berkeley” 这个名字在计算机网络和互联网领域中具有举足轻重的地位,许多关键的技术、协议和工具都与其紧密相关。它与 加利福尼亚大学伯克利分校(UC Berkeley) 密切相关,该校在计算机科学与网络研究中做出了许多开创性的…...
【MySQL】001.MySQL安装
文章目录 一. MySQL在Ubuntu 20.04 环境安装1.1 更新软件包列表1.2 安装MySQL服务器1.3 配置安全设置1.4 检查mysql server是否正在运行1.5 进行连接1.6 查询自带的数据库 二. 配置文件的修改三. MySQL连接TCP/IP时的登陆问题四. MySQL中的命令 一. MySQL在Ubuntu 20.04 环境安…...
vue 入门:组件事件
文章目录 vue介绍vue 入门简单示例自定义组件事件 vue介绍 vue2 官网 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层。 vue 入门 Vue.js 的核心是一个允许采用简洁的模板语…...
数据质量问题中,数据及时性怎么保证?如何有深度体系化回答!
数据治理,数据质量这快是中大厂,高阶大数据开发面试必备技能,企业基于大数据底座去做数仓,那么首先需要保障的就是数据质量。 数据质量的重要性在现代企业中变得越发突出。以下是数据质量的几个关键方面,说明其对企业…...
数据可视化 —— 折线图应用(大全)
一、导入需要的库 # Matplotlib 是 Python 最常用的绘图库,pyplot 提供了类似 MATLAB 的绘图接口 import matplotlib.pyplot as plt import numpy as np import pandas as pd 二、常用的库函数 plt.plot(x轴,y轴):plot()是画折线图的函数。 plt.xlabe…...
什么是中性线、零线、地线,三相四线制如何入户用电
在变压器三相电侧,按照星形连接法,有一个中心点,这根线引出来的线接不接地:不接地就是中性线,接地就是零线 下面就是没有接地:中性线 接地了以后就可以叫做零线了 三相电在高压输电的时候是没有零线的&a…...
自启动应用程序配置之etc/xdg/autostart
在 Linux 系统中,/etc/xdg/autostart/ 目录用于存放系统级的自动启动项(.desktop 文件)。这些文件遵循 FreeDesktop.org 的规范,定义了应用程序在用户登录时自动启动的规则。 系统级 vs 用户级自动启动 系统级&a…...
在 Linux 系统(ubuntu/kylin)上安装 Docker
在 Linux 系统上安装 Docker 的步骤如下(以 Ubuntu/Debian 和 CentOS/RHEL 为例): 请用./check-config config检查内核是否支持,necessarily 必须全部enable。 以下是脚本自行复制运行: #!/usr/bin/env sh set -eEXITCODE=0# bits of this were adapted from lxc-checkco…...
【含文档+PPT+源码】基于Android家政服务系统的开发与实现
介绍视频: 课程简介: 本课程演示的是一款基于Android家政服务系统的开发与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.…...
SpringBoot + Netty + Vue + WebSocket实现在线聊天
最近想学学WebSocket做一个实时通讯的练手项目 主要用到的技术栈是WebSocket Netty Vue Pinia MySQL SpringBoot,实现一个持久化数据,单一群聊,支持多用户的聊天界面 下面是实现的过程 后端 SpringBoot启动的时候会占用一个端口ÿ…...
配置mac mini M4 的一些软件
最近更换了 mac mini M4 ,想要重新下载配置软件 ,记录一下。 Homebrew是什么? homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理,而不用关心各种…...
Java——抽象方法抽象类 接口 详解及综合案例
1.抽象方法抽象类 介绍 抽象方法: 将共性的行为(方法)抽取到父类之后, 由于每一个子类执行的内容是不一样, 所以,在父类中不能确定具体的方法体。 该方法就可以定义为抽象方法。 抽象类: 如果一个类中存在抽象方法,那么该类就必须…...
【计网】一二章习题
1. (单选题, 3 分) 假设主机A和B之间的链路带宽为100Mbps,主机A的网卡速率为1Gbps,主机B的网卡速率为10Mbps,主机A给主机B发送数据的最高理论速率为( )。 A. 100Mbps B. 1Gbps C. 1Mbps D. 10Mbps 正确答案 D 发…...
苹果开发者账号推送证书配置详细指南
苹果开发者账号推送证书配置详细指南 一、准备工作 苹果开发者账号 确保拥有有效的苹果开发者账号(个人/公司账号),年费已缴纳。 App ID配置 登录 Apple开发者中心。进入 Certificates, Identifiers & Profiles → Identifiers。创建或…...
3. 列表操作
【问题描述】对于一个列表,在保持非零元素相对顺序的同时,将元素中所有的数字0移动到末尾。…...
【软考-高级】【信息系统项目管理师】【论文基础】进度管理过程输入输出及工具技术的使用方法
定义 项目进度管理是为了保证项目按时完成,对项目中所需的各个过程进行管理的过程,包括规划进度、定义活动、活动优先级排序、活动持续时间、制定进度计划和控制进度。 管理基础 制定进度计划的一般步骤 选择进度计划方法(如关键路径法&a…...
























