基于STM32通过TM1637驱动4位数码管详细解析(可直接移植使用)

目录

1.  单位数码管概述

2.  对应编码

2.1  共阳数码管

2.2  共阴数码管

3.  TM1637驱动数码管

3.1  工作原理

3.1.1  读键扫数据

3.1.2  显示器寄存器地址和显示模式

3.2  时序

3.2.1  指令数据传输过程(读案件数据时序)

3.2.2  写SRAM数据地址自动加1模式

3.2.3  写SRAM数据固定地址模式

3.3  数据指令

3.3.1  数据命令设置

3.3.2  显示控制命令设置

3.3.3  地址命令设置

3.4  程序流程图

3.4.1  采用地址自动加一模式的程序流程图

3.4.2  采用固定地址的程序设计流程图

4.  代码编写

4.1  准备配置  

4.1.1  C语言调用文件

4.1.2  宏定义

4.1.3  段码表

4.1.4  数码管地址表

 4.1.5  引脚初始化

4.1.6  电平配置 

4.2  IIC相关配置

4.2.1  起始信号

4.2.2  终止信号

4.2.3  接收应答

4.2.4  发送一个字节

4.3  TM1637相关配置

4.3.1  发送写显存的数据命令

4.3.2  向指定地址写入数据

4.3.3  在四个数码管上显示数据

4.3.4  设置亮度

4.3.5  显示开关

4.3.6  初始化配置

4.3.7  显示配置

4.3.8  TM1637.h文件配置

4.4  主函数


1.  单位数码管概述

        数码管的内部基本单元是发光二极管,数码管是发光器件之一,内部由七个条形发光二极管(a、b、c、d、e、f、g)和一个圆点发光二极管(dp)构成。

        按照数码管的公共接线不同,数码管又可分类为共阴极数码管和共阳极数码管两种,共阴极数码管的公共端接地,而共阳极数码管的公共端接电源。

2.  对应编码

2.1  共阳数码管

        数码管中所有的正极连接在一起,这个端口被称之为位选端口,其余的数码管引脚a-h都为段选端口2、共阳极数码管的编码(CA):

u8 code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0-F

2.2  共阴数码管

        是数码管所有的负极连接在一起,这个端口被称之为位选端口,其余的数码管引脚a-h都为段选端口4、共阴极数码管的编码(CC/CK):

u8 code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F

3.  TM1637驱动数码管

        TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良,质量可靠。主要应用于电磁炉、 微波炉及小家电产品的显示屏驱动。采用DIP/SOP20的封装形式。

3.1  工作原理

        微处理器的数据通过两线总线接口和 TM1637 通信,在输入数据时当 CLK 是高电平时,DIO 上的信号必须保持不变;只有 CLK 上的时钟信号为低电平时,DIO 上的信号才能改变。数据输入的开始条件是 CLK 为高电平时,DIO 由高变低;结束条件是 CLK 为高时,DIO 由低电平变为高电平。 
        TM1637 的数据传输带有应答信号 ACK,当传输数据正确时,会在第八个时钟的下降沿,芯片内部会产生一个应答信号 ACK 将 DIO 管脚拉低,在第九个时钟结束之后释放 DIO 口线。

符号管脚名称管脚号说明
DIO数据输入/输出17串行数据输入/输出,输入数据在 SLCK 的低电平变化,在SCLK 的高电平被传输,每传输一个字节芯片内部都将在第八个时钟下降沿产生一个 ACK
CLK时钟输入18在上升沿输入/输出数据
K1~K2键扫数据输入19~20输入该脚的数据在显示周期结束后被锁存
SG1~SG8输出(段)2~9段输出(也用作键扫描),N 管开漏输出
GRID6~GRID1输出(位)10~15位输出,P 管开漏输出
VDD逻辑电源165V±10%
GND逻辑地1接地

3.1.1  读键扫数据

        在有按键按下时,读键数据如下:

SG1SG2SG3SG4SG5SG6SG7SG8
K11110_11110110_11111010_11110010_11111100_11110100_11111000_11110000_1111
K21111_01110111_01111011_01110011_01111101_01110101_01111001_01110001_0111

注意:在无按键按下时,读键数据为:1111_1111,低位在前,高位在后。

