蓝桥杯单片机第九届省赛题详细讲解(电子钟)

news2024/11/25 3:50:24

看之前强烈建议先自己做一遍!!!

    • 演示视频
    • 题目讲解
    • 完整程序
      • main.c
      • onewire.h
      • onewire.c
      • ds1302.h
      • ds1302.c
    • 工程文件

演示视频

题目讲解

首先还是一如既往从题目的程序框图准备起。
在这里插入图片描述
将ds18b20,独立按键,数码管显示,实时时钟调试好,值得注意的是(题目里没有明确指出实时时钟是什么,所以既可以用定时器也可以用ds1302)。
调试完成后接着往下看题目。
在这里插入图片描述
首先是初始化的时间:23:59:50,闹钟的时间:0:0:0。
然后按照数码管的显示两种界面。

char time[7]={50,59,23,0,0,0,0};//ds1302.c中定义的存储时间的数组23:59:50
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff,0xbf,0xc6}; //- c
uchar SMG[8]={20,20,20,20,20,20,20,20};//初始显示10,全息数码管
char clock[3]={0,0,0};//闹钟0:0;0
uchar SMG_mode=0,temp; //数码管模式定义 温度定义
void main(void)
{
	init(); //初始开发板
	Timer0Init();//初始化定时器
	ds1302_init();//初始化时间
	while(1)
	{
		if(SMG_mode==0) //界面1时间显示
		{
			get_time(); //时间获取
			SMG[0]=time[2]/10;SMG[1]=time[2]%10; //显示时
			SMG[3]=time[1]/10;SMG[4]=time[1]%10;  //显示分
			SMG[6]=time[0]/10;SMG[7]=time[0]%10; //显示秒
		}
		else if(SMG_mode==1)//界面2温度显示
		{
			temp=rd_temperature();//温度获取
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
			SMG[5]=temp/10;SMG[6]=temp%10;SMG[7]=22; //显示温度
		}
		SMG_output();
		Dkey_scan();
	}
}

然后接着往下看按键的设置,首先看S7,S6。
在这里插入图片描述
S7是时钟设置,设置时,分,秒都需要对应的数码管进行1s为间隔的闪亮,所以肯定是需要定时器的。
S6为闹钟设置,没有说明要闪亮。

//main.c
		else  //设置界面显示,闪亮!!
		{
			SMG[2]=21;SMG[5]=21;//不闪的,不要获取时间
			switch(SMG_mode)
			{
				case 5:SMG[3]=time[1]/10;SMG[4]=time[1]%10;//时闪
				SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;
				case 4:SMG[0]=time[2]/10;SMG[1]=time[2]%10;//分闪
				SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;
				case 3:SMG[0]=time[2]/10;SMG[1]=time[2]%10; //秒闪
				SMG[3]=time[1]/10;SMG[4]=time[1]%10;break;
			}
		}
void Dkey_scan(void)
{
	static uchar keybyte=0;
	static uchar key;
	if(((P3&0X0F)!=0X0F)&&(keybyte==0))
	{
		delay5ms();
		if((P3&0X0F)!=0X0F)
		{
			keybyte=1;key=P3&0x0f;
		}
	}
	if((keybyte==1)&&((P3&0X0F)==0X0F))
	{
		if((P3&0X0F)==0X0F)
		{
			switch(key)
			{
				case 0x0e://S7  //切换时间设置
					if(SMG_mode==0)SMG_mode=5;
				else if(SMG_mode==5)SMG_mode=4;
				else if(SMG_mode==4)SMG_mode=3;
				else if(SMG_mode==3)ds1302_init();}//初始化时间
					break;
				case 0x0d://S6 //切换时钟设置
					if(SMG_mode==0){SMG_mode=2;clockset=0;}
					else if(clockset==0)clockset=1;
					else if(clockset==1)clockset=2;
					else if(clockset==2)SMG_mode=0;
					break;
				case 0x0b://S5
					break;
				case 0x07://S4
					break;
			}
			keybyte=0;
		}
	}
}

