蓝桥杯单片机第七届省赛题详细讲解(温度记录器)

news2024/11/16 18:02:02

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

    • 演示效果
    • 题目讲解
    • 代码
      • main.c
      • ds1302.c
      • ds1302.h
      • onewire.c
      • onewire.h
    • 工程文件

演示效果

题目讲解

首先我们从系统框图看起:
在这里插入图片描述
做题之前要做的是把系统框图里面的各个模块先提前调试好!!!
调试完成后进一步看题目:
在这里插入图片描述
然后按照如图数码管显示界面进行显示。

uchar SMG_mode=0,temp; //数码管模式定义 温度定义
uchar time_gap=1; //采集间隔时间定义
void main(void)
{
	init(); //初始开发板
	while(1)
	{
		temp=rd_temperature();
		if(SMG_mode==0) //界面1,设置界面
		{
			get_time(); //时间获取
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
			SMG[5]=21;SMG[6]=time_gap/10;SMG[7]=time_gap%10; //显示采集间隔
		}
		else if(SMG_mode==1)//界面2,时钟显示界面
		{
			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; //显示秒
		}
		SMG_output();
		Dkey_scan();
	}
}

注意要求:时钟界面,提示符1,2以1秒为间隔闪烁。
所以提示符要放在定时器里面进行赋值显示。

//定时器初始化
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; //打开定时器0中断
}

uchar t,state=0; //中断计数 显示状态
//定时器0中断服务函数
void time0() interrupt 1
{
	if(SMG_mode==1)
	{
		t++;
		if(t>=200) //200*5 以一秒为间隔
		{
			t=0;
			if(state==1)
			{
				state=0;SMG[2]=SMG[5]=20; //熄灭
			}
			else
			{
				state=1;SMG[2]=SMG[5]=21; //亮
			}
		}
	}
}

由于是按下S5,从设置界面进入时间显示界面,所以按键扫描对应的程序也要修改。由于时间要在按键按下才开始计时,所以初始化时间一定要在按键中初始化!!!按下S4。设置界面由1s,5s,30s,60s来回切换

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:
					break;
				case 0x0d:
					break;
				case 0x0b: //S5
					if(SMG_mode==0){SMG_mode=1;ds1302_init();} //按下S5进入时间显示,并初始化时间
					break;
				case 0x07:
					if(SMG_mode==0) //间隔时间只能设置模式改变
					{ //时间间隔切换
						if(time_gap==1)time_gap=5;
						else if(time_gap==5)time_gap=30;
						else if(time_gap==30)time_gap=60;
						else if(time_gap==60)time_gap=1;
					}
					break;
			}
			keybyte=0;
		}
	}
}

然后接着往下看题目。
在这里插入图片描述
由于要进行时间采集,所以定时器的使用,在定时器内进行采集。

bit enable=0; //控制采集打开和关闭
uchar Temp_stat[10]={0,0,0,0,0,0,0,0,0,0};//温度数据保存
uchar count=0;//定义采集次数
uint stat_t=0; //采集定时器计数
//定时器0中断服务函数
void time0() interrupt 1
{
	if(enable==1)
	{
		stat_t++;
		if((stat_t*5)>=(time_gap*1000)) //5*s >=采集时间进行采集*1000ms
		{
			stat_t=0;
			Temp_stat[count]=temp; //采集
			count++; //计数
			if(count>=10){P2=0X80;P0=0Xfe; //点亮L1
			count=0;enable=0;SMG_mode=2;} //采集完10次关闭,数码管显示切换
		}
	}
	if(SMG_mode==1)
	{
		t++;
		if(t>=200) //200*5 以一秒为间隔
		{
			t=0;
			if(state==1)
			{
				state=0;SMG[2]=SMG[5]=20; //熄灭
			}
			else
			{
				state=1;SMG[2]=SMG[5]=21; //亮
			}
		}
	}
}

采集完成后的温度显示。

		else if(SMG_mode==2) //采集完成后的温度显示
		{
			SMG[0]=21;SMG[1]=count/10; //-00 
			SMG[2]=count%10;SMG[3]=SMG[4]=20;  
			SMG[6]=Temp_stat[count]/10;SMG[7]=Temp_stat[count]%10; 
		}

然后就是对按键进行修改。
S6, L1 熄灭,按照时间先后顺序,切换显示设备内存储的温度数据;
S7 按键进入参数设置界面(图 1),待用户输入温度采集间隔之后,可以进行
下一次的温度采集工作。

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:if(SMG_mode==2){SMG_mode=0;count=0;time_gap=1;}//S7重新设置
					break;
				case 0x0d:if(SMG_mode==2){P2=0X80;P0=0Xff; //熄灭L1
				count++;if(count==10)count=0;} //按顺序切换
					break;
				case 0x0b: //S5
					if(SMG_mode==0){SMG_mode=1;
					ds1302_init();enable=1;} //按下S5进入时间显示,并初始化时间,打开温度捕获使能
					break;
				case 0x07:
					if(SMG_mode==0) //间隔时间只能设置模式改变
					{ //时间间隔切换
						if(time_gap==1)time_gap=5;
						else if(time_gap==5)time_gap=30;
						else if(time_gap==30)time_gap=60;
						else if(time_gap==60)time_gap=1;
					}
					break;
			}
			keybyte=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);

extern uchar time[7]; //ds1302.c中定义的存储时间的数组

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff,0xbf};
uchar SMG[8]={20,20,20,20,20,20,20,20};//初始显示10,全息数码管

uchar SMG_mode=0,temp; //数码管模式定义 温度定义
uchar time_gap=1; //采集间隔时间定义
uchar t,state=0; //中断计数 显示状态

bit enable=0; //控制采集打开和关闭
uchar Temp_stat[10]={0,0,0,0,0,0,0,0,0,0};//温度数据保存
uchar count=0;//定义采集次数
uint stat_t=0; //采集定时器计数
void main(void)
{
	init(); //初始开发板
	Timer0Init();
	while(1)
	{
		temp=rd_temperature();
		if(SMG_mode==0) //界面1,设置界面
		{
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=20; //数码管全熄
			SMG[5]=21;SMG[6]=time_gap/10;SMG[7]=time_gap%10; //显示采集间隔
		}
		else if(SMG_mode==1)//界面2,时钟显示界面
		{
			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==2) //采集完成后的温度显示
		{
			SMG[0]=21;SMG[1]=count/10; //-00 
			SMG[2]=count%10;SMG[3]=SMG[4]=20;  
			SMG[6]=Temp_stat[count]/10;SMG[7]=Temp_stat[count]%10; 
		}
		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((keybyte==1)&&((P3&0X0F)==0X0F))
	{
		if((P3&0X0F)==0X0F)
		{
			switch(key)
			{
				case 0x0e:if(SMG_mode==2){SMG_mode=0;count=0;time_gap=1;}//S7重新设置
					break;
				case 0x0d:if(SMG_mode==2){P2=0X80;P0=0Xff; //熄灭L1
				count++;if(count==10)count=0;} //按顺序切换
					break;
				case 0x0b: //S5
					if(SMG_mode==0){SMG_mode=1;
					ds1302_init();enable=1;} //按下S5进入时间显示,并初始化时间,打开温度捕获使能
					break;
				case 0x07:
					if(SMG_mode==0) //间隔时间只能设置模式改变
					{ //时间间隔切换
						if(time_gap==1)time_gap=5;
						else if(time_gap==5)time_gap=30;
						else if(time_gap==30)time_gap=60;
						else if(time_gap==60)time_gap=1;
					}
					break;
			}
			keybyte=0;
		}
	}
}

//定时器0中断服务函数
void time0() interrupt 1
{
	if(enable==1)
	{
		stat_t++;
		if((stat_t*5)>=(time_gap*1000)) //5*200s >=采集时间进行采集*1000ms
		{
			stat_t=0;
			Temp_stat[count]=temp; //采集
			count++; //计数
			if(count>=10){P2=0X80;P0=0Xfe; //点亮L1
			count=0;enable=0;SMG_mode=2;} //采集完10次关闭,数码管显示切换
		}
	}
	if(SMG_mode==1)
	{
		t++;
		if(t>=200) //200*5 以一秒为间隔
		{
			t=0;
			if(state==1)
			{
				state=0;SMG[2]=SMG[5]=20; //熄灭
			}
			else
			{
				state=1;SMG[2]=SMG[5]=21; //亮
			}
		}
	}
}

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; //打开定时器0中断
}

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

