江协科技51单片机学习- p31 LCD1602液晶屏驱动

   🚀write in front🚀  
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 

💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚 

前言:

本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。

引用:

51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili

江科大51单片机入门学习笔记合集_51单片机江科大教程下载-CSDN博客

【51单片机系列】LCD1602液晶模块_lcd1602液晶显示模块-CSDN博客

江科大51单片机入门学习笔记合集_51单片机江科大教程下载-CSDN博客

2302_80796399-CSDN博客

51单片机学习笔记14 LCD1602显示屏使用-CSDN博客

CZU23Yz-CSDN博客

灰海宽松-CSDN博客

正文:

0. 🌿概述

在淘宝上购买了江协科技51单片机开发板套件(普中科技STC51单片机A2型号),就上在上一篇博文里说的自己计划学习下江协科技51单片机开发教程,通过STC51单片机这种MCU这种贴近于裸机的开发来增加对于系统硬件层面知识的了解和掌握。

术语和缩略语

缩写全称说明
LCDLiquid  Crystal Display 液晶显示屏

1. 🚀 LCD1602液晶显示屏介绍

liquid crystal display 液晶显示屏,一种字符型液晶显示模块,可以显示 16*2 个字符,每个字符是 5*7 点阵。

LCD1602实物如下:

🌿LCD1602背面自带两个黑色圆圆的牛屎封装芯片,里面封装的是LCD1602液晶显示屏的芯片HD44780,它里面带有字模和控制扫描控制电路,它会自动扫描LCD1602液晶显示屏的点阵显示,,我们直接将数据发送给LCD1602显示即可,即使我们不用像数码管显示一样需要我们单片机不停地进行扫描显示。

LCD1602看到16个管脚孔,从左至右管脚编号顺序是1-16,管脚功能定义如下表

管脚编号符号管脚说明
1VSS电源地
2VDD电源正极(4.5~5.5V)
3VL(VO)液晶显示偏压信号,调节LCD显示对比度
4RS数据/命令选择端 H/L,1为数据,0为指令
5R/W读/写选择端 H/L,1为读,0为写
6E使能信号,1为数据有效,下降沿执行命令
7~14D0~D7Data I/O
15BLA背光源正极
16BLK背光源负极

LCD1602时序逻辑里,使能信号'E'高电平有效,在下降沿执行命令。所以LCD1602驱动写数据/指令的时序可以是:

  1. E为低电平,在D0~D7数据线上准备好要写的数据/指令
  2. E置为高电平,在高电平时LCD1602采样数据
  3. 然后,E置位低电平产生下降沿,LCD1602在下降沿执行指令。
E使能信号,1为数据有效,下降沿执行命令

LCD1602背面的液晶LCD显示驱动芯片一般是,LCD1602 驱动芯片内部功能框图如下(江协科技老师自己画的框图)

  • 🎄CGRAM和CGROM:内部的一个字模库,CG: character Generator,就像数码管显示一样,当我们想让数码管显示数字1的时候并不是直接写1的,而是要输出一个‘1’的字模,就是需要一个译码的过程,LCD1602液晶屏显示字符也是需要这样一个译码得到字符对应的字模的过程,其中字模就存在LCD1602的GCRAM&GCROM字模库里。
    其中GCRAM是可写的,可以存样用户自定义的一些字符的字模。
    GCROM是出厂写死的,其中存放预先定义好的字符字模。
  • 🎄DDRAM(数据显示区)(40*2):Data Display RAM区,DDRAM大小为每行40个字符,乘以2行,其中GC1602只能在每行显示16个字符,DDRAM的大小要比GC1602显示的区域要长。用户写到DDRAM存储区域的指令,将会映射显示到LCD1602的前16个字符。
    为什么驱动芯片是40*2个字符大小的,因为这个驱动芯片是通用的支持每行40个字符,第二是可以通过移屏指令,将DDRAM中的数据进行移屏并且移屏是循环移屏的移动到最左侧之外的数据将移回到最右侧,这样配合GC1602的移屏指令,就可是实现LCD1602屏幕的滚动显示。
  • 🎄控制器:
  • 🎄屏幕(16*2):
  • 🎄AC(光标位置):

DDRAM(数据显示区)

LCD1602的DDRAM(Display Data RAM)是用于存储显示数据的内存区域,它是LCD控制器内部的一部分。DDRAM可以存储LCD屏幕上每个字符的数据,包括字符形状和位置信息。通过修改DDRAM中的数据,可以实现LCD屏幕上的文本显示。

以下是LCD1602的DDRAM地址与屏幕字符位置的对应关系表:

CGRAM+CGROM(字模库)

CGROM/CGRAM里存放的是LCD1602液晶显示屏的字母库,其中CGROM中存放的不可修改的预先定义好的字符的子模,子模的地址排布如下图:

  • 0x30~0x39 是数字0~9的字模,对应则会ASCII码中的0~9字符的编码,这是在定义CGROM子模的地址的时候特意设计的。
  • 0x41~0x5A对应大写字母 A~Z,0x61~0x7A对应消息字母a~z,这也是在定义CGROM子模的地址的时候特意设计的。
  • CGRAM的可以存放用户自定义字符,地址为1~8,虽然下图里显示了1~8显示了两次,但实际它们是重复的,CGRAM自定义字符就是8个。

2. LCD1602的时序

LCD1602的写数据/指令时序图如下:

LCD1602的写数据的操作时序如下:

  1. RS 数据/指令选择位,设置为高电平表示写数据
  2. R/W读/写选择位,设置为低电平表示写
  3. 在时序图中,DB0~DB7时序图交叉的地方表示写数据,所以在DB0~DB7数据引脚准本好要写的数据。
  4. E 使能引脚,先设置为电平数据有效,持续一段时间再设置为低电平

时序参数(时序的时间最短时间)

3. LCD1602的指令集

LCD1602的指令集,如下图

清屏指令0x1:

  • 清除DDRAM内容,结果是清屏。
  • 清除AC的值,结果是AC光标复位, 

清屏指令(0x01)用于清除LCD屏幕上的所有字符及光标位置,并将光标移至起始位置(0行0列)。

Bit 0用于启动清屏指令的执行。其他位暂时保留,一般不使用。

BitRSR/W76543210
作用0000000001

光标(AC)归位指令0x02

光标归位指令(0x02)用于将LCD光标移回起始位置(0行0列)、同时把地址计数器(AC)值设置为0。

X表示该位不关心,为0或者为1都不影响。

BitRSR/W76543210
作用000000001X

数据写入方式指令:

 写入模式设置指令用于配置LCD的文本显示模式,包括光标移动方向和字符显示是否移位等参数

BitRSR/W76543210
作用00000001I/DS

 

 显示开关控制指令

  • D: 0=显示功能关;1=显示功能开;
  • C: 0=无光标 ;1=有光标;
  • B: 0=光标闪烁;1=光标不闪烁。
BitRSR/W76543210
作用0000001DCB

 

功能设置指令

功能设置指令,选择数据接口是4位还是8位,选择单行显示还是两汉显示,选择点阵的高度。

我们一般使用的是GC1602的的指令字0x38,即:8位数据几口,两行显示,5*7点阵。

设定DDRAM地址指令

设定下一个要存入数据的DDRAM地址; 

读取忙信号或AC地址指令 

一般不用,我们不从GC1602读取数据

4. LCD1602操作流程

LCD1602操作流程如下

LCD1602初始化

初始化

  1. 发送指令0x38                //8位数据几口,两行显示,5*7点阵
  2. 发送指令0x0C               //显示开,光标关,闪烁关
  3. 发送指令0x06               //数据读写操作后,光标自动加1,画面不动
  4. 发送指令0x01               //清屏

显示字符