uint t; //定时器计时
bit state=0; //数码管状态定义
//定时器0中断服务函数
void time0() interrupt 1
{
	if(SMG_mode>=3)
	{
		t++;
		if(t>=200) //200*5 ==1s
		{
			t=0;
			if(state==0)
			{
				state=1;
				switch(SMG_mode)
				{
					case 3:SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;//秒亮
					case 4:SMG[3]=time[1]/10;SMG[4]=time[1]%10;break;//分亮
					case 5:SMG[0]=time[2]/10;SMG[1]=time[2]%10;break;//时亮
				}
			}
			else
			{
				state=0;
				switch(SMG_mode)
				{
					case 3:SMG[6]=20;SMG[7]=20;break; //20熄灭
					case 4:SMG[3]=20;SMG[4]=20;break;//20熄灭
					case 5:SMG[0]=20;SMG[1]=20;break;//20熄灭
				}		
			}
		}
	}
}

接下来设置S5,S4两个按键。
在这里插入图片描述

case 0x0b://S5
	if(SMG_mode>=3)
	{
		switch(SMG_mode)
		{
			case 3:time[0]++;break; //秒加1时钟
			case 4:time[1]++;break; //分加1时钟
			case 5:time[2]++;break; //时加1时钟
		}
		if(time[0]>=60)time[0]=60; //限幅设置时钟
		if(time[1]>=60)time[1]=60; //限幅设置时钟
		if(time[2]>=24)time[2]=24; //限幅设置时钟
	}
	else if(SMG_mode==2)
	{
		switch(clockset)
		{
			case 0:clock[2]++;break; //秒加1闹钟
			case 1:clock[1]++;break; //秒加1闹钟
			case 2:clock[0]++;break; //秒加1闹钟
		}
		if(clock[0]>=60)clock[0]=60; //限幅设置闹钟
		if(clock[1]>=60)clock[1]=60; //限幅设置闹钟
		if(clock[2]>=24)clock[2]=24; //限幅设置闹钟
	}
	break;
case 0x07://S4
	if(SMG_mode>=3)
	{
		switch(SMG_mode)
		{
			case 3:time[0]--;break; //秒加1时钟
			case 4:time[1]--;break; //分加1时钟
			case 5:time[2]--;break; //时加1时钟
		}
		if(time[0]<=0)time[0]=0; //限幅设置时钟
		if(time[1]<=0)time[1]=0; //限幅设置时钟
		if(time[2]<=0)time[2]=0; //限幅设置时钟
	}
	else if(SMG_mode==2)
	{
		switch(clockset)
		{
			case 0:clock[2]--;break; //减加1闹钟
			case 1:clock[1]--;break; //减加1闹钟
			case 2:clock[0]--;break; //减加1闹钟
		}
		if(clock[0]<=0)clock[0]=0; //限幅设置闹钟
		if(clock[1]<=0)clock[1]=0; //限幅设置闹钟
		if(clock[2]<=0)clock[2]=0; //限幅设置闹钟
	}					
	break;
//main.c此处由于后面是长安按键生效,所以修改致按键扫描内了
//		else if(SMG_mode==1)//界面2温度显示
//		{
//			temp=rd_temperature();
//			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
//			SMG[5]=temp/10;SMG[6]=temp%10;SMG[7]=22; //显示采集间隔
//		}
if(SMG_mode==0) //当时间显示下长安S4按键
{
	while(key==0x07)
	{
		temp=rd_temperature();//温度获取
		SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
		SMG[5]=temp/10;SMG[6]=temp%10;SMG[7]=22; //显示显示温度
		SMG_mode=1;SMG_output();
		key=P3&0x0f;keybyte=0;
	}
	SMG_mode=0;
}

注意各按键的使用前提。(比如在哪个界面生效)
然后看最后的闹钟提示功能。
在这里插入图片描述

//main。c
bit ledenable=0;//闹钟使能
if((time[0]==clock[0])&&(time[1]==clock[1])&&(time[2]==clock[2]))//时间相等
{
	ledenable=1;//打开闹钟
}
uchar led=0xff; //led定义,好处是不影响别的p0口
if(ledenable==1)
{
	P2=0X80;P0=led;//打开led闪烁
}
else
{
	P2=0X80;P0=0xff;//关闭led闪烁
}
//定时器中断服务函数
uchar tt; //闹钟led计时
if(ledenable==1)
{
	tt++;
	if(tt>=40) //40*5=200=0.2s
	{
		tt=0;
		if(state==0)
		{
			state=1;
			led&=0xfe;
		}
		else
		{
			state=0;
			led|=0x01;
		}
	}
}
//然后在按键里面关闭闹钟
//enable=0;

