嵌入式蓝桥杯电子赛嵌入式(第14届国赛真题)总结

  1. 打开systic

 

  1. 生成工程
  2. 编译查看是否有问题
  3. 同时打开对应需要的文档

修改名称的要求 

5.简单浏览赛题

选择题,跟单片机有关的可以查相关手册

  1. 答题顺序

 先从显示开始看

1,2 

  1. 所以先打开PA1的定时器这次选TIM2

从模式、TI2FP2二通道、内部时钟、1通道设为直接2通道设置为间接、通道配置为:间接通道1设置为下降沿,直接通道设置为上升沿 

所以先打开PA7的定时器这次选TIM17_CH1

3后续再看

4 先在产品手册找到R37

检测一下J11跳线帽是否在,需要是连上的

定时器配置及参数扫描 

选择单边模式 

参数配置

连续不需要,用程序驱动就可以

配置过采样、使能过采样,3bit,方便滤波,采样时间,防止程序卡死

6、通过按键完成界面切换、参数设置等功能

按键配置

Led配置 

 

PD2设置默认为低电平

生成文件---10ms定时器用与按键使用

3.3显示界面 

  1. 实时数据界面
  1. 报警参数界面

 

  1. 报警统计界面

 

4)回放设置界面 

3.6 按键功能 

 

 

3) B3:定义为“加”按键。 ① 在报警参数界面下,按下 B3 按键: 若当前选择的是频率上限参数(FH),FH 值加 1000Hz。 若当前选择的是电压上限参数(AH),AH 值加 0.3V。 若当前选择的是温度上限参数(TH),TH 值加 1℃。 ② 在回放设置界面下,按下 B3 按键: 若当前选择的是脉冲信号回放分频系数(FP),FP 值加 1。 若当前选择的是电压信号回放最小值(VP),VP 值加 0.3V。 若当前选择的是记录回放时间(TT),TT 值加 2 秒。 ③ 在实时数据界面下,按下 B3 按键: 若设备已经完成了数据记录,则通过 PA7 引脚回放“电压信号”。

4) B4:定义为“减”按键。 ① 在报警参数界面下,按下 B4 按键: 若当前选择的是频率上限参数(FH),FH 值减 1000Hz。 若当前选择的是电压上限参数(AH),AH 值减 0.3V。 若当前选择的是温度上限参数(TH),TH 值减 1℃。 ② 在回放设置界面下,按下 B4 按键: 若当前选择的是脉冲信号回放分频系数(FP),FP 值减 1。 若当前选择的是电压信号回放最小值(VP),VP 值减 0.3V。 若当前选择的是记录回放时间(TT),TT 值减 2 秒。 ③ 在实时数据界面下,按下 B4 按键: 若设备已经完成了数据记录,则通过 PA7 引脚回放“脉冲信号”。

5) B3、B4。 在任何一个界面下,所检测到 B3、B4 按键均处于按下状态,且持续时间超- 6 - 过 2 秒,设备回到初始状态。4. 初始状态说明) 6) 通用按键要求: l 按键应进行有效的防抖处理,避免出现一次按键动作触发多次功能等 情形。 l 按键动作不应影响数据采集过程和屏幕显示效果。 l 有效区分长、短按键功能,互不影响。 l 参数调整应考虑边界值,不出现无效参数。 l 当前界面下无功能的按键按下,不触发其它界面的功能。

这里灯

LED处理完之后再写

 

要求基本符合

验证

没问题的功能标绿,

有问题的标绿

后半场难点

 

 

 

初值随便设置,在程序中也能更改

案例程序

extern struct Bkeys bkey[];
uint8_t led_sta=0x00;
char text[30];
float DS_temp;
int frq=0;
int duty=0;
float adc_data_PB15;
uint32_t time100ms;
uint8_t view=0;uint16_t FN,AN,TN;//频率报警次数(FN)、电压报警次数(AN)和温度报警次数(TN)。
uint16_t FH=2000,TH=30;//频率上限参数\温度上限参数
float AH=3.0f;//电压上限参数
uint16_t FP=1,TT=6;//脉冲信号回放分频系数、记录回放时间
float VP=0.9;//电压信号回放最小值int16_t FH_t=2000,TH_t=30;//频率上限参数\温度上限参数 临时显示
float AH_t=3.0f;//电压上限参数  临时显示
uint16_t FP_t=1,TT_t=6;//脉冲信号回放分频系数、记录回放时间 临时显示
float VP_t=0.9;//电压信号回放最小值  临时显示uint8_t para_sel;//按键参数选择
uint8_t rec_en;//记录使能
uint8_t is_rec;//已记录数据
uint8_t replay_V_en;//回放电压使能
uint8_t replay_PWM_en;//回放电压使能#define rec_maxLen 1000
float rec_V[rec_maxLen];
uint16_t rec_frq[rec_maxLen];
uint8_t  rec_duty[rec_maxLen];
uint16_t rec_pointer;//当前记录的数组下标
uint16_t rec_interval;//每两个数之间的时间间隔

 

