蓝桥杯基础18——第13届省赛真题与代码详解

目录

0.心得体会

1.题目如下

2.代码实现的思路

键值扫描

数码管窗口切换

数码管的动态扫描

继电器工作时L3闪烁,整点时刻L1灯光亮5秒

3.变量列表

定义的常量和数组

功能控制和状态变量

定时器和计数变量

4.代码参考

4.1 头文件

onewire.h

ds1302.h

4.2 驱动文件

onewire.c

ds1302.c

4.3 主函数代码


0.心得体会

这套题,刷新了我的认知:

        1.对于led的操作,不要定义单位的led,在io编程下总是会冲突,造成效果不好。然后我尝试了用与或进行位运算,但还是会造成引脚冲突。最后,我又尝试了定义一个led状态的变量,每次我都去改变这个变量,然后再将变量赋给P0端口,有大佬这样写出来了,但我还是失败了。于是,我想到了一个损招:本题只有3个led灯,因此建立了一个数组,将3个led的9种状态直接写出来。

        2.对于继电器的操作,也不要定义继电器的一个引脚,直接对P0口进行操作。

        3.主函数的循环中,最好的状态是只出现键值扫描函数、ds1302刷新函数、ds18b20刷新函数。然后外设的刷新采用中断一定时间产生一个标志位,外设读取标志位从而决定是否刷新。

        4.led、继电器、数码管的刷新可以放进中断程序中,对应刷新时间为:20*50us,20*50us,50*50us。

        5.对于io编程模式,要注意对锁存器常关闭。同时采用先赋值P0端口,再打开锁存器方式,这样有效防止数据冲突。

        6.要注意,ds18b20读出来的温度是三位数,因此在进行比较时需要除以10再进行

1.题目如下

2.代码实现的思路

键值扫描

键值扫描通过keyrunning函数实现。该函数检测外部按键的按下,并根据按键对key13_stateSMG_flag变量进行相应的修改。具体实现方式如下:

  • 使用C3C4作为控制列,H3H4作为行读取信号。
  • 通过设置C3C4的电平状态,可以检测到与它们相对应行H3H4的按键是否被按下。
  • 按键S13用于切换继电器工作状态(key13_state变量)。
  • 按键S12用于切换显示模式(SMG_flag变量)。
  • 按键S17S16分别用于调整时钟模式和设置温度(在SMG_flag为2和3时具有不同的功能)。

数码管窗口切换

数码管窗口切换是通过修改SMG_flag变量实现的,该变量影响flash_SMG函数中数码管显示的内容。

  • SMG_flag为1时,显示温度;
  • SMG_flag为2时,显示时间;
  • SMG_flag为3时,显示设置的温度。

数码管的动态扫描

数码管的动态扫描通过flash_SMG函数实现。该函数基于SMG_flagflash_count变量,动态调整数码管显示的内容,实现动态扫描效果。通过在定时器中断服务程序中调用flash_SMG函数,并且周期性地更改flash_count的值来实现数码管的动态扫描。

继电器工作时L3闪烁,整点时刻L1灯光亮5秒

  • 继电器的控制和LED(包括L3)的状态变化在relay_ledrunning函数中实现。
  • flag_5s用于判断是否在整点时刻,影响L1的亮灯逻辑。
  • count_100mstimer1_service中断服务程序中翻转,用于实现L3的闪烁效果。
  • 当继电器工作时,根据温度与设定温度的关系以及flag_5s的值,通过调用state_relaystate_led函数,控制继电器的开关和L3、L1的亮灯逻辑。

3.变量列表

定义的常量和数组

  • duanmaduanma_dot:定义了数码管的显示码(不含/含小数点)。用于控制数码管显示数字0-9及特殊符号。
  • led_state:定义了LED灯的状态,对应L1至L3的开关状态。其中1点亮,0熄灭。

功能控制和状态变量

  • SMG_flag:数码管显示模式标志,取值1到3,分别代表显示温度、时间和设置温度。
  • key13_state:切换工作模式,是一个位变量,0和1分别代表温度控制模式,和时间控制模式。
  • ds1302_mode2:用于控制数码管时间显示模式,是一个位变量,0和1分别代表正常显示“时分”和特殊显示“分秒”。
  • flash_ds1302flash_temperature:这两个位变量用于控制DS1302时间和DS18B20温度的刷新,1表示需要刷新,0表示不需要。
  • set_temperature:设定的温度值,用于温度控制逻辑,取值范围为10到99(摄氏度)。
  • temperature:DS18B20测量的实际温度值,用于显示和控制逻辑。