完整程序

main.c

#include <stc15f2k60s2.h>
#include "intrins.h"
#include "onewire.h"
#include "ds1302.h"

#define uchar unsigned char
#define uint unsigned int

void SMG_output(void);
void init(void);
void Delay1ms(void);
void delay5ms(void);
void Dkey_scan(void);
void Timer0Init(void);

char time[7]={50,59,23,0,0,0,0};//ds1302.c中定义的存储时间的数组23:59:50
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff,0xbf,0xc6}; //- c
uchar SMG[8]={20,20,20,20,20,20,20,20};//初始显示10,全息数码管
char clock[3]={0,0,0};//闹钟0:0;0
uchar SMG_mode=0,temp; //数码管模式定义 温度定义
uchar clockset=0; //0为设置时 1为设置分 2为设置秒
bit ledenable=0;//闹钟使能
uchar led=0xff; //led定义,好处是不影响别的p0口
void main(void)
{
	init(); //初始开发板
	Timer0Init();//初始化定时器
	ds1302_init();//初始化时间
	while(1)
	{
		if(SMG_mode==0) //界面1时间显示
		{
			get_time(); //时间获取
			SMG[2]=21;SMG[5]=21;
			SMG[0]=time[2]/10;SMG[1]=time[2]%10; //显示时
			SMG[3]=time[1]/10;SMG[4]=time[1]%10;  //显示分
			SMG[6]=time[0]/10;SMG[7]=time[0]%10; //显示秒
		}
		//此处由于后面是长安按键生效,所以修改致按键扫描内了
//		else if(SMG_mode==1)//界面2温度显示
//		{
//			temp=rd_temperature();
//			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
//			SMG[5]=temp/10;SMG[6]=temp%10;SMG[7]=22; //显示采集间隔
//		}
		else if(SMG_mode==2)//界面3闹钟显示
		{
			SMG[0]=clock[2]/10;SMG[1]=clock[2]%10; //显示时
			SMG[3]=clock[1]/10;SMG[4]=clock[1]%10;  //显示分
			SMG[6]=clock[0]/10;SMG[7]=clock[0]%10; //显示秒			
		}
		else  //设置界面显示,闪亮!!
		{
			SMG[2]=21;SMG[5]=21;//不闪的,不要获取时间
			switch(SMG_mode)
			{
				case 5:SMG[3]=time[1]/10;SMG[4]=time[1]%10;//时闪
				SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;
				case 4:SMG[0]=time[2]/10;SMG[1]=time[2]%10;//分闪
				SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;
				case 3:SMG[0]=time[2]/10;SMG[1]=time[2]%10; //秒闪
				SMG[3]=time[1]/10;SMG[4]=time[1]%10;break;
			}
		}
	
		if((time[0]==clock[0])&&(time[1]==clock[1])&&(time[2]==clock[2]))//时间相等
		{
			ledenable=1;//打开闹钟
		}
		if(ledenable==1)
		{
			P2=0X80;P0=led;//打开led闪烁
		}
		else
		{
			P2=0X80;P0=0xff;//关闭led闪烁
		}
		SMG_output();
		Dkey_scan();
	}
}

void Dkey_scan(void)
{
	static uchar keybyte=0;
	static uchar key;
	if(((P3&0X0F)!=0X0F)&&(keybyte==0))
	{
		delay5ms();
		if((P3&0X0F)!=0X0F)
		{
			keybyte=1;key=P3&0x0f;
		}
	}
	
	if(SMG_mode==0) //当时间显示下长安S4按键
	{
		while(key==0x07)
		{
			temp=rd_temperature(); //温度获取
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
			SMG[5]=temp/10;SMG[6]=temp%10;SMG[7]=22; //显示温度
			SMG_mode=1;SMG_output();
			key=P3&0x0f;keybyte=0;
			ledenable=0;//关闭闹钟
		}
		SMG_mode=0;
	}
	
	if((keybyte==1)&&((P3&0X0F)==0X0F))
	{
		if((P3&0X0F)==0X0F)
		{
			switch(key)
			{
				case 0x0e://S7  //切换时间设置
					ledenable=0;//关闭闹钟
					if(SMG_mode==0)SMG_mode=5;
				else if(SMG_mode==5)SMG_mode=4;
				else if(SMG_mode==4)SMG_mode=3;
				else if(SMG_mode==3){SMG_mode=0;ds1302_init();}//初始化时间
					break;
				case 0x0d://S6 //切换时钟设置
					ledenable=0;//关闭闹钟
					if(SMG_mode==0){SMG_mode=2;clockset=0;}
					else if(clockset==0)clockset=1;
					else if(clockset==1)clockset=2;
					else if(clockset==2)SMG_mode=0;
					break;
				case 0x0b://S5
					ledenable=0;//关闭闹钟
					if(SMG_mode>=3)
					{
						switch(SMG_mode)
						{
							case 3:time[0]++;break; //秒加1时钟
							case 4:time[1]++;break; //分加1时钟
							case 5:time[2]++;break; //时加1时钟
						}
						if(time[0]>=60)time[0]=60; //限幅设置时钟
						if(time[1]>=60)time[1]=60; //限幅设置时钟
						if(time[2]>=24)time[2]=24; //限幅设置时钟
					}
					else if(SMG_mode==2)
					{
						switch(clockset)
						{
							case 0:clock[2]++;break; //秒加1闹钟
							case 1:clock[1]++;break; //秒加1闹钟
							case 2:clock[0]++;break; //秒加1闹钟
						}
						if(clock[0]>=60)clock[0]=60; //限幅设置闹钟
						if(clock[1]>=60)clock[1]=60; //限幅设置闹钟
						if(clock[2]>=24)clock[2]=24; //限幅设置闹钟
					}
					break;
				case 0x07://S4
					ledenable=0;//关闭闹钟
					if(SMG_mode>=3)
					{
						switch(SMG_mode)
						{
							case 3:time[0]--;break; //秒加1时钟
							case 4:time[1]--;break; //分加1时钟
							case 5:time[2]--;break; //时加1时钟
						}
						if(time[0]<=0)time[0]=0; //限幅设置时钟
						if(time[1]<=0)time[1]=0; //限幅设置时钟
						if(time[2]<=0)time[2]=0; //限幅设置时钟
					}
					else if(SMG_mode==2)
					{
						switch(clockset)
						{
							case 0:clock[2]--;break; //减加1闹钟
							case 1:clock[1]--;break; //减加1闹钟
							case 2:clock[0]--;break; //减加1闹钟
						}
						if(clock[0]<=0)clock[0]=0; //限幅设置闹钟
						if(clock[1]<=0)clock[1]=0; //限幅设置闹钟
						if(clock[2]<=0)clock[2]=0; //限幅设置闹钟
					}					
					break;
			}
			keybyte=0;
		}
	}
}

uint t; //定时器计时
bit state=0; //数码管状态定义
uchar tt; //闹钟led计时
//定时器0中断服务函数
void time0() interrupt 1
{
	if(SMG_mode>=3)
	{
		t++;
		if(t>=200) //200*5 ==1s
		{
			t=0;
			if(state==0)
			{
				state=1;
				switch(SMG_mode)
				{
					case 3:SMG[6]=time[0]/10;SMG[7]=time[0]%10;break;//秒亮
					case 4:SMG[3]=time[1]/10;SMG[4]=time[1]%10;break;//分亮
					case 5:SMG[0]=time[2]/10;SMG[1]=time[2]%10;break;//时亮
				}
			}
			else
			{
				state=0;
				switch(SMG_mode)
				{
					case 3:SMG[6]=20;SMG[7]=20;break; //20熄灭
					case 4:SMG[3]=20;SMG[4]=20;break;//20熄灭
					case 5:SMG[0]=20;SMG[1]=20;break;//20熄灭
				}		
			}
		}
	}
	if(ledenable==1)
	{
		tt++;
		if(tt>=40) //40*5=200=0.2s
		{
			tt=0;
			if(state==0)
			{
				state=1;
				led&=0xfe;
			}
			else
			{
				state=0;
				led|=0x01;
			}
		}
	}
}

void Timer0Init(void)		//5毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA=1;ET0=1; //打开定时器中断
}

void SMG_output(void)
{
	uchar i;
	for(i=0;i<8;i++)
	{
	P2=(P2&0X1F)|0Xc0;
	P0=(1<<i);
	P2=(P2&0X1F)|0Xe0;
	P0=tab[SMG[i]];
	Delay1ms();
	}
	P2=(P2&0X1F)|0Xc0;
	P0=0Xff;
	P2=(P2&0X1F)|0Xe0;
	P0=0Xff;	
}

void init(void)
{
	P2=(P2&0X1F)|0XA0;
	P0=0X00;
	P2=(P2&0X1F)|0X80;
	P0=0Xff;
	P2=(P2&0X1F)|0Xc0;
	P0=0Xff;
	P2=(P2&0X1F)|0Xe0;
	P0=0Xff;	
}

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

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

void delay5ms(void)		//@11.0592MHz
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

onewire.h

#ifndef __ONEWIRE_H
#define __ONEWIRE_H

#include <stc15f2k60s2.h>

sbit DQ = P1^4;  

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

#endif

onewire.c

#include "onewire.h"

unsigned char rd_temperature(void)
{
	unsigned char de,gao;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);	
	
	de=Read_DS18B20();
	gao=Read_DS18B20();
	
	return((de >>4)|(gao<<4));
}

//
void Delay_OneWire(unsigned int t)  
{
	t=t*8;
	while(t--);
}

//
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;
}

ds1302.h

#ifndef __DS1302_H
#define __DS1302_H

#include <stc15f2k60s2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCK = P1^7;		
sbit SDA = P2^3;		
sbit RST = P1^3; 
void ds1302_init(void);
void get_time(void);
void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );

#endif

ds1302.c

#include "ds1302.h"  									

extern char time[7];

void ds1302_init(void)
{
	uchar i,j=0x80;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		Write_Ds1302_Byte(j,time[i]);
		j +=2;
	}
	Write_Ds1302_Byte(0x8e,0x80);
}

void get_time(void)
{
	uchar i,j=0x81;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		time[i]=Read_Ds1302_Byte(j);
		j +=2;
	}
	Write_Ds1302_Byte(0x8e,0x80);
}


//
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/10)<<4)|(dat%10));		
 	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/16)*10)+(temp%16));			
}

工程文件

代码内有注释详细讲解

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

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

相关文章

弹指间计算机协会 2021“千里码”程序设计竞赛 题面

A.Hello World! Description 为保证所有参赛人员在比赛中都能拿到分数&#xff0c;本题只考察c的输出。 算法比赛不仅考察思考问题的能力&#xff0c;也需要一定的细心程度。 直接输出" HelI0 Wor1d!&#xff01;" &#xff0c;您将获得此题的全部分数。 Input 本…

django基于python的旅游网站--python-计算机毕业设计

项目介绍 旅游网站系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、景点分类管理、景点信息管理、门票预订管理、酒店信息管理、客房信息管理、客房预订管理、美食信息管理、用户分享、系统管理等。 用户可…

[MySQL]变量

文章目录1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量查看所有系统变量查询部分系统变量查看指定系统变量1.1.3 修改系统变量方式一&#xff1a;修改配置文件方式二&#xff1a;使用 set 设置系统变量的值1.2 用户变量1.2.1 用户变量的分类1.2.2 会话用户变量变量…

Maven

Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布...&#xff09;提供了一套依赖管理机制标准化的项目结构 不同IDE之…

C++语法——详细剖析多态与虚函数

目录 一.虚函数与多态的概念与基本使用 &#xff08;一&#xff09;.概念 &#xff08;二&#xff09;.基本使用 二.虚函数的底层 三.特殊的虚函数&#xff08;协变&#xff09; 四.多态在多继承、菱形继承与菱形虚拟继承中的使用。 &#xff08;一&#xff09;.多继承 …

C语言分支与循环实战篇-猜数字小游戏/关机小程序

前言 &#x1f47b;作者&#xff1a;龟龟不断向前 &#x1f47b;简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软…

大一学生HTML5期末大作业——基于HTML+CSS制作传统节日美食13页(美食网站设计与实现)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[LeetCode周赛复盘] 第 317 场周赛20221030

[LeetCode周赛复盘] 第 317 场周赛20221030 一、本周周赛总结二、 [Easy] 6220. 可被三整除的偶数的平均值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6221. 最流行的视频创作者1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6222. 美丽整数的最小增量1. 题目描述2. 思路…