ds1302.c

#include "ds1302.h"  									

uchar time[7]={50,59,23,0,0,0,0};

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


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

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

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

工程文件

有注释的工程文件

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

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

相关文章

StarRocks 的学习笔记

StarRocks 的学习笔记 文章目录StarRocks 的学习笔记1. 介绍1.1 StarRocks 特性1.2 使用场景1.3 OLAP 多维分析1.4 实时数据仓库1.5 高并发查询1.6 统一分析2. 系统架构2.1 StarRocks架构2.2 StarRocks业务架构2.3 StarRocks 数据生态2.4 *数据管理3. 特性3.1 MPP分布式执行框架…

ES6中的set与map

文章目录1.set1.1创建set集合1.2 如何对set集合进行后续操作1.3 如何与数组进行相互转换1.4 如何遍历1.5set的应用2.map集合2.1 如何创建map2.2 如何进行后续操作2.3 如何与数组转换2.4 遍历一直以来&#xff0c;JS只能使用数组和对象来保存多个数据&#xff0c;缺乏像其他语言…

介绍document部分自带的方法及属性,场景使用例如倒计时等

适用场景页面不显示&#xff08;不看&#xff09;触发方法停止运行逻辑&#xff0c;页面显示&#xff08;看&#xff09;触发方法继续运行逻辑。 &#xff08;例如倒计时&#xff09; 操作手法触发&#xff0c;浏览器多页签切换时触发&#xff0c;或者当前页隐藏浏览器&#xf…

飞象星球落地舟山36所学校 双师课堂化解课后服务区域资源差异

傍晚的阳光正好&#xff0c;此时舟山二小北校区五年级学生周陈延正紧盯大屏幕&#xff0c;沉醉在《航天探秘》飞象星球双师素质课堂带来的知识奥义中。作为浙江极具特色的海岛城市&#xff0c;舟山正进行着有关课后服务领域的新探索&#xff0c;双师素质课堂便是“千岛之城”舟…

VSCODE联合ModelSim语法检错

Vscode联合ModelSim检错 一、Vscode配置 首先在 vs code 中安装支持 Verilog 的插件&#xff1a; 在 vs code 的 Extension 中搜索 Verilog&#xff0c;安装如下图所示的插件&#xff1b; 二、ModelSim语法检查器检查 Modelsim的安装破解本文不再赘述&#xff0c;可选的Mod…

【初阶数据结构】第一篇——时间复杂度和空间复杂度详解(C描述)

文章目录前言什么是数据结构&#xff1f;什么是算法&#xff1f;1. 算法效率1.1如何衡量一个算法的好坏1.2 算法的复杂度1.2 复杂度在校招中的考察2. 时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3 常见时间复杂度计算举例例1双重循环例2. 多未知数例3. 常数次循环例4…

【深度学习】卷积神经网络之双阶段目标检测|R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN、R-FCN

文章目录基本概念一、R-CNN1. 网络结构2. 训练流程3. 测试阶段5.RNN存在的问题二、SPP-Net1. 网络结构2. 基础知识共享卷积计算金字塔池化 Spatial Pyramid Pooling3. 训练流程4. 测试流程5. 存在问题三、 Fast R-CNN1. 网络结构2. 基础知识感兴趣区域池化层 (ROI pooling)多任…

别再被数据分析“割韭菜了”,光学python、BI没有用,上项目才行

前几天有个粉丝找我&#xff0c;说花699报了一门数据分析课程&#xff0c;还有实战项目&#xff0c;让我帮她看看她做的数据分析。项目的名称叫&#xff1a;豆瓣高分电影分析。她写了一大堆内容&#xff0c;我也没细看&#xff0c;截取几张可视化图表给大家&#xff0c;大家觉得…

嵌入式串口转CAN模块详细参数分析