显示字符

  1. 发送指令 0x80 | AC         //设置光标位置(DDRAM写入的地址)
  2. 发送数据                         //发送想要显示的字符数据
  3. 发送数据                         //发送想要显示的字符数据

 为什么第一步这里要将要设置的光标位置(也就是DDRAM的写入地址)或上 '0x80'哪?我们注意到LCD1602指令集里从上到下通过最高位的1来标识属于那种指令,“DDRAM地址设置”指令的最高位DB7固定为1,所以要将光标AC位置的指令或上与最高位的1,也就是或上0x80.

5. 编写LCD1602液晶显示屏驱动函数

编写我们自己LCD1602液晶显示屏驱动函数,这里将会写如下这些函数,方便我们自己在实验中打印在LCD1602液晶显示屏上打印信息。

LCD1602.c

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"sbit LCD_RS=P2^6;				//LCD1602 RS 数据/指令选择
sbit LCD_RW=P2^5;				//LCD1602 RW 读/写选择
sbit LCD_EN=P2^7;				//LCD1602 EN 使能 #define LCD_DataPort		P0	//LCD1602 D0~D7 数据端口/*** @brief  LCD1602延时函数,12MHz调用可延时1ms* @param  无* @retval 无*/
void LCD_Delay()		//@11.0592MHz 1ms
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}/*** @brief  LCD1602写命令* @param  Command 要写入的命令* @retval 无*/
void LCD_WriteCommand(unsigned Command)
{LCD_RS = 0;					//LCD1602指令LCD_RW = 0;					//LCD1602写LCD_DataPort = Command;		//写指令LCD_EN = 1;					//LCD1602 EN使能为高LCD_Delay();				//delay 1ms,防止时序太快LCD1602来不及执行LCD_EN = 0;					//LCD1602 EN使能为低LCD_Delay();				//delay 1ms
}/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned Data)
{LCD_RS = 1;				//LCD1602数据LCD_RW = 0;				//LCD1602写LCD_DataPort = Data;	//写数据LCD_EN = 1;				//LCD1602 EN使能为高LCD_Delay();			//delay 1ms,防止时序太快LCD1602来不及执行LCD_EN = 0;				//LCD1602 EN使能为低LCD_Delay();			//delay 1ms
}/*** @brief  LCD1602初始化函数* @param  无* @retval 无*/
void LCD_Init(void)
{LCD_WriteCommand(0x38);	//8位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0c);	//显示开,光标关,闪烁关	LCD_WriteCommand(0x06);	//数据读写操作后,光标自动加1,画面不动LCD_WriteCommand(0x01);	//清屏
}/*** @brief  LCD1602设置光标位置* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @retval 无*/
void LCD_SetCursor(unsigned char Line, unsigned char Column)
{unsigned char AC_DDRAM = 0;/* 计算写入到DDRAM(显示区)的光标AC的位置 */if(Line == 1){AC_DDRAM = 0x00 + (Column - 1);AC_DDRAM |= 0x80;}else if(Line == 2){AC_DDRAM = 0x40 + (Column - 1);AC_DDRAM |= 0x80;}LCD_WriteCommand(AC_DDRAM);	//设置光标地址
}/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowChar(unsigned char Line, unsigned char Column, char Char)
{LCD_SetCursor(Line, Column);	//设置光标位置LCD_WriteData(Char);
}/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowString(unsigned char Line, unsigned char Column, char *String)
{unsigned char i = 0;LCD_SetCursor(Line, Column);	//设置光标位置/* 打印字符串 */i = 0;while(String[i] != '\0'){LCD_WriteData(String[i]); //光标AC每次自动加1i++;}
}/*** @brief  返回值=X的Y次方*/
signed int LCD_Power(int x, int y)
{int result = 1;while(y > 0){result *= x;y--;}return result;
}/*** @brief  在LCD1602指定位置开始显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~65535* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char Chr;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){Chr = Num/LCD_Power(10,i-1)%10;if(Chr >=0 && Chr <= 9){Chr += 0x30;}LCD_WriteData(Chr);}
}/*** @brief  在LCD1602指定位置开始以有符号十进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:-32768~32767* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowSignedNum(unsigned char Line, unsigned char Column, int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;unsigned char Number1;LCD_SetCursor(Line, Column);	//设置光标位置if(Num>=0){LCD_WriteData('+');Number1 = Num;}else{LCD_WriteData('-');Number1 = -Num;			//-32768 转为32768之后可能会溢出}for(i=Length; i>0; i--){SingleNum = Number1/LCD_Power(10,i-1)%10;if(SingleNum >=0 && SingleNum <= 9){SingleNum += 0x30;}LCD_WriteData(SingleNum);}
}/*** @brief  在LCD1602指定位置开始以十六进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~0xFFFF* @param  Length 要显示数字的长度,范围:1~4* @retval 无*/
void LCD_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){SingleNum = Num/LCD_Power(16,i-1)%16;if(SingleNum >=0 && SingleNum <= 9){SingleNum += 0x30;				}else if(SingleNum >=10 && SingleNum <= 15){SingleNum = SingleNum - 10 + 'A';		//16进制A,B,C,D,E,F}LCD_WriteData(SingleNum);}
}/*** @brief  在LCD1602指定位置开始以二进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~1111 1111 1111 1111* @param  Length 要显示数字的长度,范围:1~16* @retval 无*/
void LCD_ShowBinaryNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){SingleNum = Num/LCD_Power(2,i-1)%2;SingleNum += 0x30;LCD_WriteData(SingleNum);}
}

LCD1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__void LCD_Init(void);
void LCD_ShowChar(unsigned char Line, unsigned char Column, char Char);
void LCD_ShowString(unsigned char Line, unsigned char Column, char *String);
void LCD_ShowNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line, unsigned char Column, int Num, unsigned char Length);
void LCD_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
void LCD_ShowBinaryNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
#endif

main.c 

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"void main()
{LCD_Init();LCD_ShowChar(1, 1, 'A');LCD_ShowChar(1, 2, 'H');LCD_ShowChar(2, 3, 'B');LCD_ShowChar(2, 4, 'C');LCD_ShowChar(1, 1, 'A');LCD_ShowString(1, 1, "Hello LCD1602");LCD_ShowNum(2, 1, 187, 3);LCD_Init();LCD_ShowHexNum(2, 1, 0x88FA, 4);LCD_ShowSignedNum(2, 7, -88, 2);LCD_ShowBinaryNum(1, 1, 0xAB, 8);while(1){}
}

6. LCD1602液晶显示屏实验效果:

实验1-LCD1602显示字符串

实验2 -LCD1602显示16进制和2进制数字

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"
#include "Delay.h"void main()
{LCD_Init();LCD_ShowChar(1, 1, 'A');LCD_ShowChar(1, 2, 'H');LCD_ShowChar(2, 3, 'B');LCD_ShowChar(2, 4, 'C');LCD_ShowChar(1, 1, 'A');LCD_ShowString(1, 1, "Hello LCD1602");LCD_ShowNum(2, 1, 187, 3);LCD_Init();LCD_ShowHexNum(2, 1, 0x88FA, 4);LCD_ShowSignedNum(2, 7, -88, 2);LCD_ShowBinaryNum(1, 1, 0xAB, 8);while(1){}
}

实验3-LCD1602显示屏滚动显示

