蓝桥杯单片机第十一届国赛 真题+代码

news2024/11/17 7:31:28

 

 

 

 

iic.c

/*	#   I2C代码片段说明
	1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
	2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题
		中对单片机时钟频率的要求,进行代码调试和修改。
*/
#include <STC15F2K60S2.H>
#include "iic.h"
#include "intrins.h"

sbit scl = P2^0;
sbit sda = P2^1;

#define DELAY_TIME	5

//
static void I2C_Delay(unsigned char n)
{
    do
    {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();		
    }
    while(n--);      	
}

//
void I2CStart(void)
{
    sda = 1;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 0;
	I2C_Delay(DELAY_TIME);
    scl = 0;    
}

//
void I2CStop(void)
{
    sda = 0;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 1;
	I2C_Delay(DELAY_TIME);
}

//
void I2CSendByte(unsigned char byt)
{
    unsigned char i;
	
    for(i=0; i<8; i++){
        scl = 0;
		I2C_Delay(DELAY_TIME);
        if(byt & 0x80){
            sda = 1;
        }
        else{
            sda = 0;
        }
		I2C_Delay(DELAY_TIME);
        scl = 1;
        byt <<= 1;
		I2C_Delay(DELAY_TIME);
    }
	
    scl = 0;  
}

//
unsigned char I2CReceiveByte(void)
{
	unsigned char da;
	unsigned char i;
	for(i=0;i<8;i++){   
		scl = 1;
		I2C_Delay(DELAY_TIME);
		da <<= 1;
		if(sda) 
			da |= 0x01;
		scl = 0;
		I2C_Delay(DELAY_TIME);
	}
	return da;    
}

//
unsigned char I2CWaitAck(void)
{
	unsigned char ackbit;
	
    scl = 1;
	I2C_Delay(DELAY_TIME);
    ackbit = sda; 
    scl = 0;
	I2C_Delay(DELAY_TIME);
	
	return ackbit;
}

//
void I2CSendAck(unsigned char ackbit)
{
    scl = 0;
    sda = ackbit; 
	I2C_Delay(DELAY_TIME);
    scl = 1;
	I2C_Delay(DELAY_TIME);
    scl = 0; 
	sda = 1;
	I2C_Delay(DELAY_TIME);
}

unsigned int Read_v()
{
	unsigned int temp;
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x01);
	I2CWaitAck();
	I2CStart();
	I2CSendByte(0x91);
	I2CWaitAck();
	temp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	return temp;
}

 iic.h

#ifndef __iic_h
#define __iic_h

static void I2C_Delay(unsigned char n);
void I2CStart(void);
void I2CStop(void);
void I2CSendByte(unsigned char byt);
unsigned char I2CReceiveByte(void);
unsigned char I2CWaitAck(void);
void I2CSendAck(unsigned char ackbit);
unsigned int Read_v();


#endif

onewire.c

/*	# 	单总线代码片段说明
	1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
	2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题
		中对单片机时钟频率的要求,进行代码调试和修改。
*/

//
#include <STC15F2K60S2.H>
#include "onewire.h"

sbit DQ = P1^4;

void Delay_OneWire(unsigned int t)  
{
	unsigned char i;
	while(t--){
		for(i=0;i<12;i++);
	}
}

//
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//
unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

//
bit init_ds18b20(void)
{
  	bit initflag = 0;
  	
  	DQ = 1;
  	Delay_OneWire(12);
  	DQ = 0;
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); 
    initflag = DQ;     
  	Delay_OneWire(5);
  
  	return initflag;
}

unsigned int Read_temp()
{
	unsigned char LSB ,MSB;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB = Read_DS18B20();
	MSB = Read_DS18B20();
	return (MSB << 8 | LSB ) * 0.625;
}

onewire.h

#ifndef __onewire_h
#define __onewire_h

void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
unsigned char Read_DS18B20(void);
bit init_ds18b20(void);
unsigned int Read_temp();


#endif

ds1302.c

/*	# 	DS1302代码片段说明
	1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
	2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题
		中对单片机时钟频率的要求,进行代码调试和修改。
*/								

//
#include <STC15F2K60S2.H>
#include "ds1302.h"
#include "intrins.h"

sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3;

code unsigned char Write_addr[] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
code unsigned char Read_addr[] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char time[] = {0x50,0x59,0x16};
void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK = 0;
		SDA = temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   

//
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat);		
 	RST=0; 
}

//
unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();
	return (temp);			
}

void Write_time()
{
	char i;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i = 0;i < 3;i++)
		Write_Ds1302_Byte(Write_addr[i],time[i]);
	Write_Ds1302_Byte(0x8e,0x80);
}

void Read_time()
{
	char i;
	for(i = 0;i < 3;i++)
		time[i] = Read_Ds1302_Byte(Read_addr[i]);
}

ds1302.h

#ifndef __ds1302_h
#define __ds1302_h

void Write_Ds1302(unsigned  char temp) ;
void Write_Ds1302_Byte( unsigned char address,unsigned char dat ) ;
unsigned char Read_Ds1302_Byte ( unsigned char address );
void Write_time();
void Read_time();


#endif

sys.c

#include <STC15F2K60S2.H>
#include "sys.h"
#include "intrins.h"
void Delay_ms(unsigned int t)		//@12.000MHz
{
	while(t--)
	{
		unsigned char i, j;
		i = 12;
		j = 169;
		do
		{
			while (--j);
		} while (--i);
	}
}

void Select_Hc573(char n)
{
	switch(n)
	{
		case 4:P2 = P2 & 0x1f | 0x80;break;
		case 5:P2 = P2 & 0x1f | 0xa0;break;
		case 6:P2 = P2 & 0x1f | 0xc0;break;
		case 7:P2 = P2 & 0x1f | 0xe0;break;
	}
	P2 = P2 & 0x1f;
}

void Sys_Init()
{
	P0 = 0x00;
	Select_Hc573(5);
	P0 = 0xff;
	Select_Hc573(4);
}

void Select_Bit(unsigned char pos,dat)
{
	P0 = 0x01 << pos;
	Select_Hc573(6);
	P0 = dat;
	Select_Hc573(7);
	Delay_ms(1);
	P0 = 0xff;
	Select_Hc573(7);
}

sys.h

#ifndef __sys_h
#define __sys_h

void Delay_ms(unsigned int t);
void Select_Hc573(char n);
void Sys_Init();
void Select_Bit(unsigned char pos,dat);

#endif

main.c

#include <STC15F2K60S2.H>
#include "ds1302.h"
#include "iic.h"
#include "onewire.h"
#include "sys.h"

sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;
sbit C1 = P4^4;
sbit C2 = P4^2;
sbit C3 = P3^5;
sbit C4 = P3^4;

code unsigned char SMG[] = { ~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x71,~0x76};
extern unsigned char time[];
unsigned int temp;//温度
unsigned int v;//电压
bit v_stata;//	1-亮	0-暗
bit flag_500ms;
bit flag_10ms;
unsigned char count1;
unsigned int count2,count3;
char param_time = 17;//时间参数
char param_temp = 25;//温度参数
char param_led = 4;//led参数
unsigned char key_val;//键值
bit mode;//0-数据界面	1-参数界面
unsigned char mode_dat;//0-时间	1-温度	2-亮暗状态
unsigned char mode_param;//0-时间	1-温度	2-LED
bit L3_flag;//	0-灭	1-亮

void Display_time()//时间界面
{
	Select_Bit(0,SMG[time[2] / 16]);
	Select_Bit(1,SMG[time[2] % 16]);
	Select_Bit(2,SMG[0]);
	Select_Bit(3,SMG[time[1] / 16]);
	Select_Bit(4,SMG[time[1] % 16]);
	Select_Bit(5,SMG[0]);
	Select_Bit(6,SMG[time[0] / 16]);
	Select_Bit(7,SMG[time[0] % 16]);
}

void Display_temp()//温度界面
{
	Select_Bit(0,SMG[10]);
	Select_Bit(5,SMG[temp / 100]);
	Select_Bit(6,SMG[temp / 10 % 10] - 0x80);
	Select_Bit(7,SMG[temp % 10]);
}

void Display_v()//亮暗状态显示
{
	Select_Bit(0,SMG[11]);
	Select_Bit(2,SMG[v / 100] - 0x80);
	Select_Bit(3,SMG[v / 10 % 10]);
	Select_Bit(4,SMG[v % 10]);
	Select_Bit(7,SMG[v_stata]);
}

void Display_param_time()//时间参数界面
{
	Select_Bit(0,SMG[5]);
	Select_Bit(1,SMG[4]);
	Select_Bit(6,SMG[param_time / 10]);
	Select_Bit(7,SMG[param_time % 10]);
}

void Display_param_temp()//温度参数界面
{
	Select_Bit(0,SMG[5]);
	Select_Bit(1,SMG[5]);
	Select_Bit(6,SMG[param_temp / 10]);
	Select_Bit(7,SMG[param_temp % 10]);
}

void Display_param_led()//指示灯参数界面
{
	Select_Bit(0,SMG[5]);
	Select_Bit(1,SMG[6]);
	Select_Bit(7,SMG[param_led]);
}

void Timer2Init(void)		//10毫秒@12.000MHz
{
	AUXR &= 0xFB;		//定时器时钟12T模式
	T2L = 0xF0;		//设置定时初值
	T2H = 0xD8;		//设置定时初值
	AUXR |= 0x10;		//定时器2开始计时
	IE2 = 1 << 2;
	EA = 1;
}

void Timer2_isr() interrupt 12
{
	if(++count1 > 50)
	{
		count1 = 0;
		flag_500ms = 1;//光敏电阻半秒刷新
	}
	flag_10ms = 1;//按键扫描刷新
	
	if(!v_stata)//L3判断
	{
		if(++count2 > 300)
		{
			count2 = 0;
			L3_flag = 1;
		}
		count3 = 0;
	}
	else
	{
		count2 = 0;
		if(++count3 > 300)
		{
			count3 = 0;
			L3_flag = 0;
		}
	}
}

unsigned char Key_Scan()//按键扫描函数
{
	unsigned char temp = 0;
	static unsigned char cnt4 = 0;
	static unsigned char cnt5 = 0;
	static unsigned char cnt8 = 0;
	static unsigned char cnt9 = 0;
	if(flag_10ms)
	{
		R3 = 0;
		R1 = R2 = R4 = C1 = C2 = C3 = C4 = 1;
		if(C1 == 0)	cnt5++;
		if(C1 == 1)
		{
			if(cnt5 > 2)	temp = 5;
			cnt5 = 0;
		}
		if(C2 == 0)	cnt9++;
		if(C2 == 1)
		{
			if(cnt9 > 2)	temp = 9;
			cnt9 = 0;
		}
		R4 = 0;
		R1 = R2 = R3 = C1 = C2 = C3 = C4 = 1;
		if(C1 == 0)	cnt4++;
		if(C1 == 1)
		{
			if(cnt4 > 2)	temp = 4;
			cnt4 = 0;
		}
		if(C2 == 0)	cnt8++;
		if(C2 == 1)
		{
			if(cnt8 > 2)	temp = 8;
			cnt8 = 0;
		}
		flag_10ms = 0;
	}
	return temp;
}

void Key_Pro()
{
	switch(key_val)
	{
		case 4:
			mode ^= 1;
			if(!mode)	mode_param = 0;
			else	mode_dat = 0;
		break;
		case 5:
			if(!mode)
			{
				if(++mode_dat > 2)
					mode_dat = 0;
			}
			else
			{
				if(++mode_param > 2)
					mode_param = 0;
			}
		break;
		case 8:
			if(mode)
			{
				switch(mode_param)
				{
					case 0:
						if(--param_time < 0)
							param_time = 23;
					break;
					case 1:
						if(--param_temp < 0)
							param_temp = 99;
					break;
					case 2:
						if(--param_led < 4)
							param_led = 8;
					break;
				}
			}
		break;
		case 9:
			if(mode)
			{
				switch(mode_param)
				{
					case 0:
						if(++param_time > 23)
							param_time = 0;
					break;
					case 1:
						if(++param_temp > 99)
							param_temp = 0;
					break;
					case 2:
						if(++param_led > 8)
							param_led = 4;
					break;
				}
			}
		break;
	}
}

void Led(unsigned char addr,enable)//LED底层代码
{
	static unsigned char temp = 0x00;
	static unsigned char temp_old = 0xff;
	if(enable)	temp |= 0x01 << addr;
	else	temp &= ~(0x01 << addr);
	if(temp != temp_old)
	{
		P0 = ~temp;
		Select_Hc573(4);
		temp_old = temp;
	}
}

void Led_Pro()//LED控制代码
{
	if(param_time <= time[2] / 16 * 10 + time[2] % 16)	Led(0,1);
	else	Led(0,0);
	if(((float)temp) / 10 < param_temp)	Led(1,1);
	else	Led(1,0);
	if(L3_flag)	Led(2,1);
	else	Led(2,0);
	if(!v_stata)
	{
		switch(param_led)
		{
			case 4:
				Led(3,1);Led(4,0);Led(5,0);Led(6,0);Led(7,0);
			break;
			case 5:
				Led(4,1);Led(3,0);Led(5,0);Led(6,0);Led(7,0);
			break;
			case 6:
				Led(5,1);Led(4,0);Led(3,0);Led(6,0);Led(7,0);
			break;
			case 7:
				Led(6,1);Led(4,0);Led(5,0);Led(3,0);Led(7,0);
			break;
		  case 8:
				Led(7,1);Led(4,0);Led(5,0);Led(6,0);Led(3,0);
			break;
		}
	}
	else
	{
		Led(3,0);Led(4,0);Led(5,0);Led(6,0);Led(7,0);
	}
}

void main()
{
	Sys_Init();//系统初始化关闭继电器和蜂鸣器
	Read_temp();//读取温度延时750ms以消除上电显示85
	Delay_ms(750);
	Write_time();//初始化写入时间
	Timer2Init();//定时器2初始化
	while(1)
	{
		temp = Read_temp();//读取温度
		Read_time();//读取时间
		if(flag_500ms)//半秒读取一次光敏电阻电压
		{
			flag_500ms = 0;
			v = Read_v() / 51.0 * 100;
		}
		if(v > 150)	v_stata = 1;
		else	v_stata = 0;
		key_val = Key_Scan();//读取键值
		Key_Pro();//按键处理函数
		Led_Pro();//LED处理函数
		if(!mode)//0-数据界面	1-参数界面
		{
			switch(mode_dat)//0-时间界面	1-温度界面	2-亮暗状态界面
			{
				case 0:Display_time();break;
				case 1:Display_temp();break;
				case 2:Display_v();break;
			}
		}
		else//参数界面下
		{
			switch(mode_param)//0-时间参数界面	1-温度参数界面	2-LED参数界面
			{
				case 0:Display_param_time();break;
				case 1:Display_param_temp();break;
				case 2:Display_param_led();break;
			}
		}
	}
}

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

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

相关文章

8年经验分享 —— 带你从0开始学习自动化框架Airtest

现在市面上做UI自动化的框架很多&#xff0c;包括我们常用的Web自动化框架Selenium&#xff0c;移动端自动化框架Appium。 虽然Selenium和Appium分属同源&#xff0c;而且API都有很多相同的地方&#xff0c;可以无损耗切换&#xff0c;但是还是需要引入不同的库&#xff0c;而…

0005-对于大数据学习与复习,我想给你划个重点

近期陆陆续续的会有一些读者朋友咨询一些学习大数据或者大数据面试的事,由于时间关系,我一般会简单的说一些大方向,然后会让去b站找一些认可度比较高的项目,但是这样的话,总感觉有点敷衍了,还是想好好的给大家画个重点

Springboot -- 按照模板生成docx、pdf文件,docx转pdf格式

使用 poi-tl 根据模板生成 word 文件。 使用 xdocreport 将 docx 文件转换为 pdf 文件。 xdocreport 也支持根据模板导出 word &#xff0c;但是 poi-tl 的功能更齐全&#xff0c;操作更简单&#xff0c;文档清晰。 poi-tl 、xdocreport 内部均依赖了 poi &#xff0c;要注意两…

QT 作业 day4 7/28

1.思维导图 2.手动完成服务器实现 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器 #include <QTcpSocket> //连接客户端套接字 #include <QMessageBox> #include <QList> //套接字容器 #include &l…

极简实现任意版本 SwiftUI 中隐藏和显示系统底部横条(Home Indicator)

功能需求 有时我们希望在 SwiftUI 界面中隐藏系统底部横条(Home Indicator),虽然从 iOS 16(SwiftUI 4.0)开始, 对此提供了专门的原生方法,不过如何在之前版本的 SwiftUI 中完成此功能呢? 如上图所示,我们在任意版本 SwiftUI 中实现了系统底部横条的显示和隐藏功能,…

栈和队列第二弹,完结篇

&#x1f49b;1.队列的基本底层实现 public class MyQueue {int array[];int usedsize0;public MyQueue(){this.arraynew int [5];} &#x1f499;2.判断是否满&#xff0c;满了需要扩容 Arrays.copyOf(数组&#xff0c;数组的长度&#xff09;&#xff1b;我常常会忘记哈…

数据库的介绍和分类

目录 一、数据库的介绍和分类 二、命令行客户端 三、数据操作 四、查询的基本操作 五、条件查询 六、分组和聚合 资料获取方法 一、数据库的介绍和分类 数据库&#xff1a;长期存储在计算机内、有组织的数据集合 数据库的分类&#xff1a; 关系型数据库 以表格的形式…

Redis - 三大缓存问题(穿透、击穿、雪崩)

缓存穿透 概念&#xff1a; 查询一个数据库中也不存在的数据&#xff0c;数据库查询不到数据也就不会写入缓存&#xff0c;就会导致一直查询数据库 解决方法&#xff1a; 1. 缓存空数据 如果数据库也查询不到&#xff0c;就把空结果进行缓存 缺点是 - 消耗内存 2. 使用布…

【牛客面试必刷TOP101】Day1.反转链表和合并两个排序的链表

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

思科视频会议改造为云视频会议

复杂、封闭、昂贵是传统硬件视频会议的明显特点&#xff0c;面对现在多样化的参会需求&#xff0c;传统硬件视频会议固定在会议室的方式需要改变&#xff0c;并需要多层级来参与的时候&#xff0c;我们如何部署视频会议室升级改造方案。 用户需求&#xff1a; 新生活集团(中国…

爬虫分析必备技能:Chrome浏览器使用$x()快速提取列表内容

尝试快速打印一个页面的列表信息&#xff0c;我尝试用console.log$x()快速打印结果。 先找到一个合适的测试对象&#xff0c;比如csdn首页的热点&#xff1a; 按F12进入开发者工具找到这个列表的xpath&#xff1a; 根据我写的xpath找到了5个&#xff1a; 尝试把其中一个的标题…

【ABAP】事务码F-02/FB01/FB02 会计凭证过账BTE增强

需求&#xff1a;事务码F-02/FB01/FB02进行过账时&#xff0c;对行项目数据进行校验 流程&#xff1a; 事务码FIBF——环境&#xff08;信息系统&#xff08;处理&#xff09;&#xff09; 执行 找到1120事件选中&#xff0c;点击模式函数模块 点①复制函数&#xff0c;②出函…

百题千解计划【CSDN每日一练】计数问题(附解析+多种实现方法:Python、Java、C、C++、JavaScript、C#、go)

人要多久才能成熟!一瞬间?还是一辈子? 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者🏆 �

用WhatsApp开拓和跟进客户,需要注意这些雷点

我们很多新手小白在利用WhatsApp开拓和维护客户的时候&#xff0c;总是容易犯一些错误&#xff0c;踩到雷点&#xff0c;这不利于客户对企业的印象&#xff0c;不利于增长&#xff0c;下面我们来说一些需要注意的点&#xff1a; 1、专业正确的用语 不管外贸人是跟进哪个国家…

tinkerCAD案例:16. 用字母创建你的名字

tinkerCAD案例&#xff1a;16. Create Your Name From Letters 用字母创建你的名字 letters together so they can be 3D printed. While this could be done with any word, in this example we will use my last name. In the make it your own lesson I provide additional…

全球掀复现「室温常压超导体」热潮,中国队已肝十几小时,韩国团队却内讧了

鱼羊 尚恩 发自 凹非寺 量子位 | 公众号 QbitAI 室温常压超导&#xff0c;这回是真的闹大了。 不止是在国内连上热搜&#xff0c;火速出圈引爆大众讨论。 铅磷灰石价格也在24小时之内迅速被炒了起来。 而物理界的科学家们&#xff0c;更是第一时间拉开了一场全球复现行动。 …

网络安全(黑客)自学误区

前言 网络安全是当今社会中至关重要的议题。随着科技的迅猛发展&#xff0c;网络已经渗透到我们生活的方方面面&#xff0c;给我们带来了巨大的便利和机遇。然而&#xff0c;网络也存在着各种风险和威胁&#xff0c;如黑客攻击、数据泄露等。因此&#xff0c;学习网络安全知识…

IDEA插件YapiUpload配置YApi

前后端分离开发项目&#xff0c;后端提供接口文档&#xff0c;这次使用的是YApi&#xff0c;不想一个个接口添加&#xff0c;所以用插件批量导入。 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发…

Debezium日常分享系列之:定制Debezium 信号发送和通知

Debezium日常分享系列之&#xff1a;定制Debezium 信号发送和通知 一、自定义信号和通知通道二、结论 Debezium 2.3 在信号和通知功能方面引入了新的改进。除了 Debezium 提供的预定义信号和通知通道之外&#xff0c;您还可以设置新的信号和通知通道。此功能使用户能够自定义系…

数学建模学习(5):数学建模各类题型及解题方案

一、数学建模常见的题型 总体来说&#xff0c;数学建模赛题类型主要分为&#xff1a;评价类、预测类和优化类三种&#xff0c;其中优化类是最常见的赛题类 型&#xff0c;几乎每年的地区赛或国赛美赛等均有出题&#xff0c;必须要掌握并且熟悉。 二、评价类赛题 综合评价是数学…