3.1.2  显示器寄存器地址和显示模式

        该寄存器存储通过串行接口从外部器件传送到TM1637 的数据,地址00H-05H共6个字节单元,分别与芯片SGE和GRID管脚所接的LED灯对应,分配如下图: 
        写LED显示数据的时候,按照从显示地址低位到高位,从数据字节低位到高位操作。

SEG1SEG2SEG3SEG4SEG5SEG6SEG7SEG8
xxHL(第四位)xxHU(高四位)
B0B1B2B3B4B5B6B7
00HL00HUGRID1
01HL01HUGRID2
02HL02HUGRID3
03HL03HUGRID4
04HL04HUGRID5
05HL05HUGRID6

3.2  时序

3.2.1  指令数据传输过程(读案件数据时序)

注意:先读低位在读高位

3.2.2  写SRAM数据地址自动加1模式

Command1:设置数据

Command2:设置地址

Data1~N:传输数据

Command3:控制显示

3.2.3  写SRAM数据固定地址模式

Command1:设置数据

Command2:设置地址

Data1~N:传输数据

Command3:控制显示

3.3  数据指令

        指令用来设置显示模式和LED 驱动器的状态。 
        在CLK下降沿后由DIO输入的第一个字节作为一条指令。经过译码,取最高B7、B6两位比特位以区别不同的指令。

B7B6指令
01数据命令设置
10显示控制命令设置
11地址命令设置

        如果在指令或数据传输时发送STOP命令,串行通讯被初始化,并且正在传送的指令或数据无效(之前传送的指令或数据保持有效)。

3.3.1  数据命令设置

3.3.2  显示控制命令设置

3.3.3  地址命令设置

3.4  程序流程图

3.4.1  采用地址自动加一模式的程序流程图

3.4.2  采用固定地址的程序设计流程图

4.  代码编写

        开始前可以先了解一下IIC的用法,以及相关时序:

STM32F1之I2C通信_stm32f1 i2c-CSDN博客

STM32F1之I2C通信·软件I2C代码编写-CSDN博客

        TM1637采用的是IIC通信,但是又不是标准的IIC通信,标准的IIC协议是从高位到低位传输的,即MSB方式,但是TM1637介绍也介绍到工作原理时曾介绍到,其是从低位到高位进行数据传输。

4.1  准备配置  

4.1.1  C语言调用文件

        STM32的编写,有些需要调用C语言的头文件才能正常使用:

#include <string.h>//提供了一些用于处理字符串和内存块的函数。
#include <stdint.h>//定义了具有确定大小的整数类型。
#include <stdbool.h>//提供布尔类型支持。

4.1.2  宏定义

        这个宏定义了一个名为 TUBE_DISPLAY_NULL 的常量,值为 26。通常情况下,这个值可能用于表示一个不显示的状态或占位符,在显示器的控制代码中用来指示数字管不应显示任何有效数字:

#define TUBE_DISPLAY_NULL							26

        这个宏定义了一个名为 TUBE_DISPLAY_DECIMAL_POINT_OFFSET 的常量,值为 16。这个值可能用于表示小数点在显示器中的位置偏移量。例如,在一个七段显示器上,使用这个偏移量可以帮助确定小数点的位置,以便正确显示浮点数或需要小数点的数值:

#define TUBE_DISPLAY_DECIMAL_PIONT_OFFSET			16

4.1.3  段码表

        用于存储七段显示器中每个数字和字母的段码:

const uint8_t u8NumTab[] = 
{//0,	1,	 2,	  3,	 4,	  5,	 6,   7,   8,   9,   A,   b,  C,    d,   E,   F,  	0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//0., 1.,	 2.,	3.,	 4.,  5.,   6.,  7.,  8.,  9. Null0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00
};

4.1.4  数码管地址表

//最左至最右数码管 ,依次为0-3号,对应的显示寄存器地址
const uint8_t u8TubeAddrTab[] = 
{0xC0,0xC1,0xC2,0xC3
};

 4.1.5  引脚初始化

        由于这里我们使用的软件I2C不受引脚限制,随便找两个普通的GPIO口就可以使用,首先我们随机找两个引脚对其进行初始化:

void TM1637_Init(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);					//将PB10和PB11引脚初始化为开漏输出/*设置默认电平*/GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);			//设置PB10和PB11引脚初始化后默认为高电平(释放总线状态)
}

4.1.6  电平配置 

/*** 函    数:I2C写SCL引脚电平* 参    数:BitValue 协议层传入的当前需要写入SCL的电平,范围0~1* 返 回 值:无* 注意事项:此函数需要用户实现内容,当BitValue为0时,需要置SCL为低电平,当BitValue为1时,需要置SCL为高电平*/
void TM1637_W_SCL(uint8_t BitValue)
{GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);		//根据BitValue,设置SCL引脚的电平Delay_us(10);												//延时10us,防止时序频率超过要求
}/*** 函    数:I2C写SDA引脚电平* 参    数:BitValue 协议层传入的当前需要写入SDA的电平,范围0~0xFF* 返 回 值:无* 注意事项:此函数需要用户实现内容,当BitValue为0时,需要置SDA为低电平,当BitValue非0时,需要置SDA为高电平*/
void TM1637_W_SDA(uint8_t BitValue)
{GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);		//根据BitValue,设置SDA引脚的电平,BitValue要实现非0即1的特性Delay_us(10);												//延时10us,防止时序频率超过要求
}/*** 函    数:I2C读SDA引脚电平* 参    数:无* 返 回 值:协议层需要得到的当前SDA的电平,范围0~1* 注意事项:此函数需要用户实现内容,当前SDA为低电平时,返回0,当前SDA为高电平时,返回1*/
uint8_t TM1637_R_SDA(void)
{uint8_t BitValue;BitValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);		//读取SDA电平Delay_us(10);												//延时10us,防止时序频率超过要求return BitValue;											//返回SDA电平
}

4.2  IIC相关配置

4.2.1  起始信号

          起始条件:SCL高电平期间,SDA从高电平切换到低电平。

        根据上图虚线框柱的地方进行配置: 

void TM1637_Start(void)
{TM1637_W_SDA(1);	//释放SDA,确保SDA为高电平TM1637_W_SCL(1);	//释放SCL,确保SCL为高电平TM1637_W_SDA(0);	//在SCL高电平期间,拉低SDA,产生起始信号TM1637_W_SCL(0);	//起始后把SCL也拉低,即为了占用总线,也为了方便总线时序的拼接
}

4.2.2  终止信号

         终止条件:SCL高电平期间,SDA从低电平切换到高电平。

        同理,根据上图虚线框柱的地方进行配置:

void  TM1637_Stop(void)
{TM1637_W_SCL(0);  //拉低SCL,确保SCL为低电平TM1637_W_SDA(0);	//拉低SDA,确保SDA为低电平TM1637_W_SCL(1);	//释放SCL,使SCL呈现高电平TM1637_W_SDA(1);	//在SCL高电平期间,释放SDA,产生终止信号
}

4.2.3  接收应答

        接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

//应答信号
uint8_t TM1637_ReceiveAck(void)
{uint8_t AckBit;							//定义应答位变量TM1637_W_SDA(1);							//接收前,主机先确保释放SDA,避免干扰从机的数据发送TM1637_W_SCL(1);							//释放SCL,主机机在SCL高电平期间读取SDAAckBit = TM1637_R_SDA();					//将应答位存储到变量里TM1637_W_SCL(0);							//拉低SCL,开始下一个时序模块return AckBit;							//返回定义应答位变量
}

4.2.4  发送一个字节

        发送一个字节: SCL低电平期间,主机将数据位依次放到SDA线上(高位先行) ,然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

        主机首先在SCL低电平,主机如果想发送0,就拉低SDA到低电平,主机如果想发送1,就放手,SDA回弹到高电平,在SCL低电平期间允许改变SDA的电平,如图黄色部分:

        但是这里需要注意标准的IIC协议从高位到低位传输的,但是TM1637从低位到高位进行数据传输,因此:

// 向 TM1637 发送一个字节数据
void TM1637_Write_Byte(uint8_t data)
{uint8_t i;TM1637_W_SCL(0); // 设置时钟线 SCL 为低电平,准备开始发送数据// 循环发送 8 位数据for (i = 0; i < 8; i++){// 根据数据的最低位决定数据线 SDA 的状态if(data & 0x01){TM1637_W_SDA(1); // 发送 1}else{TM1637_W_SDA(0); // 发送 0}    data = data >> 1; // 右移数据,处理下一个位TM1637_W_SCL(1); // 拉高时钟线,表示位数据有效TM1637_W_SCL(0); // 拉低时钟线,准备发送下一个位}
}

