当前位置: 首页 > news >正文

卡片式设计网站/营业推广策划方案

卡片式设计网站,营业推广策划方案,百度网站优化工具,赶集网天津网站建设目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil,下…

目录

单片机介绍

点亮一个LED

流水灯参考代码

点亮流水LEDplus版本

独立按键

 独立按键控制LED亮灭

静态数码管

静态数码管显示

动态数码管显示

模块化编程

调试工具

矩阵键盘

矩阵键盘显示数据

矩阵键盘密码锁

学习B站江协科技课程笔记。

安装keil,下载大佬简介内的应用,注意注册机是keygen那个文件,解压前先关闭防火墙。

单片机介绍

单片机,Micro Controller Unit,简称MCU

内部集成了CPU、ARM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能

单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机、LED等)的控制

单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但性能上,与计算机相差甚远,但单片机成本低,体积小,结构简单,在生活和工业控制领域大有所用

同时,学习使用单片机是了解计算机原理与结构的最佳选择

STC89C52单片机

所属系列:51单片机系列

公司:STC公司

位数:8位

RAM:512字节

ROM:8k(flash)

工作频率:12MHz(本开发板使用)

LED介绍

中文名:发光二极管

外文名:Light Emitting Diode

简称:LED

用途:照明、广告灯、指引灯、屏幕

keil中新建文件选择CPU:Atmel ->at89c52

本想使用proteus进行模拟实验,技术力不太足够。只好浅浅投资了

点亮一个LED

先进行编程

注意:P2 端口大写,为什么是P2

P21到P27都由P2.X进行控制,为什么亮的位置置零,设置低电平才会有电流流过,要用16进制数进行设置,0x...。烧录时注意单片机型号在上面有写,打开生成的.hex文件,点击下载/编程。然后重启单片机。右下角显示

keil编辑新项目:

1.创建项目

2.选择芯片类型

3.添加主函数

4.编入程序

延时函数:

void Delay500ms()        //@12.000MHz
{
    unsigned char i, j, k;

    _nop_();//¿ÕÓï¾ä
    i = 4;
    j = 205;
    k = 187;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

使其能够进行亮灭控制,注意加入 INTRINS.H   头函数,以及每写一句记得加 ; 

流水灯参考代码
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}void main(){while(1){P2 = 0xFE;//1111 1110Delay500ms();P2 = 0xFD;//1111 1101Delay500ms();P2 = 0xFB;//1111 1011Delay500ms();P2 = 0xF7;//1111 0111Delay500ms();P2 = 0xEF;//1110 1111Delay500ms();P2 = 0xDF;//1101 1111Delay500ms();P2 = 0xBF;//1011 1111Delay500ms();P2 = 0x7F;//0111 1111Delay500ms();}
}
点亮流水LEDplus版本
#include <REGX52.H>
void Delay1ms(unsigned int xms)		//@12.000MHz
{while (xms) {unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);xms --;}}void main(){while(1){P2 = 0xFE;//1111 1110Delay1ms(500);P2 = 0xFD;//1111 1101Delay1ms(500);P2 = 0xFB;//1111 1011Delay1ms(500);P2 = 0xF7;//1111 0111Delay1ms(500);P2 = 0xEF;//1110 1111Delay1ms(500);P2 = 0xDF;//1101 1111Delay1ms(500);P2 = 0xBF;//1011 1111Delay1ms(500);P2 = 0x7F;//0111 1111Delay1ms(500);}
}

独立按键

 独立按键控制LED亮灭
#include <REGX52.H>
void main(){//P2 = 0xFE;//1111 1110操作八位寄存器给八位P2_0 = 0;//操作一位寄存器给一位赋值即可,控制其亮P2_0 = 1;//控制其灭while(1){if(P3_1 == 0){P2_0 = 0;}else{P2_0 = 1;}}
}

为什么是P3_1        

独立按键控制LED状态

#include <REGX52.H>
void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main(){while(1){//按下过后弹起才变化电平if(P3_1 == 0){//按下按键Delay(20);//除抖,这段时间都是低电平while(P3_1 == 0);//再次判断,这时是低电平,是否是持续按下的//如果是真的是就什么都不做。等待弹起Delay(20);//除抖,这段时间变为高电平//按下并弹起后引起灯灭灯亮P2_0 = ~P2_0;}}
}

独立按键控制二进制输出

#include <REGX52.H>void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main(){unsigned char LEDNum = 0;while(1){if(P3_1 == 0){Delay(20);while(P3_1 == 0);Delay(20);LEDNum ++;//P2 = ~LEDNum;//按位取反}}
}

多个按键实现移位

#include <REGX52.H>void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}
unsigned char LEDNum;
void main(){P2 =~0x01;while (1){if ( P3_1 == 0 ){Delay(20);while ( P3_1 == 0 )Delay(20);LEDNum ++ ;if( LEDNum >= 8 )LEDNum = 0;P2 = ~( 0x01 << LEDNum );}if ( P3_0 == 0 ){Delay(20);while ( P3_0 == 0 )Delay(20);if(LEDNum == 0){LEDNum = 7 ;}else{LEDNum --;}P2 = ~( 0x01 << LEDNum );}}}

对固定值进行位移时,选择同一方向。

静态数码管

公用引脚

共阴极(上)与共阳极连接(下),想选中该数码管就要赋值0,反之1,共阴极要想亮就设置高电平(为公共的地方是接地的,需要高电平流过),共阳极要想亮就设置低电平(公共的地方是接电的,需要低电平流过)

共阴极(上)与共阳极(下)连接方式。与上同理

静态数码管显示

电容单位,进率为1000

输出静态数字

例如选择第三个数码管显示6;

#include <REGX52.H>
void main(){P2_4 = 1;//101P2_3 = 0;P2_2 = 1;P0 = 0x7D;while(1){}}

其中为什么是P2_2~P2_4进行赋值,因为数码管连接译码器,由译码器输入高低电平进行显示,这里赋值是为了选择第几个led亮,从左往右的第三个代表着LED6,而LED6需要Y5进行输入,需要三位二进制数代表5,从而使其被选择,即101,此时LED6已被选中,6需要acdefg灯管亮,又因为是共阴极,故1才代表亮,从上至下写出应为 1011 1110,最后一个代表dp而从左边输入到右边需要从下往上进行输入故需要倒置为 0111 1101转化为十六进制为 0x7D

就如6的来历,段码表也是这样推出来的。

将显示的位置以及显示的数字抽象为一个函数。

#include <REGX52.H>
unsigned char NixieTable [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number){switch(Location){case 1:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = NixieTable[Number];
}
void main(){Nixie(7,2);while(1){}}
动态数码管显示

消影

#include <REGX52.H>
unsigned char NixieTable [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location,Number){switch(Location){case 1:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = NixieTable[Number];Delay(1);//消影操作P0 = 0x00;
}void main(){while(1){Nixie(1,1);//Delay(1);Nixie(2,2);//Delay(1);Nixie(3,3);//Delay(1);}}

模块化编程

模块化编程需要注意:

1.使用ifndef 以及 define 尽量将被定义的变量进行大写。

2. .c文件放置函数体以及被调用的头文件, .h文件放置函数声明以及预编译语句

3.函数声明句末记得添加 ;

将Delay函数变为一个模块

Delay.h中

#ifndef __DELAY_H__
#define __DELAY_H__void Delay(unsigned int xms);#endif

Delay.c中

void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}

将晶体管显示也转变为一个模块

Nixie.h中

#ifndef __NIXIE_H__
#def  __NIXIE_H__void Nixie(unsigned char Location,Number);#endif

Nixie.c中

#include <REGX52.H>
#include "Delay.h"
unsigned char NixieTable [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number){switch(Location){case 1:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;case 2:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;case 3:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;case 4:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;case 5:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;case 6:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;case 7:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;case 8:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;}P0 = NixieTable[Number];Delay(1);P0 = 0x00;
}

在需要的地方进行引用头文件以及调用函数即可。

调试工具

     加入LCD1602调试头文件以及c语言文件

LCD1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__//用户调用函数:
void LCD_Init();
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 Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);#endif

LCD1602.c

#include <REGX52.H>//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0//函数定义:
/*** @brief  LCD1602延时函数,12MHz调用可延时1ms* @param  无* @retval 无*/
void LCD_Delay()
{unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);
}/*** @brief  LCD1602写命令* @param  Command 要写入的命令* @retval 无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_EN=1;LCD_Delay();LCD_EN=0;LCD_Delay();
}/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_EN=1;LCD_Delay();LCD_EN=0;LCD_Delay();
}/*** @brief  LCD1602设置光标位置* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @retval 无*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{if(Line==1){LCD_WriteCommand(0x80|(Column-1));}else if(Line==2){LCD_WriteCommand(0x80|(Column-1+0x40));}
}/*** @brief  LCD1602初始化函数* @param  无* @retval 无*/
void LCD_Init()
{LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动LCD_WriteCommand(0x01);//光标复位,清屏
}/*** @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  String 要显示的字符串* @retval 无*/
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}/*** @brief  返回值=X的Y次方*/
int LCD_Pow(int X,int Y)
{unsigned char i;int Result=1;for(i=0;i<Y;i++){Result*=X;}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 Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');}
}/*** @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 Number,unsigned char Length)
{unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number>=0){LCD_WriteData('+');Number1=Number;}else{LCD_WriteData('-');Number1=-Number;}for(i=Length;i>0;i--){LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');}
}/*** @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 Number,unsigned char Length)
{unsigned char i,SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData(SingleNumber+'0');}else{LCD_WriteData(SingleNumber-10+'A');}}
}/*** @brief  在LCD1602指定位置开始以二进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~1111 1111 1111 1111* @param  Length 要显示数字的长度,范围:1~16* @retval 无*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');}
}

主函数中进行调用

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"int Res = 0;void main(){LCD_Init();LCD_ShowChar(1,1,'A');LCD_ShowString(1,3,"Hello");LCD_ShowNum(1,9,123,3);//位数不够显示会高位补零,位数多余显示位,//会显示从后开始数的几位LCD_ShowSignedNum(1,13,-65,2);//显示位数不算符号位LCD_ShowHexNum(2,1,0xA8,2);LCD_ShowBinNum(2,4,0xAA,8);while(1){Res++;Delay(1000);LCD_ShowNum(2,13,Res,3);}}

细节:LCD1602需要插紧,有时对比度也有影响,看着没有显示出来,其实已经显示出来了

矩阵键盘

矩阵键盘显示数据

MatrixKey.h

#ifndef __MATRIXKEY__H__
#define __MATRIXKEY__H__unsigned char MatrixKey();#endif

MatrixKey.c

#include <REGX52.H>
#include "Delay.h"
/*** @brief  矩阵键盘读取按键键码* @param  无* @retval  KeyNum	按下按键的键码值* 	  如果按键按下不放,则程序会停留在此函数,*		  松手一瞬间,返回按键码,没有按键按下时,返回0*/unsigned char MatrixKey(){unsigned char KeyNum = 0;P1 = 0xff;//将按键全部置于高电平P1_3 = 0;//选中第一列if( P1_7 == 0 ){ Delay(20); while( P1_7 == 0) Delay(20); KeyNum = 1;}//s1的检测if( P1_6 == 0 ){ Delay(20); while( P1_6 == 0) Delay(20); KeyNum = 5;}//s5的检测if( P1_5 == 0 ){ Delay(20); while( P1_5 == 0) Delay(20); KeyNum = 9;}//s9的检测if( P1_4 == 0 ){ Delay(20); while( P1_4 == 0) Delay(20); KeyNum = 13;}//s13的检测P1 = 0xff;//将按键全部置于高电平P1_2 = 0;//选中第二列if( P1_7 == 0 ){ Delay(20); while( P1_7 == 0) Delay(20); KeyNum = 2;}//s2的检测if( P1_6 == 0 ){ Delay(20); while( P1_6 == 0) Delay(20); KeyNum = 6;}//s6的检测if( P1_5 == 0 ){ Delay(20); while( P1_5 == 0) Delay(20); KeyNum = 10;}//s10的检测if( P1_4 == 0 ){ Delay(20); while( P1_4 == 0) Delay(20); KeyNum = 14;}//s14的检测P1 = 0xff;//将按键全部置于高电平P1_1 = 0;//选中第三列if( P1_7 == 0 ){ Delay(20); while( P1_7 == 0) Delay(20); KeyNum = 3;}//s3的检测if( P1_6 == 0 ){ Delay(20); while( P1_6 == 0) Delay(20); KeyNum = 7;}//s7的检测if( P1_5 == 0 ){ Delay(20); while( P1_5 == 0) Delay(20); KeyNum = 11;}//s11的检测if( P1_4 == 0 ){ Delay(20); while( P1_4 == 0) Delay(20); KeyNum = 15;}//s15的检测P1 = 0xff;//将按键全部置于高电平P1_0 = 0;//选中第四列if( P1_7 == 0 ){ Delay(20); while( P1_7 == 0) Delay(20); KeyNum = 4;}//s4的检测if( P1_6 == 0 ){ Delay(20); while( P1_6 == 0) Delay(20); KeyNum = 8;}//s8的检测if( P1_5 == 0 ){ Delay(20); while( P1_5 == 0) Delay(20); KeyNum = 12;}//s12的检测if( P1_4 == 0 ){ Delay(20); while( P1_4 == 0) Delay(20); KeyNum = 16;}//s16的检测return KeyNum;
}

主函数调用

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "MatrixKey.h"unsigned char KeyNum ;void main(){LCD_Init();LCD_ShowString(1,1,"MatrixKey:");//打印while(1){KeyNum = MatrixKey();if( KeyNum ) {//延迟刷新LCD_ShowNum(2,1,KeyNum,2);}}}
矩阵键盘密码锁

主函数内容

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "MatrixKey.h"unsigned char KeyNum ;
unsigned int Password,Count;void main(){LCD_Init();LCD_ShowString(1,1,"Password:");//打印while(1){KeyNum = MatrixKey();if( KeyNum ) {//延迟刷新if( KeyNum <= 10){//如果s1-s10按键按下,输入密码if(Count < 4){//控制只能输入四个数Password *= 10;//密码左移一位Password += KeyNum % 10;//获取一位密码并加到密码中Count ++;//计次加一}LCD_ShowNum(2,1,Password,4);//刷新显示}if( KeyNum == 11){//如果s11被按下,进行确认操作if( Password == 2345){//进行密码比对,2345为正确密码LCD_ShowString(1,14,"OK ");//显示okPassword = 0;//密码清零Count = 0;//计次清零LCD_ShowNum(2,1,Password,4);//刷新显示}else{//否则LCD_ShowString(1,14,"ERR");//显示ERRPassword = 0;//密码清零Count = 0;//计次清零LCD_ShowNum(2,1,Password,4);//刷新显示}}if( KeyNum == 12){//如果s12被按下,进行取消操作LCD_ShowString(1,14,"   ");//显示空Password = 0;//密码清零Count = 0;//计次清零LCD_ShowNum(2,1,Password,4);//刷新显示}}}}

相关文章:

51单片机1-6

目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil&#xff0c;下…...

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…...

用户画像项目背景

1,用户画像项目介绍 大数据平台简介 数据仓库+用户画像+推荐系统 (1)数据仓库:加快数据的分析和查询 数据仓库分层:ODS层(映射HDFS的数据)—DW(数据仓库层)–APP(层)—BI(层) DW:DWD明细数据层(数据的清洗和转换),DWM(轻度聚合层),DWS(高度聚合),APP(层),DIM(层) …...

Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目 分析 这道题很明显记忆化搜索&#xff0c;用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…...

【LeetCode】每日一题 2024_1_21 分割数组的最大值(二分)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;分割数组的最大值题目描述代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 今天是 hard&#xff0c;难受&#xff0c;还好有题解大哥的清晰讲解 题目&a…...

bevy the book 20140118翻译(全)

源自&#xff1a;Bevy Book: Introduction 主要用 有道 翻译。 Introduction 介绍 Getting Started 开始 Setup 设置 Apps 应用程序 ECS Plugins 插件 Resources 资源 Next Steps 下一个步骤 Contributing 贡献 Code 代码 Docs 文档 Building Bevys Ecosystem 构建 b…...

MySQL数据库面试知识点

1、数据库基础&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储、管理和检索数据。它支持多种存储引擎&#xff0c;包括InnoDB、MyISAM等。MySQL是由瑞典公司MySQL AB开发&#xff0c;后来被Sun Microsystems收购&#xff0c;最终被甲骨文公司(Oracle…...

超优秀的三维模型轻量化、格式转换、可视化部署平台!

1、基于 HTML5 和 WebGL 技术&#xff0c;可在主流浏览器上进行快速浏览和调试&#xff0c;支持PC端和移动端 2、自主研发 AMRT 展示框架和9大核心技术&#xff0c;支持3D模型全网多端流畅展示与交互 3、提供格式转换、减面展UV、烘焙等多项单模型和倾斜摄影模型轻量化服务 4、…...

云原生全栈监控解决方案(全面详解)

【作者】JasonXu 前言 当前全球企业云化、数字化进程持续加速&#xff0c;容器、微服务等云原生技术在软件架构中快速渗透&#xff0c;IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型&#xff0c;以及为了考虑系统的弹性、效率&#xff0c;企业软件开发中…...

代码随想录二刷 | 回溯 |复原IP地址

代码随想录二刷 &#xff5c; 回溯 &#xff5c;复原IP地址 题目描述解题思路代码实现 题目描述 93.复原IP地址 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&am…...

windows资源管理器占用过高CPU的问题

最近&#xff0c;笔者的电脑在进行文件操作时变得异常的卡顿&#xff0c;打开任务管理器发现windows资源管理器占用了50%-80%的CPU。这里指的文件操作包括但不限于解压&#xff0c;复制&#xff0c;粘贴&#xff0c;甚至重命名一个文件夹都会引起50%的CPU占用。起初笔者认为可能…...

redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

Redis的数据类型 Redis 提供了丰富的数据类型&#xff0c;常见的有五种&#xff1a; String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&am…...

UE 可靠UDP实现原理

发送 我们的消息发送都是通过 UChannel 来处理的&#xff0c;通过调用 UChannel::SendBunch 统一处理。 发送的 Bunch 是以 FOutBunch 的形式存在的。当 bReliable 为 True 的时候&#xff0c;表示 Bunch 是可靠的。 发送逻辑直接从UChannel::SendBunch处开始分析 1、大小限…...

智慧博物馆信息化系统建设(1)

博物馆RFID藏品管理系统 博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修复等一系列工作外,还需要把有关藏品的信息迅速、正确地提供给利用者。要提高保管工作的效率,达到现代化的科学管理,从发展趋势看,进…...

【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)

目录 一、二叉树的创建(伪)二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 三、二叉树节点个数及高度3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3二叉树第k层节点个数3.4 二叉树查找值为x的节点 四、二叉树的创建(真) 一、二叉树的创建(伪) 在学习二叉树的基本操作前…...

Cesium for Unity包无法加载

太上老君急急如律⚡令⚡ &#x1f959;关闭UnityHub&#x1f9c0;启动梯子&#x1f96a;cmd 启动UnityHub &#x1f959;关闭UnityHub &#x1f9c0;启动梯子 &#x1f96a;cmd 启动UnityHub 把批处理启动文件&#x1f448;中的exe的路径换成自己的安装目录&#xff01;保存…...

Leetcode—40.组合总和II【中等】

2023每日刷题&#xff08;七十七&#xff09; Leetcode—40.组合总和II 算法思想 实现代码 class Solution { public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int…...

vscode连不上虚拟机,一直密码错误

最近在做毕设&#xff0c;但是vscode使用连接不上虚拟机&#xff0c;我以为是网络配置的问题&#xff0c;一顿查阅没找到原因。 后来查了一下ssh的日志&#xff0c;发现ssh有消息&#xff0c;但是也提示密码错误。 没找到密码配置格式什么的&#xff0c;经查看sshd配置文件发现…...

力扣每日一题 --- 972. 相等的有理数

本题中的一个难点是怎么判断是否相等&#xff0c;如果自己写判断的话是不是很麻烦&#xff0c;判断整数之后再去判断小数部分&#xff0c;那么我们这题的另一个难点就要登场了&#xff0c;第一个难点让本题的情况变得复杂&#xff0c;第二个难点让本题变得很难想到怎么判断&…...

EXECL 单元格字符串链接 CONCAT :应用:将一行数据转为json

源&#xff1a; 目标 函数表示 CONCAT("data", CHAR(10), "{", CHAR(10), " ", "ulAlarmId : ", A5, CHAR(10), " ", "ulAlarmLevel : ", D5, CHAR(10)," ", "bBo…...

基于Python实现人脸识别相似度对比

目录 引言背景介绍目的和意义 人脸识别的原理人脸图像获取人脸检测与定位人脸特征提取相似度计算 基于Python的人脸相似度对比实现数据集准备人脸图像预处理特征提取相似度计算 引言 背景介绍 人脸识别技术是一种通过计算机对人脸图像进行分析和处理&#xff0c;从而实现自动识…...

CSS 蜡烛效果

<template><view class="holder"><!-- 身子 --><view class="candle"><!-- 光源 --><view class="blinking-glow"></view><!-- 火星子 --><view class="thread"></view>…...

渗透测试之Kali如何利用CVE-2019-0708漏洞渗透Win7

环境: 1.攻击者IP:192.168.1.10 系统: KALI2022(vmware 16.0) 2.靶机IP:192.168.1.8 系统:Windows 7 6.1.7601 Service Pack 1 Build 7601 已开启远程协助RDP服务开启了3389端口 问题描述: KALI 如何利用CVE-2019-0708漏洞渗透Win7 解决方案: 1.打开kali,msf搜索…...

Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍 Docker 在…...

LeetCode 410. 分割数组的最大值

一、题目 1、题目描述 给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组。 设计一个算法使得这 k 个子数组各自和的最大值最小。 2、接口描述 ​ class Solution { public:int splitArray(vector<int>& nums, int …...

linux shell脚本 基础认识

Linux 系统中的 Shell 是一个特殊的应用程序&#xff0c;它介于操作系统内核与用户之间&#xff0c;充当 了一个“命令解释器”的角色&#xff0c;负责接收用户输入的操作指令&#xff08;命令&#xff09;并进行解释&#xff0c;将需要执行的操作传递给内核执行&#xff0c;并…...

一文(10图)了解Cornerstone3D核心概念(万字总结附导图)

Cornerstone3D介绍 Cornerstone3D是一个专门为处理三维医学影像而设计的JavaScript库。 它是Cornerstone项目的一部分&#xff0c;旨在为医学影像社区提供高性能、可扩展且易于使用的开源Web工具&#xff0c;专注于提供交互式的3D医学图像浏览体验&#xff0c;适用于多种医学…...

牛客网-----跳石头

题目描述&#xff1a; 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行&#xff0c;河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间&#xff0c;有N块岩石(不含起点和终点的岩石)。在比赛过程中&#xff0…...

用ChatGPT教学、科研!大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…...

运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心

目 录 一、视频智能运维平台介绍 &#xff08;一&#xff09;平台概述 &#xff08;二&#xff09;结构图 &#xff08;三&#xff09;功能介绍 1、运维监控 2、视频诊断 3、巡检管理 4、告警管理 5、资产管理 6、工单管理 7、运维…...