蓝桥杯-单片机基础20——第14届省赛真题代码详解

网上传言说14届最难,实际做下来感觉确实是这样的

本试题,需要将矩阵键盘短接,J3的555定时器输出口与P34短接

1.比赛题目

2.编程的大致思路

  • 首先,完成基础代码与数码管的不同窗口,定义大部分要用到的变量,并测试每个窗口是否显示正常
  • 然后,添加外设模块,并逐个测试模块在不同窗口下的显示效果
  • 接着,进行按键的定义和数值处理函数的优化,将逻辑功能整体实现清晰
  • 最后,对杂七杂八的led等部分进行设置,测试各个功能是否正常

3.编程心得

  1. 555定时器,除了要短接引脚,还要用RB3调节频率的数值
  2. 光敏电阻数字跳动太大:加1ms延时,加中断刷新,加最后一步等待应答,加临时变量判断数据正确再写入
  3. ds18b20,注意你采用的是不是三位数进行记录
  4. ds1302,最好用中断,每隔1s提取一遍时间到变量中,再用数码管显示
  5. 对于刷新频率为1s为单位的变量,可以直接读取ds1302的秒位,判断是否达到1s的整数倍
  6. 程序必须要有一个50us的中断处理,有了50us其他的刷新很好确定
  7. 对于led的操作。当led的变化有规律时——建立数组存放led的状态。当led没有规律时——一定要学会位运算,直接对变量value_led进行位操作,然后利用中断传入led处理函数
  8. 对于io编程模式,要注意对锁存器常关闭。同时采用先赋值P0端口,再打开锁存器方式,这样有效防止数据冲突。
  9. 所有的外设,除了555以外,都可以设置一个刷新的标志变量,可以提升系统运行效率

4.代码参考

4.1 头文件

onewire.h        ds1302.h        iic.h

和上一篇博客一样,和15届官方发的没有区别。为了节省篇幅这里不放出,可以参考上一篇文章,基本没有变动

basecode.h

#ifndef __BASECODE_H__
#define __BASECODE_H__

void select_HC573 ( unsigned char channal );
void state_SMG ( unsigned char pos_SMG , unsigned char value_SMG );
void state_SMG_all ( unsigned char value_SMG_all );
void state_relay ( unsigned char value_relay );
void state_led ( unsigned char value_led );
void init_sys ();
void init_ds1302 ();
void init_temperature ();

#endif

4.2 底层文件

onewire.c        ds1302.c        iic.c        和常规一样,也和上一篇博客一样

basecode.c


#include <ds1302.h>
#include <onewire.h>
#include <reg52.h>
#include <intrins.h>


//锁存器通道选择函数
void select_HC573 ( unsigned char channal )
{
	switch ( channal )
	{
		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;
		case 0:
			P2 = ( P2 & 0x1f ) | 0x00;
		break;
	}
}

//单位数码管显示函数
void state_SMG ( unsigned char pos_SMG , unsigned char value_SMG )
{
	select_HC573 ( 0 );
	P0 = 0x01 << pos_SMG;	
	select_HC573( 6 );
	select_HC573 ( 0 );
	P0 = value_SMG;
	select_HC573( 7 );
	select_HC573 ( 0 );
}

//全位数码管静态显示
void state_SMG_all ( unsigned char value_SMG_all )
{
	select_HC573 ( 0 );
	P0 = 0xff;	
	select_HC573( 6 );
	select_HC573 ( 0 );
	P0 = value_SMG_all;
	select_HC573( 7 );
	select_HC573 ( 0 );
}	


//led灯光控制函数
void state_led ( unsigned char value_led )
{
	select_HC573 ( 0 );
	P0 = 0xff;
	select_HC573 ( 4 );
	P0 = value_led;
	select_HC573 ( 4 );	
	select_HC573 ( 0 );
}

//初始化系统,关闭继电器和蜂鸣器
void init_sys ()
{
	select_HC573 ( 0 );
	P0 = 0xff;	
	select_HC573 ( 4 );
	select_HC573 ( 0 );
	P0 = 0x00;
	select_HC573 ( 5 );
	select_HC573 ( 0 );

}