4.3  TM1637相关配置

        为了方便地对任意一个数码管写入数据,我们采用固定地址的方式,其流程如下:

        相关时序:

4.3.1  发送写显存的数据命令

// 向 TM1637 数码管写入命令
void TM1637_WriteCmd(uint8_t u8Cmd)
{// 开始信号,表示通信开始TM1637_Start();// 发送命令字节TM1637_Write_Byte(u8Cmd);// 接收确认应答TM1637_ReceiveAck();// 停止信号,表示通信结束TM1637_Stop();
}

4.3.2  向指定地址写入数据

// 向指定地址写入数据
// u8Addr: 要写入的地址
// u8Data: 要写入的数据
void TM1637_WriteData(uint8_t u8Addr, uint8_t u8Data)
{// 开始信号,表示通信开始TM1637_Start();// 发送地址字节TM1637_Write_Byte(u8Addr);// 接收确认应答TM1637_ReceiveAck();// 发送数据字节TM1637_Write_Byte(u8Data);// 接收确认应答TM1637_ReceiveAck();// 停止信号,表示通信结束TM1637_Stop();
}

4.3.3  在四个数码管上显示数据

// 在四个数码管上显示数据
// sData: 显示数据结构体,包含四个数码管的显示值
void TM1637_TubeDisplay(TM1637Tube_ts sData)
{uint8_t temp[4], i;// 根据 sData 中的值,从 u8NumTab 数组中获取对应的段码temp[0] = u8NumTab[sData.tube0]; // 获取第一个数码管的段码temp[1] = u8NumTab[sData.tube1]; // 获取第二个数码管的段码temp[2] = u8NumTab[sData.tube2]; // 获取第三个数码管的段码temp[3] = u8NumTab[sData.tube3]; // 获取第四个数码管的段码// 遍历四个数码管,逐个写入数据for (i = 0; i < 4; i++){// 向每个数码管的地址写入对应的段码TM1637_WriteData(u8TubeAddrTab[i], temp[i]);}
}

        结构体TM1637Tube_ts,该结构体存放到.h中,若是存放到.c文件需要将其放到头文件后面,防止TM1637_TubeDisplay()函数搜索不到:

typedef struct 
{uint8_t tube0;uint8_t tube1;uint8_t tube2;uint8_t tube3;
}TM1637Tube_ts;

4.3.4  设置亮度

//设置亮度
//0x88为开显示,u8Brt亮度
void  TM1637_SetBrightness(uint8_t u8Brt)
{TM1637_WriteCmd(0x88 | u8Brt);
}

4.3.5  显示开关

//显示开关
//0x88为开显示,0x80关显示
void  TM1637_Switch(bool bState)
{bState ? TM1637_WriteCmd(0x88) : TM1637_WriteCmd(0x80);
}

4.3.6  初始化配置

void Display_Init(void)
{TM1637_Switch(0);//关显示TM1637_SetBrightness(0x87);//设置亮度,开显示TM1637_WriteCmd(0x44);//写数据到寄存器,固定地址模式memset(&sDisplayData, 0xFF, sizeof(sDisplayData));
}

4.3.7  显示配置