在Main.c中增加LCD1602移屏指令,这样LCD1602 DDRAM(县市区)一行40个字符的后面字符就可以滚动的显示出来,LCD1602移屏显示指令每次向左移动时最左面移出的字符会回到最右边,这样就可以在LCD1602循环显示。

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"
#include "Delay.h"void main()
{LCD_Init();LCD_ShowString(1, 1, "MAGA 2024! Trump");LCD_ShowString(2, 1, "Make Amerigan Gream Again, 2024 MAGA");while(1){Delay(500);LCD_WriteCommand(0x18);}
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

端到端自动驾驶:挑战与前沿

End-to-end Autonomous Driving: Challenges and Frontiers 端到端自动驾驶&#xff1a;挑战与前沿 Abstract The autonomous driving community has witnessed a rapid growth in approaches that embrace an end-to-end algorithm framework, utilizing raw sensor input …

OpenSPG安装部署

文章目录 前言一、安装前准备安装docker安装docker compose 二、安装服务端下载 docker-compose.yml 文件启动服务端 三、安装客户端拉取镜像克隆OpenSPG源码 案例 前言 OpenSPG是以SPG框架为基础设计和实现的知识图谱开放引擎&#xff0c;它为领域图谱构建提供了明确的语义表…

常见病症之中医药草一枝黄花

常见病症之中医药草一枝黄花 1. 源由2. 一枝黄花植物描述药用部分主要成分药理作用使用方法注意事项 3. 常用方剂3.1 一枝黄花汤3.2 一枝黄花解毒汤 4. 着凉感冒主要方剂加味处方使用方法注意事项 5. 补充资料 1. 源由 注&#xff1a;仅供参考&#xff0c;建议在中医师指导下使…

电商兴农,柳湖新篇:特色产品助力乡村发展

在 2024 年这个充满希望与活力的年份&#xff0c;电商兴农的热潮如同一股春风&#xff0c;吹进了柳湖这片充满生机的土地。玄鹤洞油茶、醋&#xff0c;食家巷特色传统面点、陇原雪陇强面粉、陇源香亚麻籽油等特色产品&#xff0c;以及众多农家的积极参与&#xff0c;共同书写了…

欧科云链7月安全月报 | 私钥泄露损失约占总损失88%,超2.6亿美元

7 月全网累计造成损失约 2.9 亿美元&#xff0c;因私钥泄露所造成损失占总损失的 88.31%&#xff0c;其中 WazirX 因多签钱包私钥泄露&#xff0c;造成约 2.35 亿美元的损失&#xff0c;为 7 月最大安全事件。 最大安全事件-私钥泄漏 7 月 18 日&#xff0c;WazirX 多签钱包私…

免账户免权限免费获取 A股 全市场股票ETF指数 分钟级数据

日期 2024/8/2 意外发现的&#xff0c;抛砖引玉&#xff0c;测试了下&#xff0c;其他券商的也可以。 可以直接获取 1m 5m 1day 级别的数据&#xff0c;全A股市场的都可以。期货未测试。 需要 其他的级别的分数数据可以自行合成。 原理 券商版qmt获取行情数据时&#xff0c;不…

Java 设计模式之策略模式 (Strategy Pattern) 详解

Java 设计模式之策略模式 (Strategy Pattern) 详解 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在定义一系列算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互相替换&#xff0c;从而使得算法的变化不会影响使用算法的…

高并发内存池

高并发内存池 一、项目介绍二、什么是内存池1.池化技术2.内存池3.内存池主要解决的问题3.1内碎片3.2外碎片3.3内存池的解决方案 4.malloc 三、定长内存池1.定长内存池设计2.成员属性3.析构和构造4.New和Delete5.性能测试 四、高并发内存池整体框架设计五、申请内存设计1.Thread…

利用Qt实现调用文字大模型的API,文心一言、通义千问、豆包、GPT、Gemini、Claude。

利用Qt实现调用文字大模型的API&#xff0c;文心一言、通义千问、豆包、GPT、Gemini、Claude。 下载地址: AI.xyz 1 Qt实现语言大模型API调用 视频——Qt实现语言大模型API调用 嘿&#xff0c;大家好&#xff01;分享一个最近做的小项目 “AI.xyz” 基于Qt实现调用各家大模型…

八股文-基础知识-int和Integer有什么区别?

引言 在Java编程实践中&#xff0c;基本数据类型int与包装类Integer扮演着不可或缺的角色&#xff0c;它们间的转换与使用策略深刻影响着程序的性能与内存效率。本文旨在深入探究int与Integer的区别&#xff0c;涵盖其在内存占用、线程安全、自动装箱与拆箱机制等方面的表现。…

tomato靶场

扫描网址端口 访问一下8888 我们用kali扫描一下目录 访问这个目录 产看iofo.php源码&#xff0c;发现里面有文件包含漏洞 访问/etc/passwd/发现确实有文件包含漏洞 远程连接2211端口 利用报错&#xff0c;向日志文件注入木马&#xff0c;利用文件包含漏洞访问日志文件 http:/…

嵌入式Linux系统中LCD屏驱动框架基本实现

大家好,今天主要给大家分享一下,如何使用linux系统中LCD屏驱动框架Framebuffer编写具体的代码。 第一:如何编写字符设备驱动程序 1、驱动框架基本操作: 驱动主设备号 * 构造file_operations结构体,填充open/read/write等成员函数 * 注册驱动:register_chrdev(major, name…

【参会邀请】第四届区块链技术与信息安全国际会议(ICBCTIS 2024)诚邀相聚江城!

我们诚挚地邀请您参与第四届区块链技术与信息安全国际会议&#xff08;ICBCTIS 2024&#xff09;。本届会议将于2024年8月17日~19日在中国武汉召开。会议将围绕区块链技术与信息安全等相关研究领域&#xff0c;特邀国内外数位在此领域学术卓越的学者专家做相关致辞与报告&#…

模式植物构建orgDb数据库 | 以org.Slycompersicum.eg.db为例

原文链接:模式植物构建orgDb数据库 | 以org.Slycompersicum.eg.db为例 本期教程 一步构建模式植物OrgDb数据库 source("../Set_OrgDb_Database.R")# 使用函数 Set_OrgDb_Database(emapper_file "out.emapper_tomato.csv", ## 输入的eggnog结果文件json_…

红酒与季节:品味四季的风情

四季轮转&#xff0c;岁月更迭&#xff0c;每个季节都有其不同的韵味与风情。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与四季相遇&#xff0c;它们共同编织出一幅幅美丽的味觉画卷&#xff0c;让我们在品味中感受四季的风情。 一、春之序曲&#xff1a…

学会这个Python库,接口测试so easy

前言 我们在做接口测试时&#xff0c;大多数返回的都是json属性&#xff0c;我们需要通过接口返回的json提取出来对应的值&#xff0c;然后进行做断言或者提取想要的值供下一个接口进行使用。 但是如果返回的json数据嵌套了很多层&#xff0c;通过查找需要的词&#xff0c;就…

MySql Linux 安装

下载 下载后的文件为&#xff1a;mysql-8.4.2-linux-glibc2.28-x86_64.tar.xz 创建用户和用户组 $> groupadd mysql $> useradd -r -g mysql -s /bin/false mysql由于用户仅用于所有权目的&#xff0c;而不是登录目的&#xff0c;因此useradd命令使用 -r和-s /bin/false…

临床数据科学中有关试验设计的四个关键要素

临床数据科学是现代医学研究中不可或缺的组成部分&#xff0c;通过科学的方法和统计分析工具来揭示医疗数据背后的规律和真相。试验设计是临床数据科学的核心环节&#xff0c;直接关系到研究结果的可靠性和科学性。 在过去几十年中&#xff0c;随机临床试验&#xff08;Randomi…

《LeetCode热题100》---<5.③普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 方法一&#xff1a;将数组视为哈希表 class Solution {public int firstMissingPosi…

Python——记录pip问题(解决下载慢、升级失败问题)

在python开发中&#xff0c;经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢&#xff0c;经常导致超时。 有很多朋友刚刚学Python的时候&#xff0c;会来问为什么pip下载东西这么慢啊&#xff1f; 而且pycharm里面下载库也是非常的慢…