void init_temperature ()
{
	unsigned char LSB,MSB;
	init_ds18b20();
	Write_DS18B20(0xcc);	
	Write_DS18B20(0x44);
	
	do{
		init_ds18b20();
		Write_DS18B20(0xcc);	
		Write_DS18B20(0xbe);
		
		LSB = Read_DS18B20();
		MSB = Read_DS18B20();
		
		MSB = ( MSB << 4 ) | ( LSB >> 4 );
	}while ( MSB == 85 );
}

4.3主函数文件

#include <reg52.h>
#include <intrins.h>
#include "onewire.h"
#include "iic.h"
#include "ds1302.h"
#include "basecode.h"

sfr P4 = 0xc0;
sfr AUXR = 0x8e;
sbit C1 = P4^4;
sbit C2 = P4^2;
sbit H1 = P3^3;
sbit H2 = P3^2;

unsigned char code duanma[20] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
                                 0x88,0x83,0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0x89,0x8c};
unsigned char code duanma_dot[16]={ 0x40 , 0x79 , 0x24 , 0x30 , 0x19 , 0x12 , 0x02 , 0x78 ,0x00 , 0x10 };
unsigned char code Write_address [7] = { 0x80 , 0x82 , 0x84 , 0x86 , 0x88 , 0x8a , 0x8c};
unsigned char code Read_address [7] = { 0x81 , 0x83 , 0x85 , 0x87 , 0x89 , 0x8b , 0x8d };

//2022year 3month 31day 5 23 59 50
unsigned char date_ds1302 [7] = { 0x50 , 0x50 , 0x23 , 0x31 , 0x03 , 0x05 , 0x22 };

unsigned int humidity = 0;
unsigned char value_led = 0xff;
unsigned char trg_count = 0;
unsigned char trg_time_hour = 0x00;
unsigned char trg_time_min = 0x00;
unsigned char trg_time_second = 0x00;
unsigned int max_temperature = 0;
unsigned int average_temperature = 0;
unsigned int old_temperature = 0;
unsigned int max_humidity = 0;
unsigned int average_humidity = 0;
unsigned int old_humidity = 0;
unsigned char SMG_flag = 1;

void flash_SMG ();
void rd1running ();		
void flash_date ();
void valuerunning ();	
void keyrunning ();

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

	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);
}


bit flash_rd1 = 0;
unsigned char rd1_value = 0;
void rd1running()
{
	unsigned char tmp = 0;
	if ( flash_rd1 == 1 )
	{
		I2CStart();
		I2CSendByte(0x90);
		I2CWaitAck();
		I2CSendByte(0x01);
		I2CWaitAck();
		I2CStop();
		Delay1ms();
		I2CStart();
		I2CSendByte(0x91);
		I2CWaitAck();
		tmp = I2CReceiveByte();
		I2CWaitAck();
		I2CSendAck(1);
		I2CStop();
		
		flash_rd1 = 0;
	}
	
	if ( tmp<220 && tmp>0 )
	{
		rd1_value = tmp;
	}
}

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

	_nop_();
	_nop_();
	i = 32;
	j = 236;
	k = 16;
	do
	{
		do
		{
			while (--k);
		} while (--j);
		rd1running ();		
		flash_date ();
		valuerunning ();
		keyrunning ();
	} while (--i);
}

bit flash_ds18b20 = 0;
unsigned int temperature = 0;
unsigned int set_temperature =  300;
void flash_temperature ()
{
	if ( flash_ds18b20 == 1 )
	{
		unsigned char LSB,MSB;
		old_temperature = temperature;
		
		init_ds18b20();
		Write_DS18B20(0xcc);	
		Write_DS18B20(0x44);
		Delay700ms();
		init_ds18b20();
		Write_DS18B20(0xcc);	
		Write_DS18B20(0xbe);
		
		LSB = Read_DS18B20();
		MSB = Read_DS18B20();
		
	 
		temperature = MSB;
		temperature = ( temperature << 8 ) | LSB;
		temperature = (temperature >> 4)*10 + (LSB & 0x0f)*0.625;
		
		flash_ds18b20 = 0;
	}
 
}
 
	
void init_ds1302 ()
{
	unsigned char i;
	Write_Ds1302_Byte ( 0x8e , 0x00 );
	for ( i=0 ; i<7 ; i++ )
	{
		Write_Ds1302_Byte ( Write_address[i] , date_ds1302[i] );
	}
	Write_Ds1302_Byte ( 0x8e , 0x80 );

}