void Display_TubeDataProcess(uint16_t u16Data)
{memset(&sDisplayData, 0xFF, sizeof(sDisplayData));if (u16Data > 9999){u16Data = 9999;//最多四位数}if (u16Data > 999)//四位数{sDisplayData.tube0 = (uint8_t)(u16Data / 1000);//千位sDisplayData.tube1 = (uint8_t)(u16Data / 100 % 10);//百位sDisplayData.tube2 = (uint8_t)(u16Data % 100 / 10);//十位sDisplayData.tube3 = (uint8_t)(u16Data % 10);//个位}else if (u16Data > 99)//三位数{sDisplayData.tube0 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube1 = (uint8_t)(u16Data / 100);//百位sDisplayData.tube2 = (uint8_t)(u16Data / 10 % 10);//十位sDisplayData.tube3 = (uint8_t)(u16Data % 10);//个位	   }else if (u16Data > 9)//两位数{sDisplayData.tube0 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube1 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube2 = (uint8_t)(u16Data / 10);//十位sDisplayData.tube3 = (uint8_t)(u16Data % 10);//个位}else//一位数{sDisplayData.tube0 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube1 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube2 = TUBE_DISPLAY_NULL;//不显示sDisplayData.tube3 = (uint8_t)u16Data;//个位}TM1637_TubeDisplay(sDisplayData);
}

4.3.8  TM1637.h文件配置

        以上代码为.c文件配置,下面是.h文件配置:

#ifndef _TM1637_H_
#define _TM1637_H_#include <stdbool.h>typedef struct 
{uint8_t tube0;uint8_t tube1;uint8_t tube2;uint8_t tube3;
}TM1637Tube_ts;void TM1637_Init(void);
void TM1637_Start(void);
void  TM1637_Stop(void);
uint8_t TM1637_ReceiveAck(void);
void TM1637_Write_Byte(uint8_t data);
void TM1637_WriteCmd(uint8_t u8Cmd);
void TM1637_WriteData(uint8_t u8Addr, uint8_t u8Data);
void TM1637_TubeDisplay(TM1637Tube_ts sData);
void TM1637_SetBrightness(uint8_t u8Brt);
void TM1637_Switch(bool bState);
void Display_Init(void);
void Display_TubeDataProcess(uint16_t u16Data);#endif

4.4  主函数

#include "stm32f10x.h"              
#include "Delay.h"
#include "TM1637.h"int main(void)
{	TM1637_Init();Display_Init();	while (1){Display_TubeDataProcess(1234);}
}

基于STM32通过SN74HC595驱动4位数码管详细解析-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11265.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制&#xff0c;怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili 目录 1.实行行为树实现拉怪机制 1.1行为树黑板 1.2获取施加伤害对象&#xff08;伤害源&#xff09; 2.修复原视频中&#xff0c;第二次攻击怪物后&#xff0c;怪物卡在原地不动的BUG 3.怪物攻击玩…

【JavaEE初阶 — 多线程】内存可见性问题 volatile

1. 内存可见性问题 内存可见性的概念 什么是内存可见性问题呢&#xff1f; 当一个线程对共享变量进行了修改&#xff0c;那么另外的线程都是立即可以看到修改后的最新值。在Java中&#xff0c;可以借助 synchronized、volatile 以及各种Lock 实现可见性。如果我们将变量声…

3195. 有趣的数-13年12月CCF计算机软件能力认证(组合数)

题目 思路 统计方案的时候先去分类&#xff0c;先放01&#xff0c;然后在考虑23对于第k类&#xff0c; 对于01的选择 对于所有的分类&#xff1a;本题我觉得要考虑的几个点就是&#xff1a;状态分类得到数学公式组合数的计算防越界处理 代码 计算组合数的代码模板&#xff1…

goframe开发一个企业网站 开发环境DOCKER 搭建16

Docker开发环境搭建的优势 环境一致性 消除"在我机器上能运行"的问题保证开发、测试、生产环境的一致性新成员可以快速搭建完整开发环境 快速部署 一键启动所有依赖服务配置文件版本控制环境迁移方便快捷 资源隔离 避免不同项目依赖冲突系统资源可控便于多版本…

C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络

在AI技术的发展历史中&#xff0c;模式识别模型是最伟大的AI技术之一&#xff0c;尤其是从像素图像中读取文本。其中一个是Hopfield网络&#xff08;或称为Ising模型的神经网络或Ising–Lenz–Little模型&#xff09;&#xff0c;这是一种递归神经网络形式&#xff0c;由John J…

【Leetcode 中等】34. 在排序数组中查找元素的第一个和最后一个位置

原题链接 Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必…

金融学期末速成笔记

【拯救者】金融学速成&#xff08;基础习题&#xff09; 重点: 市场经济是发达的商品经济。在市场经济条件下&#xff0c;市场机制作为资源配置方式&#xff0c;发挥基础性作用。 除具有商品经济的一般特征外&#xff0c;与商品经济相比&#xff0c;市场经济还具有一些新的特征…

云计算复习文档

云计算复习文档 一 云计算概述 名词&#xff1a; 云计算 1.0 &#xff1a; 面向数据中心管理员的IT基础设施资源虚拟化阶段 通过计算虚拟化技术将企业IT应用与底层的基础设施彻底分离、解耦 将多个企业IT应用实例及运行环境复用在相同的物理服务器上&#xff0c;并通过虚…

【Docker容器化技术】docker安装与配置、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库

文章目录 一、Docker的安装与配置1、docker概述2、安装docker3、docker架构4、配置镜像加速器 二、Docker命令1、服务相关命令2、镜像相关命令3、容器相关命令 三、Docker容器数据卷1、数据卷概念及作用2、配置数据卷3、配置数据卷容器 四、Docker应用部署实战1、部署MySQL2、部…

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

云技术基础学习

声明 学习内容来自 B站 up 主《泷羽 sec》&#xff0c;如涉及侵权等问题&#xff0c;请及时联系&#xff0c;本人将马上删除文章。在此郑重声明&#xff0c;文章仅限于交流学习&#xff0c;任何其他违法行为与本人及泷羽 sec 无关。请务必遵守法律法规&#xff0c;切莫越过法律…

初识Linux · 匿名管道

目录 前言&#xff1a; 匿名管道 理解为什么&#xff1f; 理解是什么&#xff1f; 理解怎么做&#xff1f; 前言&#xff1a; 引入管道之前&#xff0c;我们引入几个问题&#xff0c;进程通信的相关问题。 第一个是进程之间为什么要通信&#xff0c;对于进程间通信来说&…

MySQL数据库:本地部署数据库以及安装彩虹猫【Navicat】

文章目录 一.安装前准备工作1.下载并解压文件2.修复电脑缺失的文件 二.本地部署MySQL1.先解压mysql-8.0.25-winx64.zip&#xff0c;并把文件放到安装需要的位置&#xff0c;再把my.ini文件放到mysql-8.0.25-winx64的根目录2.修改注册表的根目录信息为自己的安装装路径3.进命令符…

计算机网络作业一

一共8次作业&#xff0c;都挺难的&#xff0c;只能在老师的要求下尽力尝试。 任务&#xff1a;探测Internet (IPv4和IPv6) 1. 探测并估计有多少地址是活动的&#xff0c;解释你的方法并估计误差范围 2. 找到尽可能多的关键地址&#xff0c;然后解释它们是什么&#xff0c;为…

联通10010 阿里滑块 231 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

DAY58||110.字符串接龙 |105.有向图的完全可达性 |106.岛屿的周长

110.字符串接龙 110. 字符串接龙 题目描述 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列&#xff1a; 1. 序列中第一个字符串是 beginStr。 2. 序列中最后一个字符串是 endStr。 3. 每次转换只能改变一个字符。 4. 转换过程中的中间字符串…

爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)