引脚定义和尺寸 测试评估板 将模块插到评估板上&#xff0c;注意模块引脚标注要与评估板上插座引脚标注相对应&#xff0c;然后进行参数设置。特别的&#xff0c;也可以在模块集成到电路板上后&#xff0c;直接通过模块的CAN口来配置参数。 通过CAN通道配置参数 模块集成到用…

基于javaweb+mysql的就业管理系统设计和实现(java+springboot+ssm)

基于javawebmysql的就业管理系统设计和实现(javaspringbootssm) 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计&#xff0c;大作业&#xff0c;毕业设计&#xff0c;项目练习&#xff0c;学习演示等 功能说明 基于jav…

windows10下安装fbprophet及使用虚拟环境

Prophet是Facebook 在2017年2月开源的一款基于 Python 和 R 语言的时间序列预测框架&#xff0c;也是一种数据分析工具。github官网&#xff1a;https://github.com/facebookincubator/prophet prophet是基于可分解&#xff08;趋势季节节假日&#xff09;模型的开源库&#xf…

【云原生 | 从零开始学istio】五、istio灰度发布以及核心资源

istio灰度发布接着上一章部署bookinfo通过 Istio 实现灰度发布什么是灰度发布&#xff1f;使用 istio 进行灰度发布istio 核心资源解读GatewayVirtualServiceDestinationRule写在最后接着上一章部署bookinfo 1.进入 istio 安装目录。 2.istio 默认自动注入 sidecar&#xff0c…

面试题 17.04. 消失的数字

顺序表题目消失的数字1、题目详情2、题目详解&#xff08;1&#xff09;方法1&#xff08;2&#xff09;方法2&#xff08;3&#xff09;方法3&#xff08;4&#xff09;方法4&#xff1a;消失的数字 1、题目详情 题目链接&#xff1a;leetcode消失的数字 数组nums包含从0到…

CSS——基础学习

目录 一&#xff0c;什么是CSS 二&#xff0c;基本语法规范 三&#xff0c;引入方式 1.内部样式表 2.行内样式表 3.外部样式 四&#xff0c;代码风格 1.样式格式 (1).紧凑风格 (2).展开风格(推荐) 2.样式大小写 3.空格规范 五&#xff0c;选择器 1.选择器的种类 …

牛客网-《刷C语言百题》第二期

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;《C语言入门必刷百题》 &#x…

[每周一更]-(第18期):Postman全局配置token信息,加速测试接口进度

Postman作为API调试工具&#xff0c;对于后端开发至关重要&#xff0c;开发、测试、写文档&#xff0c;都必不可少&#xff0c;但是日常使用过程中都是token校验&#xff0c;不同接口之间都会携带token头信息&#xff0c;但是接口的情况&#xff0c;除了写请求参数也要一个个配…

FCOS相关

因为用到了某家带bpu的(懂的都懂) 他们支持这个只是demo做的有点差 还没有c的~~ 因为他们用所以就搬来了 勿怪啊 基于昨天和他们相关的tops 又说说这个!! FCOS是一种基于全卷积的单阶段目标检测算法&#xff0c;并且是一种Anchor box free的算法。其实现了无Anchor&#xff…

该反省了!元数据管理平台为什么会被当成一件“摆设”?

尽管企业越来越意识到元数据管理的重要性&#xff0c;但是在实际中很多应用并没有发挥应有的价值。 前不久与一个行业客户沟通&#xff0c;他提出让他们帮着总结一下元数据管理到底有哪些应用场景&#xff0c;他感觉元数据管理平台就是一种摆设呢&#xff1f; 说者无意听者有心…

1978,1990,2020,2026,2041,2051

文章目录总结1978. 上级经理已离职的公司员工1990. 统计实验的数量[建立两个临时表并笛卡尔积]2020. 无流量的帐户数2026. 低质量的问题2041. 面试中被录取的候选人2051.商店中每个成员的类别总结 多表左连接转2051题【重点】 其他待补充 1978. 上级经理已离职的公司员工 # Wr…

【前端】HTML入门 —— HTML的常见标签

JavaEE传送门JavaEE 网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理 网络原理——网络层与数据链路层 目录网站HTML认识 HTML 标签HTML 常见标签注释标签标题标签段落标签换行标签格式化标签图片标签超链接标签表格标签列表标签表单标签…