bit flash_ds1302 = 0;
void flash_date()
{
	if ( flash_ds1302 == 1 )
	{
		unsigned char i;
		for ( i=0 ; i<7 ; i++ )
		{
			date_ds1302[i] = Read_Ds1302_Byte ( Read_address[i] );
		}
		
		flash_ds1302 = 0;
	}
}


//==============================================================================
void init_timer01 ()		
{
	AUXR &= 0xBF;		//定时器时钟12T模式
	TMOD = 0x06;		//设置定时器模式
	TL1 = 0xCE;		//设置定时初值
	TH1 = 0xFF;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	
	TL0 = 0xFF;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	
	EA = 1;
	ET0 = 1;
	ET1 = 1;
}

unsigned int count_timer0 = 0;
void timer0_service () interrupt 1
{	
	count_timer0 ++;	
}
//=============================================================================

bit flag_100ms = 0;
unsigned int count_fre = 0;
unsigned char count_50us = 0;
unsigned char count_5ms = 0;
unsigned char flash_count = 0;//数码管刷新位
unsigned char date_hour;
unsigned char date_min;
unsigned char date_second;
void timer1_service () interrupt 3
{
	
	if ( ++count_50us == 200 )
	{
		flash_rd1 = 1;
		count_50us = 0;
	}
	
	if ( count_50us % 40 == 0 ) 
	{
		if ( SMG_flag == 1 )//窗口1
		{
			if ( ++flash_count == 9 )
			{
				flash_count = 0;
			}
		}
		else if ( SMG_flag == 2 )//窗口2
		{
			if ( ++flash_count > 7 )
			{
				flash_count = 0;
			}
		}
		else if ( SMG_flag == 3 )//窗口3
		{
			if ( ++flash_count > 7 )
			{
				flash_count = 0;
			}
		}
		else if ( SMG_flag == 4 )//窗口4
		{
			if ( ++flash_count == 9 )
			{
				flash_count = 0;
			}
		}
		else if ( SMG_flag == 5 )//窗口5
		{
			if ( ++flash_count > 3 )
			{
				flash_count = 0;
			}
		}
		else if ( SMG_flag == 6 )//窗口6
		{
			if ( ++flash_count > 6 )
			{
				flash_count = 0;
			}
		}
		
		flash_SMG ();	//刷新数码管一位	
	}
	
	if ( count_50us % 100 == 0 )
	{
		count_5ms++;
		if ( count_5ms == 200 )
		{
			count_5ms = 0;
			count_fre = count_timer0;
			count_timer0 = 0;
			
			date_hour = date_ds1302[2];  //时间提取出来显示,数码管才不会闪烁
			date_min = date_ds1302[1];
			date_second = date_ds1302[0];			
		}
		if ( count_5ms % 20 == 0 )
		{
			flag_100ms = ~flag_100ms;
		}
	}
	
	if ( count_50us % 50 == 0 )
	{
		flash_ds18b20 = 1;
		state_led ( value_led );
	}	
	
	if ( count_50us % 40 == 0 )
	{
		flash_ds1302 = 1;
		
	}
	
}