目录 一.环境检测 1. 什么是环境检测 2.案例讲解 二 .吐环境脚本 1. 简介 2. 基础使用方法 3.数据返回 4. 完整代理使用 5. 代理封装 6. 封装所有使用方法 jsdom补环境 1. 环境安装 2. 基本使用 3. 添加参数形式 Selenium补环境 1. 简介 2.实战案例 1. 逆向目…

《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址

《TCP/IP网络编程》学习笔记 | Chapter 8&#xff1a;域名及网络地址 《TCP/IP网络编程》学习笔记 | Chapter 8&#xff1a;域名及网络地址域名系统什么是域名&#xff1f;DNS 服务器IP 地址和域名之间的转换使用域名的必要性利用域名获取 IP 地址利用 IP 地址获取域名 基于 Wi…

Liunx:简易版进程池

进程向系统申请资源存在一定的效率问题。系统调用在底层是有成本的。频繁的向操作系统申请资源会造成一定的开销。解决办法是一次性向系统申请你需要的资源&#xff0c;将这些资源在用户层管理维护起来&#xff0c;减少程序频繁的陷入内核。这就是池化的意思&#xff0c;可以简…

百亿AI数字人社会初现:Project Sid展示智能代理文明进化路径

项目背景 Project Sid 是一项开创性的AI代理人文明实验,旨在通过新开发的认知架构 PIANO 探讨AI代理人是否能够在大规模数字社会中实现文明的演进。这项实验不仅展示了社会进步、角色分化、治理体系及文化传播等特征,还揭示了一个包含百亿“数字人类”的社会可能性。 PIANO…