void LED_Disp(uint8_t dsLED)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void LED_Chg(uint8_t num,uint8_t sta)
{uint8_t pos=0x01<<(num-1);led_sta=(led_sta&(~pos))|(pos*sta);LED_Disp(led_sta);
}
float adc_read_os(ADC_HandleTypeDef *hadc)
{//定义两个变量一个接收传回值,最后一个接收经过处理的函数uint16_t adc_val;float adc_f;HAL_ADC_Start(hadc);adc_val=HAL_ADC_GetValue(hadc);adc_f=adc_val*3.3f/65536.0f;return adc_f;
}
void LCD_Show(void)
{if(view==0)//实时数据界面
{sprintf(text,"        DATA  ");LCD_DisplayStringLine(Line1,(uint8_t *)text);sprintf(text,"     F=%d   ",frq);//输入到 PA1 引脚的信号频率LCD_DisplayStringLine(Line3,(uint8_t *)text);sprintf(text,"     D=%d%%   ",duty);//占空比LCD_DisplayStringLine(Line4,(uint8_t *)text);sprintf(text,"     A=%.1f   ",adc_data_PB15);//电位器 R37 输出的实时电压值LCD_DisplayStringLine(Line5,(uint8_t *)text);sprintf(text,"     T=%.1f   ",DS_temp);//采集到的环境温度值(T)LCD_DisplayStringLine(Line6,(uint8_t *)text);
}if(view==1)//报警参数界面{sprintf(text,"        PARA  ");LCD_DisplayStringLine(Line1,(uint8_t *)text);sprintf(text,"     FH=%d   ",FH_t);//频率上限参数LCD_DisplayStringLine(Line3,(uint8_t *)text);sprintf(text,"     AH=%.1f   ",AH_t);//电压上限参数LCD_DisplayStringLine(Line4,(uint8_t *)text);sprintf(text,"     TH=%d   ",TH_t);//温度上限参数LCD_DisplayStringLine(Line5,(uint8_t *)text);		}if(view==2)// 报警统计界面{sprintf(text,"        RECD  ");LCD_DisplayStringLine(Line1,(uint8_t *)text);sprintf(text,"     FN=%d   ",FN);//频率报警次数LCD_DisplayStringLine(Line3,(uint8_t *)text);sprintf(text,"     AN=%d   ",AN);//电压报警次数LCD_DisplayStringLine(Line4,(uint8_t *)text);sprintf(text,"     TN=%d   ",TN);//温度报警次数LCD_DisplayStringLine(Line5,(uint8_t *)text);}if(view==3)// 回放设置界面{sprintf(text,"        FSET  ");LCD_DisplayStringLine(Line1,(uint8_t *)text);sprintf(text,"     FP=%d   ",FP_t);//脉冲信号回放分频系数LCD_DisplayStringLine(Line3,(uint8_t *)text);sprintf(text,"     VP=%.1f   ",VP_t);//电压信号回放最小值LCD_DisplayStringLine(Line4,(uint8_t *)text);sprintf(text,"     TT=%d   ",TT_t);// 记录回放时间LCD_DisplayStringLine(Line5,(uint8_t *)text);}	}
void key_proc()
{if(bkey[1].short_flag==1){view++;if(view>3)view=0;LCD_Clear(Black);para_sel=0;if(view==2)//生效{FH=FH_t;AH=AH_t;TH=TH_t;}if(view==0){FP=FP_t;VP=VP_t;TT=TT_t;}bkey[1].short_flag=0;}	if(bkey[2].short_flag==1){if(view==0){rec_en=1;rec_interval=(TT*1000)/rec_maxLen;rec_pointer=0;for(int i=0;i<rec_maxLen;i++){rec_V[i]=0;rec_frq[i]=0;rec_duty[i]=0;}}if(view==1||view==3) {para_sel++;if(para_sel>2)para_sel=0;}if(view==2) FN=AN=TN=0;bkey[2].short_flag=0;}		if(bkey[3].short_flag==1){if(view==1){if(para_sel==0)FH_t+=1000;else if(para_sel==1)AH_t+=0.3f;else if(para_sel==2)TH_t+=1;if(FH_t>10000)FH_t=10000;if(AH_t>3.3f)AH_t=3.3f;if(TH_t>80)TH_t=80;}if(view==3){if(para_sel==0)FP_t+=1;else if(para_sel==1)VP_t+=0.3f;else if(para_sel==2)TT_t+=2;if(FP_t>10)FP_t=10;if(VP_t>3.3f)VP_t=3.3f;if(TT_t>10)TT_t=10;			}	if(view==0&&is_rec==1) {replay_V_en=1;HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);rec_pointer=0;}bkey[3].short_flag=0;}		if(bkey[4].short_flag==1){if(view==1){if(para_sel==0)FH_t-=1000;else if(para_sel==1)AH_t-=0.3f;else if(para_sel==2)TH_t-=1;if(FH_t<1000)FH_t=1000;if(AH_t<0.0f)AH_t=0.0f;if(TH_t<0)TH_t=0;}if(view==3){if(para_sel==0)FP_t-=1;else if(para_sel==1)VP_t-=0.3f;else if(para_sel==2)TT_t-=2;if(FP_t<1)FP_t=1;if(VP_t<0.0f)VP_t=0.0f;if(TT_t<2)TT_t=2;		}	if(view==0&&is_rec==1) {replay_PWM_en=1;HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);rec_pointer=0;}bkey[4].short_flag=0;}		static uint8_t Llong=0;if(bkey[5].long_flag==1){if(Llong==0){FN=AN=TN=0;//频率报警次数(FN)、电压报警次数(AN)和温度报警次数(TN)。FH=2000;TH=30;//频率上限参数\温度上限参数AH=3.0f;//电压上限参数FP=1;TT=6;//脉冲信号回放分频系数、记录回放时间VP=0.9;//电压信号回放最小值		view=0;is_rec=0;replay_V_en=0;//回放电压使能replay_PWM_en=0;//回放电压使能FH_t=2000;TH_t=30;//频率上限参数\温度上限参数AH_t=3.0f;//电压上限参数FP_t=1;TT_t=6;//脉冲信号回放分频系数、记录回放时间VP_t=0.9;//电压信号回放最小值	Llong=1;}bkey[3].short_flag=0;bkey[4].short_flag=0;}else Llong=0;
}
void LED_proc()
{if(uwTick-time100ms>100){static uint8_t blink=0;blink=!blink;if(rec_en) LED_Chg(1,blink);else LED_Chg(1,0);if(replay_PWM_en) LED_Chg(2,blink);else LED_Chg(2,0);if(replay_V_en) LED_Chg(3,blink);else LED_Chg(3,0);time100ms=uwTick;}if(frq>FH) LED_Chg(4,1);else       LED_Chg(4,0);if(adc_data_PB15>AH) LED_Chg(5,1);else      					 LED_Chg(5,0);	if(DS_temp>TH) LED_Chg(6,1);else    		   LED_Chg(6,0);	
}
void alarm_proc()
{static uint8_t LF=0,LA=0,LT=0;if(frq>FH){if(LF==0){FN++;LF=1;}}else LF=0;if(adc_data_PB15>AH){if(LA==0){AN++;LA=1;}}else  LA=0;if(DS_temp>TH){if(LT==0){TN++;LT=1;}}else LT=0;	
}

 

void rec_proc()
{adc_data_PB15=adc_read_os(&hadc2);frq=1000000.0f/(HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2)+1);duty=((HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1)+1)*100.0f/((HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2)+1)));static uint16_t time_inv=0;if(rec_en==1){if(time_inv>=rec_interval){rec_V[rec_pointer]=adc_data_PB15;rec_frq[rec_pointer]=frq;rec_duty[rec_pointer]=duty;rec_pointer++;	time_inv=0;if(rec_pointer>=rec_maxLen){rec_en=0;is_rec=1;}}time_inv++;}
}
void replay_proc()
{static uint16_t time_inv=0;if(replay_PWM_en==1){if(time_inv>=rec_interval){__HAL_TIM_SET_AUTORELOAD(&htim17,(10000000/(rec_frq[rec_pointer]/FP))-1);__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,((10000000/(rec_frq[rec_pointer]/FP))-1)*(rec_duty[rec_pointer]/100.0f));rec_pointer++;time_inv=0;if(rec_pointer>=rec_maxLen){HAL_TIM_PWM_Stop(&htim17,TIM_CHANNEL_1);replay_PWM_en=0;}}time_inv++;}if(replay_V_en==1){__HAL_TIM_SetAutoreload(&htim17,10000-1);if(time_inv>=rec_interval){uint16_t duty_temp;if(rec_V[rec_pointer]<VP)duty_temp=1000;else if(rec_V[rec_pointer]>3.3f)duty_temp=10000;else duty_temp=10000*((0.9f/(3.3f-VP))*(rec_V[rec_pointer]-3.3f)+1);__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,duty_temp);rec_pointer++;time_inv=0;if(rec_pointer>=rec_maxLen){HAL_TIM_PWM_Stop(&htim17,TIM_CHANNEL_1);replay_V_en=0;}}time_inv++;}
}
void setup()
{HAL_TIM_Base_Start_IT(&htim6);//TIM2_CH2输入  PA1HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);LED_Disp(0x00);//关掉所有LEDLCD_Init();//LCD初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);ds18b20_init_x();time100ms=uwTick;
}
void loop()
{LCD_Show();key_proc();LED_proc();alarm_proc();DS_temp=ds18b20_read();
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM6)if(rec_en==0)key_serv_long();
}	

 ----------------------------key------------------------------------------------

