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

news2024/12/25 12:15:00

   🚀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每次自动加1
		i++;
	}
}

/**
  * @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.coloradmin.cn/o/1973574.html

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

相关文章

Frida挂钩Java层代码与协议分析

Hook类中普通方法 在本文中&#xff0c;我们继续以某嘟牛应用为例&#xff0c;在用户点击登录按钮后&#xff0c;哪个方法会被调用。我们在上一篇文章中提到&#xff0c;搜索关键词 “Encrypt” 后&#xff0c;发现两个包含该字符串的 Java 方法。接下来&#xff0c;我们通过 …

AGI思考探究的意义、价值与乐趣Ⅳ

探究in context或Prompt对于LLM来说其根本意义&#xff0c;in context & Prompt Learning带给我们更深一层的提示是什么&#xff1f; 文章里的探索希望能够将in context或Prompt置身于一个更全局的视角来看待&#xff1a;将其视为在真实世界中时空认知流形所映射为数据流形…

路由器IP互联无线对讲系统解决方案

一、项目概况 随着信息化的全面深入发展&#xff0c;各行各业的通信需求日益增长&#xff0c;传统的通信方式无法满足跨网络、跨系统、跨媒介的通信互联互通&#xff0c;打破信息孤岛、提高协同效率&#xff0c;成为当前各行业融合通信的首要任务。尤其大型企业、学校、医院等…

第14课 Scratch少儿编程 入门篇:抓蝴蝶

开车自驾去旅行 故事背景&#xff1a; 春天到了&#xff0c;让我们一起春游&#xff01;公园的草坪上有五颜六色的花朵和翩翩起舞的蝴蝶&#xff0c;让我们拿起工具&#xff0c;去捉蝴蝶吧&#xff01;&#xff01; 程序原理: 添加绿色的草地角色和蝴蝶的角色&#xff0c;给…

【C++程序设计】——利用数组处理批量数据(一)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-削好皮的Pineapple! &#x1f468;‍&#x1f4bb; hello 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 削好皮的Pineapple! 原创 &#x1f468;‍&#x1f4…

使用 Python 制作一个属于自己的 AI 搜索引擎

1. 使用到技术 OpenAI KEYSerper KEYBing Search 2. 原理解析 使用Google和Bing的搜搜结果交由OpenAI处理并给出回答。 3. 代码实现 import requests from lxml import etree import os from openai import OpenAI# 从环境变量中加载 API 密钥 os.environ["OPENAI_AP…

5G三大场景:eMBB、mMTC、uRLLC

1G,2G,3G,4G,5G有什么区别&#xff1f;5G的优势在哪&#xff1f;有什么应用&#xff1f; 1G,2G,3G,4G,5G有什么区别&#xff1f;5G的优势在哪&#xff1f;有什么应用&#xff1f;_3g4g5g的区别和作用-CSDN博客 从1G到4G&#xff0c;移动通信的核心是人与人之间的通信&#xff0…

Spring Cache框架(AOP思想)+ Redis实现数据缓存

文章目录 1 简介1.1 基本介绍1.2 为什么要用 Spring Cache&#xff1f; 2 使用方法2.1 依赖导入&#xff08;Maven&#xff09;2.2 常用注解2.3 使用步骤2.4 常用注解说明1&#xff09;EnableCaching2&#xff09;CachePut3&#xff09;Cacheable4&#xff09;CacheEvict 3 注意…

【云服务器】vscode + onethingAi + SSH远程连接

通过VS code远程连接服务器&#xff0c;并进行上传和下载文件操作_vs code 上传制定文件-CSDN博客 vscode远程连接服务器&#xff08;remote ssh&#xff09;上传本地文件到服务器(sftp)_vscode上传文件到服务器-CSDN博客 vscode连接远程服务器&#xff08;傻瓜式教学&#x…

批发行业手机开单-手机开单 电子单 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、手机开单的好处 批发行业的业务拓展总是在路上&#xff0c;而手机开单的出现成为了业务人员的得力助手。无论身处何地&#xff0c;都能轻松操作&#xff0c;迅速完成开单流程&#xff0c;大幅提高工作效率。而且&#xff0c;通过手机还能明确开单人身份&#xff0c;自动完…

KaiwuDB 产品总监李月飞:让中国物联网用上放心的数据库产品

​2024年7月17日&#xff0c;KaiwuDB 产品总监李月飞受邀于 2024 可信数据库发展大会“能源与政务数据库应用创新”分论坛发表演讲。以下是李月飞主题演讲《深耕数据良田&#xff0c;KaiwuDB 洞见能源产业数字新生力》精华实录。 数据&#xff0c;给能源变革带来新的可能 众所…

基于SpringCloud alibaba的流媒体视频点播平台

基于SpringCloud alibaba的流媒体视频点播平台 前言整体架构具体实现视频播放 总结 先把项目地址放这 》基于SpringCloud alibaba的流媒体视频点播平台《 然后咱们来看看这个项目是干啥的。 前言 今天和大家分享一个项目&#xff0c;基于SpringCloud alibaba的流媒体视频点…

46 集合对象的创建与删除

集合&#xff08;set&#xff09;属于 Python 无序可变序列&#xff0c;使用一对大括号作为定界符&#xff0c;元素之间使用逗号分隔&#xff0c;同一个集合内的每个元素都是唯一的&#xff0c;元素之间不允许重复。 集合中只能包含数字、字符串、元组等不可变类型&#xff08;…

吴恩达老师机器学习作业-ex7

导入库&#xff0c;读取数据&#xff0c;查看数据类型等进行分析&#xff0c;可视化数据 import matplotlib.pyplot as plt import numpy as np import scipy.io as sio#读取数据 path "./ex7data2.mat" data sio.loadmat(path) # print(type(data)) # print(data…

安防监控平台智能边缘分析一体机视频智能分析客流统计检测算法详细介绍

在当今数字化时代&#xff0c;数据的重要性不言而喻。特别是在零售、交通、安防等行业中&#xff0c;准确的客流统计数据对于业务决策、资源优化和安全管理至关重要。随着技术的进步&#xff0c;智能边缘分析一体机的出现为客流统计提供了一种高效、实时的解决方案。本文将详细…

【教育宝-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

windows下设置java环境变量

1.打开window的环境变量设置 右键开始菜单选择系统 选择高级系统设置&#xff1a; 点击环境变量 2.在系统变量 新增 JAVA_HOME&#xff1b;该变量的值 选择jdk所在的目录即可。 JAVA_HOME: D:\Program Files\Java\jdk1.8.0_131 3. 在系统变量新增 classpath; 该变量的值设置…

校园水电费管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;宿舍信息管理&#xff0c;学生缴费管理&#xff0c;教师缴费管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我的 开发系统…

MSA+抑郁症模型总结(三)(论文复现)

MSA抑郁症模型总结&#xff08;三&#xff09;&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 MSA抑郁症模型总结&#xff08;三&#xff09;&#xff08;论文复现&#xff09;热门研究领域&#xff1a;情感计算的横向发展一、概述二、论…

了解关于标准化的知识

1.标准化组织 1.1国家标准化管理委员会(Standardization Administration of the Peoples Republic of China&#xff0c;简称SAC) TC--(Technical Committee) 技术委员会. SAC/TC,就是“国家标准化管理委员会”下属的一个专项或一个行业的“技术委员会或技术小组”&a…