终极Hadoop大数据教程

终极Hadoop大数据教程 包含 MapReduce、HDFS、Spark、Flink、Hive、HBase、MongoDB、Cassandra、Kafka 等的数据工程和 Hadoop 教程&#xff01; 课程英文名&#xff1a;The Ultimate Hands-On Hadoop - Tame your Big Data! 此视频教程共17.0小时&#xff0c;中英双语字幕&…

1.3 信号处理函数,创建worker进程

文章目录1、信号处理函数2、创建worker线程3、sigsuspend函数说明4、write函数思考1、信号处理函数 1、初始化信号的函数&#xff0c;用于注册信号处理程序 2、信号处理函数 初始化信号函数&#xff0c;遍历结构体数组&#xff0c;然后给结构体数组中的每个成员注册信号处理函数…

python实现自动检测核酸用码记录 ---- 自动化办公小技巧(摸鱼利器)

自动检测核酸用码记录&#x1f947;预备知识✈️os库os.path.exists()os.mkdir()os.remove()os.listdir()&#x1f47d;Python 3 查看字符编码方法⏰python3获取当前系统时间&#x1f424;读取图片&#xff0c;保存到指定目录&#x1f47c;将数据保存到csv文件中&#x1f948;p…

使用html+css实现一个静态页面(含源码)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

freeRTOS学习(三)

任务管理 任务功能&#xff1a;任务以C函数的形式实现。唯一特别的地方是它们的原型&#xff0c;它必须返回void并接受一个void指针形参。 void ATaskFunction(void *pvParameters);**每个任务本身都是一个小程序。它有一个入口点&#xff0c;通常在无限循环中永远运行&#…

回归测试选择用例,看这里就可以了。

介绍 在软件生命周期中&#xff0c;软件经常发生变化&#xff0c;软件开发人员任何代码改动都会有引入故障的风险&#xff09;。 为了消除或减小这种风险&#xff0c;在软件迭代开发模式下&#xff0c;回归测试扮演着重要的角色&#xff1a;它能够帮助测试人员验证新增的功能…

mac配置jdk环境变量

**下载完成后直接安装一路next直到完成。 查看JDK安装后的路径 在终端输入以下命令查看JDK地址** 按照以下命令的顺序来设置jdk环境变量 查看JDK地址 &#xff1a;/usr/libexec/java_home -V。 open -e .bash_profile打开文件 touch .bash_profile 创建文件 打开.bash_prof…

G2O (General Graph Optimization)入门及简单使用

g2o全称是General Graph Optimization&#xff0c;也就是图优化&#xff0c;我们在做SLAM后端或者更加常见的任何优化问题&#xff08;曲线拟合&#xff09;都可以使用G2O进行处理。 先放出本文的几个参考链接&#xff1a; 半闲居士&#xff08;高翔博士&#xff09; 非线性…

智能终端信息安全概念(一):开篇

最近屁事以及自己对于时间的把控太差了&#xff0c;还有就是一个师妹最近让辅导作业&#xff0c;很烦。 回归正轨&#xff0c;好好学习Linux驱动的方面。 在实际的Linux驱动中&#xff0c;Linux内核尽量做得更多&#xff0c;以便于底层的驱动可以做得更少。 而且&#xff0c…

【C++笔试强训】第十七天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

【微服务容器化】第四章-Docker应用部署

&#x1f334;第四章 Docker应用部署&#x1f343;4.1 Mysql部署&#x1f343;4.2 Tomcat部署&#x1f343;4.3 Nginx 部署&#x1f343;4.4 redis 部署&#x1f343;4.1 Mysql部署 分析: 容器内的网络服务和外部机器不能直接通信 外部机器和宿主机可以直接通信 宿主机和容器…

因为有了它,我用舍友玩王者的时间拿到了华为offer

随时随地刷Leetcode题的方法&#xff0c;大学因为这个&#xff0c;我入职大厂! 下面有免费试用网址 目录我如何拿到大厂offer秘密武器使用教程VSCODE云IDE介绍完整功能&#xff0c;兼容VS Code安装的插件没有效果&#xff1f;通过终端启动项目后无法预览&#xff1f;CIDE收费…