bit rd1_3s = 0;
unsigned char save_SMG_flag = 1;
void valuerunning ()
{
	if ( count_fre >= 200 && count_fre <= 2000 )
	{
		value_led |= 0x10;
		old_humidity = humidity;
		humidity = count_fre /22.5*10;
		
		if ( max_humidity < humidity )
		{
			max_humidity = humidity;
		}
		
		average_humidity = (average_humidity + humidity)/2;
	}
	else
	{
		humidity = 0;
		value_led &= 0xef;
	}
	
	if ( temperature != 0 )
	{
		if ( max_temperature < temperature && temperature < 999 )
		{
			max_temperature = temperature;
		}
		
		average_temperature = (average_temperature + temperature)/2;
	}
	
	if ( rd1_value < 90 && rd1_3s == 0 )
	{
		trg_count ++;
		trg_time_hour = date_ds1302[2];
		trg_time_min = date_ds1302[1];
		trg_time_second = date_ds1302[0];	
		save_SMG_flag = SMG_flag;		
	}	
	
	if ( trg_count != 0 )
	{
		if ( date_ds1302[0] - trg_time_second <= 0x03 )
		{
			rd1_3s = 1;
			SMG_flag = 6;
		}
		else
		{
			if ( rd1_3s == 1 )
			{
				SMG_flag = save_SMG_flag;
			}
			rd1_3s = 0;
		}
	}
	
	if ( SMG_flag == 1 )
	{
		value_led = ( value_led | 0x07 ) & 0xfe;
	}
	else if ( SMG_flag == 2 || SMG_flag == 3 || SMG_flag == 4 )
	{
		value_led = ( value_led | 0x07 ) & 0xfd;
	}
	else if ( SMG_flag == 6 )
	{
		value_led = ( value_led | 0x07 ) & 0xfb;
	}
	else
	{
		value_led = ( value_led | 0x07 ) ;
	}
	
	if ( temperature > set_temperature )
	{
		if ( flag_100ms == 0 )
		{
			value_led &= 0xf7;
		}
		else 
		{
			value_led |= 0x08;
		}
	}
	else
	{
		value_led |= 0x08;
	}

	
	if ( trg_count >1 && temperature > old_temperature && humidity > old_humidity )
	{
		value_led &= 0xbf;
	}
	else
	{
		value_led |= 0x40;
	}
	

	
}

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

	i = 47;
	j = 174;
	do
	{
		while (--j);
	} while (--i);
}

bit key9_2s = 0;
bit flag_clear = 0;
unsigned char key9_time = 0x00;
void keyrunning ()
{
	C1 = 0;
	C2 = H1 = H2 = 1;
	if ( H1 == 0 )
	{
		Delay4ms();
		if ( H1 == 0 )//S4
		{
			switch ( SMG_flag )
			{
				case 1:
					SMG_flag = 2;
				break;
				case 2:case 3:case 4:
					SMG_flag = 5;
				break;
				case 5:
					SMG_flag = 1;
				break;
			}
			while ( H1 == 0 );
		}
	}
	else if ( H2 == 0 )
	{
		Delay4ms();
		if ( H2 == 0 )//S5
		{
			if ( SMG_flag != 1 )
			{
				switch ( SMG_flag )
				{
					case 2:
						SMG_flag = 3;
					break;
					case 3:
						SMG_flag = 4;
					break;
					case 4:
						SMG_flag = 2;
					break;
				}
			}
			while ( H2 == 0 );	
		}
	}

	C2 = 0;
	C1 = H1 = H2 = 1;
	if ( H1 == 0 )
	{
		Delay4ms();
		if ( H1 == 0 )//S8
		{
			if ( SMG_flag == 5 )
			{
				set_temperature += 10;
				if ( set_temperature == 1000 )
				{
					set_temperature = 990;
				}
			}
			while ( H1 == 0 );
		}
	}
	else if ( H2 == 0 )
	{
		Delay4ms();
		if ( H2 == 0 )//S9
		{
			if ( SMG_flag == 5 )
			{
				set_temperature -= 10;
				if ( set_temperature > 990 )
				{
					set_temperature = 0;
				}
			}
							
			while ( H2 == 0 )
			{
				if ( SMG_flag == 4 && key9_2s == 0 )
				{
					key9_2s = 1;
					key9_time = date_ds1302[0];
				}

				if ( date_ds1302[0] - key9_time > 0x02 )
				{
					key9_2s = 0;
					flag_clear = 1;
					break;
				}
			}
			while ( H2 == 0 );
			if ( flag_clear == 1 )
			{
				trg_count = 0;
				trg_time_hour = 0;
				trg_time_min = 0;
				trg_time_second = 0;	
				flag_clear = 0;
			}
		}
	}
}	
			

		
	
void flash_SMG ()
{
	state_SMG_all ( 0xff );
	
	if ( SMG_flag == 1 )
	{
		switch ( flash_count )
		{
			case 0 :	
				state_SMG ( 0 , duanma[date_hour/16] );
			break;
			case 1 :	
				state_SMG ( 1 , duanma[date_hour%16] );
			break;
			case 2 :	
				state_SMG ( 2 , duanma[16] );
			break;
			case 3 :	
				state_SMG ( 3 , duanma[date_min/16] );
			break;
			case 4 :	
				state_SMG ( 4 , duanma[date_min%16] );
			break;
			case 5 :	
				state_SMG ( 5 , duanma[16] );
			break;
			case 6 :	
				state_SMG ( 6 , duanma[date_second/16] );
			break;
			case 7 :	
				state_SMG ( 7 , duanma[date_second%16] );
			break;
			case 8 :	
				state_SMG_all ( 0xff );
			break;
		}
	}
	else if ( SMG_flag == 2 )
	{
		if ( trg_count == 0 )
		{
			state_SMG ( 0 , duanma[12] );
		}
		else
		{
			switch ( flash_count )
			{
				case 0 :	
					state_SMG ( 0 , duanma[12] );
				break;
				case 1 :	
					state_SMG ( 2 , duanma[max_temperature/100] );
				break;
				case 2 :	
					state_SMG ( 3 , duanma[max_temperature/10%10] );
				break;
				case 3 :
					state_SMG ( 4 , duanma[16] );				
				break;
				case 4 :	
					state_SMG ( 5 , duanma[average_temperature/100] );
				break;
				case 5 :
					state_SMG ( 6 , duanma_dot[average_temperature/10%10] );			
				break;
				case 6 :	
					state_SMG ( 7 , duanma[average_temperature%10] );
				break;
				case 7 :	
					state_SMG_all ( 0xff );
				break;
			}
		}
	}		
	else if ( SMG_flag == 3 )
	{
		if ( trg_count == 0 )
		{
			state_SMG ( 0 , duanma[18] );
		}
		else
		{
			switch ( flash_count )
			{
				case 0 :	
					state_SMG ( 0 , duanma[18] );
				break;
				case 1 :	
					state_SMG ( 2 , duanma[max_humidity/100] );
				break;
				case 2 :	
					state_SMG ( 3 , duanma[max_humidity/10%10] );
				break;
				case 3 :
					state_SMG ( 4 , duanma[16] );				
				break;
				case 4 :	
					state_SMG ( 5 , duanma[average_humidity/100] );
				break;
				case 5 :
					state_SMG ( 6 , duanma_dot[average_humidity/10%10] );			
				break;
				case 6 :	
					state_SMG ( 7 , duanma[average_humidity%10] );
				break;
				case 7 :	
					state_SMG_all ( 0xff );
				break;
			}
		}
	}
	else if ( SMG_flag == 4 )
	{
		switch ( flash_count )
		{
			case 0 :	
				state_SMG ( 0 , duanma[15] );
			break;
			case 1 :	
				state_SMG ( 1 , duanma[trg_count/10] );
			break;
			case 2 :	
				state_SMG ( 2 , duanma[trg_count%10] );
			break;
			case 3 :
				if ( trg_count != 0 )
				{
					state_SMG ( 3, duanma[trg_time_hour/16] );	
				}
				else
				{
					state_SMG ( 3, 0xff );	
				}
			break;
			case 4 :	
				if ( trg_count != 0 )
				{
					state_SMG ( 4 , duanma[trg_time_hour%16] );	
				}
				else
				{
					state_SMG ( 4, 0xff );	
				}				
			break;
			case 5 :
				if ( trg_count != 0 )
				{
					state_SMG ( 5 , duanma[16] );	
				}
				else
				{
					state_SMG ( 5, 0xff );	
				}				
			break;
			case 6 :	
				if ( trg_count != 0 )
				{
					state_SMG ( 6 , duanma[trg_time_min/16] );	
				}
				else
				{
					state_SMG ( 6, 0xff );	
				}				
			break;
			case 7 :	
				if ( trg_count != 0 )
				{
					state_SMG ( 7 , duanma[trg_time_min%16] );	
				}
				else
				{
					state_SMG ( 7, 0xff );	
				}
				break;
			case 8 :	
//				state_SMG_all ( 0xff );
			break;
		}
	}
	else if ( SMG_flag == 5 )
	{
		switch ( flash_count )
		{
			case 0 :	
				state_SMG ( 0 , duanma[15] );
			break;
			case 1 :	
				state_SMG ( 6 , duanma[set_temperature/100] );		
			break;
			case 2 :	
				state_SMG ( 7 , duanma[set_temperature/10%10] );	
			break;
			case 3 :	
				state_SMG_all ( 0xff );
			break;
		}
	}
	else if ( SMG_flag == 6 )
	{
		switch ( flash_count )
		{
			case 0 :	
				state_SMG ( 0 , duanma[14] );
			break;
			case 1 :	
				if ( temperature == 0 )
				{
					state_SMG ( 3 , duanma[10] );	
				}
				else
				{
					state_SMG ( 3 , duanma[temperature/100] );	
				}					
			break;
			case 2 :	
				state_SMG ( 4 , duanma[temperature/10%10] );	
			break;
			case 3 :	
				state_SMG ( 5 , duanma[16] );		
			break;
			case 4 :	
				if ( humidity == 0 )
				{
					state_SMG ( 6 , duanma[10] );		
				}
				else
				{
					state_SMG ( 6 , duanma[humidity/100] );		
				}
			break;
			case 5 :	
				if ( humidity == 0 )
				{
					state_SMG ( 7 , duanma[10] );		
				}
				else
				{				
					state_SMG ( 7 , duanma[humidity/10%10] );	
				}					
			break;
			case 6 :	
				state_SMG_all ( 0xff );
			break;
		}
	}
}



void main ()
{
	init_sys();
	init_timer01 ();
	init_ds1302 ();
	init_temperature ();
	state_led ( 0xff );
	while ( 1 )
	{
		keyrunning ();
		rd1running ();		
		flash_date ();
		valuerunning ();
		flash_temperature ();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt/QML编程之路:HVAC control(51)

空调控制是智能座舱的重要组成部分。传统汽车里,空调控制一般通过机械按钮实现,比如内循环、空调on/off开关、空调风量调节、专门的前挡风玻璃吹风加热等,出风口可以手动调节。 过去很多年一直是机械按键,随着新能源汽车的大势所趋,空调控制方式也逐渐被颠覆。 现在这些控…

【自然语言】使用词袋模型,TF-IDF模型和Word2Vec模型进行文本向量化

一、任务目标 python代码写将 HarryPorter 电子书作为语料库&#xff0c;分别使用词袋模型&#xff0c;TF-IDF模型和Word2Vec模型进行文本向量化。 1. 首先将数据预处理&#xff0c;Word2Vec 训练时要求考虑每个单词前后的五个词汇&#xff0c;地址为 作为其上下文 &#xf…

如何开辟动态二维数组(C语言)

1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数&#xff0c;但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组&#xff0c;也就是存放着一维数组地址的一维数组。 所以&…

CRMEB 多商户和多店版的区别

&#xff08;1&#xff09;两个系统根本属性不同 CRMEB多商户是一款B2B2C多业态商家入驻平台系统&#xff0c;通俗点说&#xff0c;就是一个商城系统有多个商家运营各自的店铺。 多商户系统具有联营、自营、招商、混合等多种运营模式&#xff0c;主要用来构建类似京东、淘宝的…

【二分算法】

17. 二分查找&#xff08;easy&#xff09; 算法流程&#xff1a; 算法代码&#xff1a; int search(int* nums, int numsSize, int target) {// 初始化 left 与 right 指针int left 0, right numsSize - 1;// 由于两个指针相交时&#xff0c;当前元素还未判断&#xff0c;因…

2024最新仿默往IM即时通讯系统源码(PC+WEB+IOS+Android)客户端

简介: 2024最新仿默往IM即时通讯系统源码(PC+WEB+IOS+Android)客户端 系统功能配置灵活、海量并发、稳定可靠、数据安全,2小时快速部署、数据安全、单聊群聊、系统通知等通信功能,支持App、PC、Web等多端快速接入。 群功能:设置群二维码,群公告,昵称,头像,群共享文件…

零基础教程|四步学会自制宣传手册

在当今竞争激烈的市场中&#xff0c;一本精美而引人注目的宣传手册是吸引客户和推广产品的重要工具。但对于许多人来说&#xff0c;制作宣传手册似乎是一项艰巨的任务&#xff0c;特别是对于零基础的人来说。然而&#xff0c;通过以下四个简单的步骤&#xff0c;您也可以轻松学…

解决redis乱码问题

目录 1.问题 2.查看redis序列化机制 3.设置redis的序列化器 1.问题 在使用redis最为缓存时&#xff0c;发现key乱码问题 这是由于redis的序列化机制导致的 2.查看redis序列化机制 3.设置redis的序列化器 Configuration Data public class RedisConfig {/*** redis序列化*…

应急响应-战前反制主机HIDSElkeid蜜罐系统HFish

知识点 战前-反制-平台部署其他更多项目&#xff1a; https://github.com/birdhan/SecurityProduct HIDS&#xff1a;主机入侵检测系统&#xff0c;通常会有一个服务器承担服务端角色&#xff0c;其他主机就是客户端角色&#xff0c;客户端加入到服务端的检测范围里&#xff…

【漏洞复现】通天星CMSV6车载视频监控平台MobileAction文件读取漏洞

Nx01 产品简介 通天星车载视频监控平台软件拥有多种语言版本&#xff0c;应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控等公共交通上。 Nx02 漏洞描述 通天星CMSV6车载视频监控平台MobileAction文件读取漏洞&#xff0c;攻…

C语言---顺序表(二)

文章目录 前言1.准备工作2.代码的实现2.1.顺序表的创建、销毁和打印2.2.顺序表的扩容、头插\删、尾插\删2.2.1.扩容2.2.2.尾插2.2.3.头插2.2.3.尾删2.2.4.头删 2.3.指定位置之前插入/删除数据/查找数据2.3.1.指定位置之前插入数据2.3.2.指定位置之前删除数据2.3.3.查找特定数据…

ChatGPT基础(二) ChatGPT的使用和调优

文章目录 ChatGPT的特性采用关键词进行提问给ChatGPT指定身份提升问答质量的策略1.表述方式上的优化2.用"继续"输出长内容3.营造场景4.由浅入深&#xff0c;提升问题质量5.预设回答框架和风格 ChatGPT的特性 1.能够联系上下文进行回答 ChatGPT回答问题是有上下文的&…

Samba实现windows和Linux共享文件,环境搭建

​ 搭建步骤 安装sambad sudo apt-get install samba samba-common 创建samba用户和密码 此处使用 Linux 账号和密码作为 samba 的账号和密码。Linux 账号为 shelmean shelmeanmachine:[~] $ sudo smbpasswd -a shelmean New SMB password: Retype new SMB password: Add…

MongoDB副本集部署(windows)

环境准备 本教程演示mongodb4.4 副本集部署&#xff08;一主两从&#xff0c;伪分布式&#xff09; 节点配置主节点localhost:27017从节点1localhost:27018从节点2localhost:27019 每一个节点&#xff08;实例&#xff09;都创建对应的数据文件&#xff08;data&#xff09;…

记一次空迭代器导致的崩溃分析

一. 崩溃代码&#xff1a; class EasySelect::Impl { public:Impl() default;std::vector<int> waitForReadable ();void addFd (int fd);void removeFd (int fd);void stopWait ();private:std::vector<int> m_fds;std::mutex m_fdsMutex;std::mutex m_pipeMute…

MySQL数据导出导出的三种办法(13/16)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法&#xff1a; 使用mysqldump工具&#xff1a; 优点&#xff1a; 简单易用&#xff0c;只需一条命令即可完成数据导出。可以导出表结构和数据&#xff0c;方便完整备份。支持过滤条件&#xff0c;可以选择导出部分数据…

python知识点汇总(十一)

python知识点总结 1、当Python退出时&#xff0c;是否会清除所有分配的内存&#xff1f;2、Python的优势有哪些&#xff1f;3、什么是元组的解封装4、Python中如何动态获取和设置对象的属性&#xff1f;5、创建删除操作系统上的文件6、主动抛出异常7、help() 函数和 dir() 函数…

数据结构-----枚举、泛型进阶(通配符?)

文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…

加速杂交水稻走向世界 政协委员建议在湖南设立一“协会”一“中心”

中新网北京3月8日电 (刘曼)针对中国杂交水稻海外“飘香”的现象&#xff0c;全国政协委员、湖南省政协副主席、民盟湖南省委会主委何寄华建议&#xff0c;在湖南建立杂交水稻国际合作交流协会、设立杂交水稻国际科技合作技术转移中心&#xff0c;支持杂交水稻走向世界。 全国政…