#include "key.h"struct Bkeys bkey[6]={0,0,0,0};uint8_t key_read()
{if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0&&HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)return 5;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0) return 1;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0) return 2;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0) return 3;else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0) return 4;else return 0;
}/*长按快速增加功能*/
void key_serv_long()
{uint8_t key_sta=key_read();if(key_sta!=0){bkey[key_sta].age++;if(bkey[key_sta].age>1) bkey[key_sta].press=1;}else{for(int i=0;i<6;i++) {if(bkey[i].press==1&&bkey[i].long_flag==0)bkey[i].short_flag=1;bkey[i].age=0;bkey[i].press=0;bkey[i].long_flag=0;}}if(bkey[key_sta].age>199) bkey[key_sta].long_flag=1;
}

 

/------------------------stm32g4xx_it------------------------/void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 *//* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 */rec_proc();replay_proc();/* USER CODE END SysTick_IRQn 1 */
}

 

 

 

 

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

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

相关文章

Oracle Agile PLM Web Service Java示例测试开发(一)环境环境、准备说明

1 说明 1.1 PLM信息介绍 PLM&#xff1a;Oracle的产品Agile PLM&#xff08;Agile Product Lifecycle Management&#xff09; 版本号&#xff1a;9.3.6 (Build 47) Path&#xff1a;https://IP:7002/Agile/default/login-cms.jsp 1.2 开发工具和环境说明 开发工具&#xf…

引领产品创新: 2025 年 PM 效能倍增法则

本文讲述 PM 如何利用 AI 做到效率倍增&#xff0c;非常有借鉴意义&#xff0c;故而翻译于此。 原文链接&#xff1a;https://www.news.aakashg.com/p/the-ai-pms-playbook 在产品圈有一个广为流传的说法&#xff1a; “每个产品经理都应该成为 AI 产品经理。” 这个观点有一…

unity学习20:time相关基础 Time.time 和 Time.deltaTime

目录 1 unity里的几种基本时间 1.1 time 相关测试脚本 1.2 游戏开始到现在所用的时间 Time.time 1.3 时间缩放值 Time.timeScale 1.4 固定时间间隔 Time.fixedDeltaTime 1.5 两次响应时间之间的间隔&#xff1a;Time.deltaTime 1.6 对应测试代码 1.7 需要关注的2个基本…

在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)

文章目录 1 在Windows系统中安装Ollama&#xff0c;并成功启动&#xff1b;2 非docker方式安装open-webui3下载并部署模型deepseek-r1 Ollama Ollama 是一个命令行工具&#xff0c;用于管理和运行机器学习模型。它简化了模型的下载与部署&#xff0c;支持跨平台使用&#xff0c…

996引擎 - NPC-动态创建NPC

996引擎 - NPC-动态创建NPC 创建脚本服务端脚本客户端脚本参考资料有个小问题,创建NPC时没有控制朝向的参数。所以。。。自己考虑怎么找补吧。 创建脚本 服务端脚本 Mir200\Envir\Market_Def\test\test001-3.lua -- NPC入口函数 function main(player)-- 获取玩家的用户名…

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…

82,【6】BUUCTF WEB .[CISCN2019 华东南赛区]Double Secret

进入靶场 提到了secret&#xff0c;那就访问 既然这样&#xff0c;那就传参看能不能报错 这个页面证明是有用的 传参长一点就会报错&#xff0c;传什么内容无所谓 所以网站是flask框架写的 有一个颜色深一点&#xff0c;点开看看 rc4加密url编码 import base64 from urllib…

高频 SQL 50 题(基础版)_620. 有趣的电影

高频 SQL 50 题&#xff08;基础版&#xff09;_620. 有趣的电影 一级目录 表&#xff1a;cinema id 是该表的主键(具有唯一值的列)。 每行包含有关电影名称、类型和评级的信息。 评级为 [0,10] 范围内的小数点后 2 位浮点数。 编写解决方案&#xff0c;找出所有影片描述为 …

React 前端框架实战教程

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 React 是由 Facebook 开发的前端 JavaScript 库&#xff0c;旨在构建高效、灵活的用户界面&#xff0c;尤其适用于单页应用…

【Linux线程总结】VMA ELF 地址转换 同步和互斥 条件变量 PC模型 循环队列 POSIX信号量 线程池

文章目录 VMAELF地址转换线程相关函数同步和互斥引入条件变量总结条件变量PC模型循环队列POSIX信号量接口posix信号量和systemV信号量主要异同适用场景总结 基于循环队列的PCModel 锁--条件变量--信号量 的产生由来线程相关问题线程池回顾进程池 VMA ELF Executable and Linka…

基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础

摘要 本文分为两部分&#xff1a;Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置&#xff0c;可以实现用VSCode操作虚拟机。为了后续工作&#xff0c;搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础&#xff0c;包…

FreeRtos的使用教程

定义&#xff1a; RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。 特点&#xff1a; 支持多任务管理&#xff0c; 处理多个事件&#xff0c; 实现更复杂的逻辑。 与计算…

【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Go中的三种锁

Go 中的锁 Go 语言提供了多种锁机制&#xff0c;用于在并发编程中保护共享资源。常见的锁包括 互斥锁、读写锁 和 sync.Map 的安全锁。 1. 互斥锁&#xff08;Mutex&#xff09; 原理 互斥锁&#xff08;sync.Mutex&#xff09;是一种最简单的锁机制&#xff0c;用于保护共…

2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新

2025美赛数学建模C题&#xff1a;奥运金牌榜&#xff0c;完整论文代码模型目前已经更新&#xff0c;获取见文末名片

【数据结构】深入解析:构建父子节点树形数据结构并返回前端

树形数据结构列表 一、前言二、测试数据生成三、树形代码3.1、获取根节点3.2、遍历根节点&#xff0c;递归获取所有子节点3.3、排序3.4、完整代码 一、前言 返回前端VO对象中&#xff0c;有列情况列表展示需要带树形结构&#xff0c;例如基于RBAC权限模型中的菜单返回&#xf…

Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册

文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 想象一下这样的场景&#xff1a;你有一大堆珍贵的回忆照片&#xff0c;但又不想使用各种网盘来管理。怎么办&#xff1f;别担心…

【开源免费】基于Vue和SpringBoot的医院资源管理系统(附论文)

本文项目编号 T 161 &#xff0c;文末自助获取源码 \color{red}{T161&#xff0c;文末自助获取源码} T161&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

被占用的电脑文件推沟里

在使用电脑的过程中&#xff0c;你是否遇到过这种情况&#xff1a;想删除、移动或重命名一个文件&#xff0c;结果系统无情地告诉你——“文件被占用&#xff0c;无法操作&#xff01;”这时候&#xff0c;IObit Unlocker 就该闪亮登场了&#xff01;这款免费的文件解锁工具&am…

Coze插件开发之基于已有服务创建并上架到扣子商店

Coze插件开发之基于已有服务创建并上架到扣子商店 在应用开发中&#xff0c;需要调用各种插件&#xff0c;以快速进行开发。但有时需要调用的插件在扣子商店里没有&#xff0c;那怎么办呢&#xff1f; 今天就来带大家快速基于已有服务创建一个新的插件 简单来讲&#xff0c;就是…