定时器和计数变量

  • count_50us:定时器0的计数变量,用于控制50微秒的计时和相应的事件触发。
  • flash_count:用于数码管动态扫描的计数变量,控制数码管的显示内容和顺序。
  • flag_5s:一个位变量,用于标识是否在整点时刻亮灯5秒的状态。

4.代码参考

4.1 头文件

onewire.h

#ifndef __ONEWIRE_H__
#define __ONEWIRE_H__void Write_DS18B20(unsigned char dat);
unsigned char Read_DS18B20(void);
bit init_ds18b20(void);
void Delay_OneWire(unsigned int t);#endif

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 );#endif

4.2 驱动文件

onewire.c

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

ds1302.c

/*	# 	DS1302代码片段说明1. 	本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 	参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。
*/								//
#include <reg52.h>
#include <intrins.h>sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3;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);			
}

4.3 主函数代码

#include <reg52.h>
#include <intrins.h>
#include "ds1302.h"
#include "onewire.h"sbit AUXR = 0x8e;sbit C3 = P3^5;
sbit C4 = P3^4;
sbit H3 = P3^2;
sbit H4 = P3^3;unsigned char code duanma[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc1,0xbf};
unsigned char code duanma_dot[10] = { 0x40 , 0x79 , 0x24 , 0x30 , 0x10 , 0x12 , 0x02 , 0x78 , 0x00 , 0x10 };
unsigned char code write_ds1302_addr[7] = { 0x80 , 0x82 , 0x84 , 0x86 , 0x88 , 0x8a , 0x8c };
unsigned char code read_ds1302_addr[7] = { 0x81 , 0x83 , 0x85 , 0x87 , 0x89 , 0x8b , 0x8d };
unsigned char ds1302_time[8] = { 0x45 , 0x59 , 0x7 , 0x11 , 0x04 , 0x04 , 0x24 };
unsigned char code led_state[8] = { 0xff , 0xfb , 0xfd , 0xf9 , 0xfe , 0xfa , 0xfc , 0xf8 }; //对应L1,L2,L3,1点亮,0熄灭
//									000		001		010	   011	 100 	101 	110 	111void flash_SMG ();
void keyrunning ();
void relay_ledrunning ();unsigned char SMG_flag = 1;
bit key13_state = 0;
bit ds1302_mode2 = 0;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 );
}	void state_relay ( unsigned char value_relay )
{select_HC573 ( 0 );	if ( value_relay == 0 ){P0 =0x00;}else{P0 =0x10;}select_HC573 ( 5 );select_HC573 ( 0 );
}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_ds1302()
{unsigned char i;Write_Ds1302_Byte( 0x8e , 0x00 );for ( i=0 ; i<8 ; i++ ){Write_Ds1302_Byte( write_ds1302_addr[i] , ds1302_time[i] );}Write_Ds1302_Byte( 0x8e , 0x80 );
}bit flash_ds1302 = 0;
void ds1302_flash ()
{if ( flash_ds1302 == 1 ){unsigned char i;for ( i=0 ; i<8 ; i++ ){ds1302_time[i] = Read_Ds1302_Byte ( read_ds1302_addr[i] );}flash_ds1302 = 0;}
}void Delay700ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();_nop_();i = 32;//32j = 236;k = 16;do{do{while (--k);} while (--j);keyrunning ();	
//		relay_ledrunning ();		} while (--i);
}bit flash_temperature = 0;
unsigned int set_temperature = 23;
unsigned int temperature = 0;
void ds18b20_temperature ()
{if ( flash_temperature == 1 ){unsigned char LSB,MSB;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_temperature = 0;}}//===================================================================================
void init_timer0 (void)		//50微秒@12.000MHz
{AUXR &= 0x7F;		//定时器时钟12T模式TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x02;		//设置定时器模式TL0 = 0xCE;		//设置定时初值TH0 = 0xCE;		//设置定时重载值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时EA = 1;ET0 = 1;
}unsigned char count_50us = 0;
unsigned char flash_count = 0;
void timer0_service () interrupt 1
{count_50us++;if ( count_50us % 50 == 0 ){if ( SMG_flag == 1 ){if ( ++flash_count > 5 ){flash_count = 0;}}else if ( SMG_flag == 2 ){if ( ++flash_count == 8 ){flash_count = 0;}}else if ( SMG_flag == 3 ){if ( ++flash_count > 4 ){flash_count = 0;}}flash_SMG ();		}if ( count_50us == 200 ){count_50us = 0;flash_ds1302 = 1;if ( SMG_flag == 1 ){flash_temperature = 1;			}}if ( count_50us % 20 == 0 ){relay_ledrunning ();}}//=======================================================================
void init_timer1(void)		//50毫秒@12.000MHz
{AUXR &= 0xBF;		//定时器时钟12T模式TMOD &= 0x0F;		//设置定时器模式TL1 = 0xB0;		//设置定时初值TH1 = 0x3C;		//设置定时初值TF1 = 0;		//清除TF1标志TR1 = 1;		//定时器1开始计时EA = 1;ET1 = 1;
}unsigned char count_50ms = 0;
bit count_100ms = 0;
void timer1_service () interrupt 3
{if ( ++count_50ms % 2 == 0 ){count_100ms = ~count_100ms;}	
}bit flag_5s = 0;
void relay_ledrunning ()
{if ( ds1302_time[0] >= 0x00 && ds1302_time[0] < 0x06 && ds1302_time[1] == 0x00 ){flag_5s = 1;}else {flag_5s = 0;}if ( (key13_state == 0) && (temperature/10 >= set_temperature) ){state_relay( 1 );if ( flag_5s == 0 ){if ( count_100ms == 0 ){state_led ( led_state[2] );}else{state_led ( led_state[3] );}}else if ( flag_5s == 1 ){if ( count_100ms == 0 ){state_led ( led_state[6] );}else{state_led ( led_state[7] );}	}}else if ( (key13_state == 0) && (temperature/10 < set_temperature) ){state_relay( 0 );if ( flag_5s == 0 ){state_led ( led_state[2] );}else if ( flag_5s == 1 ){state_relay ( 1 );state_led ( led_state[6] );}}else if ( key13_state == 1 ){if ( flag_5s == 0 ){state_relay( 0 );state_led ( led_state[0] );}else if ( flag_5s == 1 ){state_relay( 1 );if ( count_100ms == 0 ){state_led ( led_state[4] );}else{state_led ( led_state[5] );}}}else{state_led ( 7 );state_relay ( 0 );}
}	void flash_SMG ()
{state_SMG_all ( 0xff );if ( SMG_flag == 1 ){switch ( flash_count ){case 0 :	state_SMG ( 0 , duanma[10] );break;case 1 :	state_SMG ( 1 , duanma[SMG_flag] );break;case 2 :	state_SMG ( 5 , duanma[temperature/100] );break;case 3 :	state_SMG ( 6 , duanma_dot[temperature/10%10] );break;case 4 :	state_SMG ( 7 , duanma[temperature%10] );break;case 5 :	state_SMG_all ( 0xff );break;}}else if ( SMG_flag == 2 ){switch ( flash_count ){case 0 :	state_SMG ( 0 , duanma[10] );break;case 1 :	state_SMG ( 1 , duanma[SMG_flag] );break;case 2 :	if ( ds1302_mode2 == 1 ){state_SMG ( 3 , duanma[ds1302_time[1]/16] );}else{state_SMG ( 3 , duanma[ds1302_time[2]/16] );}break;case 3 :if ( ds1302_mode2 == 1 ){state_SMG ( 4 , duanma[ds1302_time[1]%16] );}else{state_SMG ( 4 , duanma[ds1302_time[2]%16] );}				break;case 4 :	state_SMG ( 5 , duanma[11] );break;case 5 :if ( ds1302_mode2 == 1 ){state_SMG ( 6 , duanma[ds1302_time[0]/16] );}else{state_SMG ( 6 , duanma[ds1302_time[1]/16] );}				break;case 6 :	if ( ds1302_mode2 == 1 ){state_SMG ( 7 , duanma[ds1302_time[0]%16] );}else{state_SMG ( 7 , duanma[ds1302_time[1]%16] );}break;case 7 :	state_SMG_all ( 0xff );break;}}		else if ( SMG_flag == 3 ){switch ( flash_count ){case 0 :	state_SMG ( 0 , duanma[10] );break;case 1 :	state_SMG ( 1 , duanma[SMG_flag] );break;case 2 :	state_SMG ( 6 , duanma[set_temperature/10] );break;case 3 :	state_SMG ( 7 , duanma[set_temperature%10] );break;case 5 :	state_SMG_all ( 0xff );break;}}
}void Delay2ms()		//@12.000MHz
{unsigned char i, j;i = 24;j = 85;do{while (--j);} while (--i);
}void keyrunning ()
{C3 = 0;C4 = H3 = H4 = 1;if ( H3 == 0 ){Delay2ms();if ( H3 == 0 ){while ( H3 == 0 );//S13key13_state = ~key13_state;}}else if ( H4 == 0 ){Delay2ms();if ( H4 == 0 ){while ( H4 == 0 );//S12				if ( ++SMG_flag == 4 ){SMG_flag = 1;}}}C4 = 0;C3 = H3 = H4 = 1;	if ( H3 == 0 ){Delay2ms();if ( H3 == 0 ){while ( H3 == 0 )//S17{				if ( SMG_flag == 2 ){	ds1302_flash();ds1302_mode2 = 1;}		}ds1302_mode2 = 0;if ( SMG_flag == 3 ){if ( --set_temperature == 9 ){set_temperature = 10;}}}}else if ( H4 == 0 ){Delay2ms();if ( H4 == 0 ){while ( H4 == 0 );//S16if ( SMG_flag == 3 ){if ( ++set_temperature == 100 ){set_temperature = 99;}}}}
}	void main ()
{init_ds1302();init_timer0();init_timer1();init_sys();while ( 1 ){keyrunning ();				ds1302_flash ();ds18b20_temperature ();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++高级特性:万能引用、引用折叠与完美转发(七)

1、万能引用与引用折叠 1.1、普通引用 之前的学习中学习了左值、右值、左值引用、右值引用、常引用等&#xff0c;但是很可惜它们都必须搭配固定的类型导致它们受到一些限制 void test1() {int a 1, b 2;int& left_ref_var a; // int&& right_ref_var a; …

[MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目

文章目录 获取资源从源码构建从CDN获取获取扩展插件 创建项目创建控件创建Blazor组件初始化保存销毁编写渲染逻辑 实现只读/编辑功能切换模式获取只读模式状态响应切换事件 实现明/暗主题切换项目地址 Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它由CodeX…

自定义滚动条样式:前端实现跨浏览器兼容

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【核心完整复现】基于目标级联法的微网群多主体分布式优化调度

1 主要内容 之前发布了华电学报的复现程序《基于目标级联法的微网群多主体分布式优化调度》&#xff0c;具体链接为【防骗版】基于目标级联法的微网群多主体分布式优化调度&#xff0c;虽然对模型及结果进行了复现&#xff0c;但是部分模型细节和参数并没有完全实现&#xff0…

MySQL单行函数

文章目录 数值函数基本函数角度与弧度互换函数三角函数指数与对数进制间的转换 字符串函数日期和时间函数获取日期、时间日期与时间戳的转换获取月份、星期、星期数、天数等函数日期的操作函数时间和秒钟转换的函数计算日期和时间的函数日期的格式化与解析 流程控制函数加密与解…

DonkeyDocker-v1-0渗透思路

MY_BLOG https://xyaxxya.github.io/2024/04/13/DonkeyDocker-v1-0%E6%B8%97%E9%80%8F%E6%80%9D%E8%B7%AF/ date: 2024-04-13 19:15:10 tags: 内网渗透Dockerfile categories: 内网渗透vulnhub 靶机下载地址 https://www.vulnhub.com/entry/donkeydocker-1,189/ 靶机IP&a…

elasticSearch从零整合springboot项目实操

type会被弃用 &#xff0c;就是说之后的elasticSearch中只会存在 索引&#xff08;indices&#xff09; 和 一行&#xff08;document&#xff09; 和字段&#xff08;fields&#xff09; elasticSearch 和solr的区别最大的就是 es对应的 是 json的格式 。 solr有xml和josn等…

React Hooks 全解: 常用 Hooks 及使用场景详解

React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。 React 中常用的 10 个 Hooks,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect、useImperativeHandle 和 useDebugValue。这些…

ARM内核的CPU架构模型

1.引言 程序员在编码的时候&#xff0c;如果想有进一步的提升&#xff0c;我认为还是要深入底层理解程序运行原理才好。最近看了一些ARM架构的讲解&#xff0c;总结了如下。虽然是以ARM为原型画的图形&#xff0c;但是对于C和C的编程&#xff0c;还是有一些参考价值的。 2. AR…

云服务器租用一年、1个月优惠价格表,阿里/腾讯/京东/华为云

现在租一个服务器多少一个月&#xff1f;优惠价格低至3.8元1个月&#xff0c;租用一个月云服务器收费价格表&#xff1a;阿里云和腾讯云2核2G3M服务器优惠价格61元一年&#xff0c;折合一个月5元&#xff0c;京东云轻量云主机5.8元一个月&#xff0c;华为云服务器优惠价格3.8元…

wangeditor与deaftjs的停止维护,2024编辑器该如何做技术选型(一)

wangeditor暂停维护的声明&#xff1a; wangeditor是国内开发者开发的编辑器&#xff0c;用户也挺多&#xff0c;但是由于作者时间关系&#xff0c;暂停维护。 deaft的弃坑的声明&#xff1a; draft是Facebook开源的&#xff0c;但是也弃坑了&#xff0c;说明设计的时候存在很大…

为数据穿上安全的外衣——零售电商场景下的数据安全体系建设

在电子商务交易过程中&#xff0c;会涉及大量的个人和财务数据的传输和处理&#xff0c;随着电子商务的发展&#xff0c;数据安全风险也成为一个备受关注的问题。 而跨境电商&#xff0c;属于出海业务&#xff0c;涉及到海外不同国家的政策法规&#xff0c;且数据作为电商的业…

等保测评2.0——网络安全等级保护测评的初步了解

一、什么是网络安全等级保护测评&#xff1f; 二、网络安全等级保护&#xff0c;保护的是什么&#xff1f; 等级保护对象&#xff1a;网络安全等级保护工作直接作用的对象。&#xff08;注&#xff1a;主要包括信息系统、通信网络设施和数据资源等&#xff09; 计算机信息系统…

数据库系统概论(超详解!!!)第四节 数据库安全性

问题的提出&#xff1a; 数据库的一大特点是数据可以共享 数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享。 1.数据库的安全概述 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。 系统安全保护措施是否有效…

Linux【实战篇】—— NFS服务搭建与配置

目录 一、介绍 1.1什么是NFS&#xff1f; 1.2客户端与服务端之间的NFS如何进行数据传输&#xff1f; 1.3RPC和NFS的启动顺序 1.4NFS服务 系统守护进程 二、安装NFS服务端 2.1安装NFS服务 2.2 创建共享目录 2.3创建共享目录首页文件 2.4关闭防火墙 2.5启动NFS服务 2.…

基于VC709构建FPGA开发学习平台(一)-系统时钟与LED

一、时钟 1. 系统时钟 板载U34可编程晶振SI570&#xff0c;为用户提供基础时钟&#xff0c;上电后&#xff0c;默认时钟频率为156.25Mhz&#xff0c;可作为free run时钟源&#xff0c;输入到PLL中&#xff0c;生成系统时钟&#xff1a; 约束为&#xff1a; set_property PACK…

Unity给地图物体添加对撞机

在项目/Assets下创建Prefabs文件夹 选择素材拖入层级下&#xff0c;注意此时地图素材有可能看不到&#xff0c;此时选择Tilemap在检查器中修改图层顺序调至最低。 添加对撞机 选择素材&#xff0c;在检查器中点击添加组件Box Collider 2D&#xff0c;将素材拖入Prefabs文件下…

SSL、TLS和HTTPS:网络安全的重要基石

随着互联网的快速发展&#xff0c;网络安全问题日益凸显。为了保护数据在传输过程中的安全&#xff0c;各种加密协议和技术应运而生。SSL&#xff08;安全套接层&#xff09;、TLS&#xff08;传输层安全&#xff09;和HTTPS&#xff08;超文本传输安全协议&#xff09;是三个最…

力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)

目录 题目链接 题目分析 题目定位&#xff1a; 解题思路 解题思路1&#xff08;粗暴但是复杂度高&#xff09; 解题思路2&#xff08;巧妙并且复杂度低&#xff09; 题目链接 138. 复制带随机指针的链表https://leetcode-cn.com/problems/copy-list-with-random-pointer/ …

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭…