蓝桥杯嵌入式2021年第十二届第一场省赛主观题解析

1  题目

2  代码 

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "i2c_hal.h"
#include "lcd.h"
#include "stdio.h"
#include "string.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
char buf1[20]={"       Data"},buf2[20]={"       Para"},buf3[20],buf4[20],buf5[20],buf6[20],buf7[20],buf8[18];
struct keys{int step;int state;
}key[5];
int back=1;
double Cprice=3.5,Vprice=2,Cnum,Vnum,idle=8;
int cnt4,cnt1;
int OCcnt,output=1;
char vnbr[9][22];
char cnbr[9][22];
char temp[22],temp1[5],temp2[5];
int tyear,tmonth,tday,thour,tmin,tsecond;
int outyear,outmonth,outday,outhour,outmin,outsecond;
int cnt,time;
double price;
int k,r;
int monthtable[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum;
int check;
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void LED_Close()
{HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
int error()
{if((temp[0]=='V'||temp[0]=='C')&&temp[1]=='N'&&temp[2]=='B'&&temp[3]=='R'&&temp[4]==':'&&temp[9]==':'&&tmonth<=12&&tmonth>0&&tday>0&&tday<=31&&thour<=24&&tmin<=60&&tsecond<=60){return 0;}else{return 1;}
}
int cal(int year,int month,int day,int hour,int min,int second)
{sum=0;for(int j=0;j<year;j++){if(year%4==0) monthtable[2]=29;else monthtable[2]=28;for(int i=1;i<=12&&j!=year;i++){sum+=monthtable[i]*24*60*60;}for(int i=1;i<month&&j==year;i++){sum+=monthtable[i]*24*60*60;}}sum+=day*24*60*60;sum+=hour*60*60;sum+=min*60;sum+=second;return sum;
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM1){key[1].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[2].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[3].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[4].state=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);switch(key[1].step){case 0:{if(key[1].state==GPIO_PIN_RESET){key[1].step=1;}}break;case 1:{if(key[1].state==GPIO_PIN_RESET){key[1].step=2;cnt1++;if(cnt1%2==1) back=2;if(cnt1%2==0) back=1;if(back==1){LCD_Clear(Black);LCD_DisplayStringLine(Line1,(uint8_t*)buf1);LCD_DisplayStringLine(Line3,(uint8_t*)buf3);LCD_DisplayStringLine(Line5,(uint8_t*)buf4);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);}else{LCD_Clear(Black);LCD_DisplayStringLine(Line1,(uint8_t*)buf2);LCD_DisplayStringLine(Line3,(uint8_t*)buf6);LCD_DisplayStringLine(Line5,(uint8_t*)buf7);}}else{key[1].step=0;}}break;case 2:{if(key[1].state==GPIO_PIN_SET){key[1].step=0;}}break;}switch(key[2].step){case 0:{if(key[2].state==GPIO_PIN_RESET&&back==2){key[2].step=1;}}break;case 1:{if(key[2].state==GPIO_PIN_RESET){key[2].step=2;Cprice+=0.5;Vprice+=0.5;sprintf(buf6,"   CNBR:%.2lf",Cprice);sprintf(buf7,"   VNBR:%.2lf",Vprice);if(back==2){LCD_ClearLine(Line3);LCD_ClearLine(Line5);LCD_DisplayStringLine(Line3,(uint8_t*)buf6);LCD_DisplayStringLine(Line5,(uint8_t*)buf7);}}else{key[2].step=0;}}break;case 2:{if(key[2].state==GPIO_PIN_SET){key[2].step=0;}}break;}switch(key[3].step){case 0:{if(key[3].state==GPIO_PIN_RESET&&back==2){key[3].step=1;}}break;case 1:{if(key[3].state==GPIO_PIN_RESET){key[3].step=2;Cprice-=0.5;Vprice-=0.5;if(Cprice<0) Cprice=0;if(Vprice<0) Vprice=0;sprintf(buf6,"   CNBR:%.2lf",Cprice);sprintf(buf7,"   VNBR:%.2lf",Vprice);if(back==2){LCD_ClearLine(Line3);LCD_ClearLine(Line5);LCD_DisplayStringLine(Line3,(uint8_t*)buf6);LCD_DisplayStringLine(Line5,(uint8_t*)buf7);}}else{key[3].step=0;}}break;case 2:{if(key[3].state==GPIO_PIN_SET){key[3].step=0;}}break;}switch(key[4].step){case 0:{if(key[4].state==GPIO_PIN_RESET){key[4].step=1;}}break;case 1:{if(key[4].state==GPIO_PIN_RESET){key[4].step=2;cnt4++;if(cnt4%2==0){output=1;}else{output=2;}}else{key[4].step=0;}}break;case 2:{if(key[4].state==GPIO_PIN_SET){key[4].step=0;}}break;}}
}
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM3&&htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2){OCcnt=__HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_2);if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==GPIO_PIN_SET){__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,OCcnt+500*0.2);}else{__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,OCcnt+500*0.8);}}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance==USART1){cnt++;k=0;r=0;sscanf(temp,"%4s:%4s:%2d%2d%2d%2d%2d%2d",temp1,temp2,&tyear,&tmonth,&tday,&thour,&tmin,&tsecond);int t=100000; while(t--);if(!error()){if(temp1[0]=='V'){for(int i=1;i<=8;i++){if(vnbr[i][5]==temp2[0]&&vnbr[i][6]==temp2[1]&&vnbr[i][7]==temp2[2]&&vnbr[i][8]==temp2[3]){sscanf(vnbr[i],"%4s:%4s:%2d%2d%2d%2d%2d%2d",temp1,temp2,&outyear,&outmonth,&outday,&outhour,&outmin,&outsecond);time=cal(tyear,tmonth,tday,thour,tmin,tsecond)-cal(outyear,outmonth,outday,outhour,outmin,outsecond);if(time<=0){HAL_UART_Transmit_IT(&huart1,(uint8_t*)"Error",5);k=1;break;}if(time%3600!=0){price=(time/3600+1)*Vprice;sprintf(buf8,"CNBR:%s:%02d:%.2lf\n",temp2,time/3600+1,price);}if(time%3600==0){price=(time/3600)*Vprice;sprintf(buf8,"CNBR:%s:%02d:%.2lf\n",temp2,time/3600,price);}HAL_UART_Transmit_IT(&huart1,(uint8_t*)buf8,30);k=1;memset(vnbr[i],0,sizeof(vnbr[i]));idle++;Vnum--;sprintf(buf4,"   VNBR:%d",(int)Vnum);sprintf(buf5,"   IDLE:%d",(int)idle);if(back==1){LCD_ClearLine(Line7);LCD_ClearLine(Line5);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);LCD_DisplayStringLine(Line5,(uint8_t*)buf4);}break;}	}if(k==0&&idle>0){for(int i=1;i<=8;i++){if(vnbr[i][0]!='V'){strcpy(vnbr[i],temp);idle--;Vnum++;sprintf(buf5,"   IDLE:%d",(int)idle);sprintf(buf4,"   VNBR:%d",(int)Vnum);if(back==1){LCD_ClearLine(Line7);LCD_ClearLine(Line5);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);LCD_DisplayStringLine(Line5,(uint8_t*)buf4);}break;}}}}if(temp1[0]=='C'){for(int i=1;i<=8;i++){if(cnbr[i][5]==temp2[0]&&cnbr[i][6]==temp2[1]&&cnbr[i][7]==temp2[2]&&cnbr[i][8]==temp2[3]){sscanf(cnbr[i],"%4s:%4s:%2d%2d%2d%2d%2d%2d",temp1,temp2,&outyear,&outmonth,&outday,&outhour,&outmin,&outsecond);time=cal(tyear,tmonth,tday,thour,tmin,tsecond)-cal(outyear,outmonth,outday,outhour,outmin,outsecond);if(time<=0){HAL_UART_Transmit_IT(&huart1,(uint8_t*)"Error",5);k=1;break;}if(time%3600!=0){price=(time/3600+1)*Cprice;sprintf(buf8,"CNBR:%s:%02d:%.2lf\n",temp2,time/3600+1,price);}if(time%3600==0){price=(time/3600)*Cprice;sprintf(buf8,"CNBR:%s:%02d:%.2lf\n",temp2,time/3600,price);}HAL_UART_Transmit_IT(&huart1,(uint8_t*)buf8,30);r=1;memset(cnbr[i],0,sizeof(cnbr[i]));idle++;Cnum--;sprintf(buf3,"   CNBR:%d",(int)Cnum);sprintf(buf5,"   IDLE:%d",(int)idle);if(back==1){LCD_ClearLine(Line7);LCD_ClearLine(Line3);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);LCD_DisplayStringLine(Line3,(uint8_t*)buf3);}break;}	}if(r==0&&idle>0){for(int i=1;i<=8;i++){if(cnbr[i][0]!='C'){strcpy(cnbr[i],temp);idle--;Cnum++;sprintf(buf5,"   IDLE:%d",(int)idle);sprintf(buf3,"   CNBR:%d",(int)Cnum);if(back==1){LCD_ClearLine(Line7);LCD_ClearLine(Line3);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);LCD_DisplayStringLine(Line3,(uint8_t*)buf3);}break;}}}}}else{HAL_UART_Transmit_IT(&huart1,(uint8_t*)"Error",5);}for(int i=0;i<22;i++){temp[i]=0;}}
}
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_TIM1_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */LCD_Init();LCD_Clear(Black);I2CInit();LCD_SetBackColor(Black);LCD_SetTextColor(White);LED_Close();HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_2);HAL_TIM_Base_Start_IT(&htim1);sprintf(buf3,"   CNBR:0");sprintf(buf4,"   VNBR:0");sprintf(buf5,"   IDLE:8");sprintf(buf6,"   CNBR:3.50");sprintf(buf7,"   VNBR:2.00");LCD_DisplayStringLine(Line1,(uint8_t*)buf1);LCD_DisplayStringLine(Line3,(uint8_t*)buf3);LCD_DisplayStringLine(Line5,(uint8_t*)buf4);LCD_DisplayStringLine(Line7,(uint8_t*)buf5);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_UART_Receive_IT(&huart1,(uint8_t*)temp,22);if(output==1){HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_2);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}else {HAL_TIM_OC_Stop_IT(&htim3,TIM_CHANNEL_2);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}if(idle>0){HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}else{HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}}/* USER CODE END 3 */

 3  一点疑问

关于审查字符串是否合法的问题,我注意了一下几点:

1.同一车辆进出的时间,一定是进的时间小于出的时间

2.字符串前四位是VNBR/CNBR,第五位和第九位是:

还有什么需要注意的嘛

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

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

相关文章

武汉星起航助力跨境电商,专业选品与全方位服务引领行业新风尚

在全球跨境电商浪潮的推动下&#xff0c;越来越多的卖家纷纷将目光投向了这片广阔的市场。然而&#xff0c;如何在这片蓝海中脱颖而出&#xff0c;成为众多卖家关注的焦点。武汉星起航电子商务有限公司以其专业的选品建议和全方位的服务&#xff0c;为卖家们提供了一条成功的捷…

新零售行业门店管理方案详解,人人都可以是好店长

在之前的文章中&#xff0c;我们分别介绍了新零售业的全面解决方案&#xff0c;包括门店管理解决方案、商品经营方案、会员管理解决方案&#xff0c;以及这些方案所包含的分析指标&#xff0c;吸引了不少对新零售转型感兴趣的企业主。 后续我们会将这些内容拆解开来&#xff0…

LeetCode-热题100:104. 二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; 3 示例 2&#xff1a; 输入&#xff1a; root …

【数字IC/FPGA】什么是无符号数?什么是有符号数?

进制 虽然在日常生活中&#xff0c;我们已经习惯了使用10进制数字&#xff0c;但在由数字电路构成的数字世界中&#xff0c;2进制才是效率更高的选择。 10进制与2进制 10进制&#xff08;decimal&#xff09;计数法&#xff08;一般也叫阿拉伯计数法&#xff09;是在日常生活…

LLM生成模型在生物单细胞single cell的应用:scGPT

参考&#xff1a; https://github.com/bowang-lab/scGPT https://www.youtube.com/watch?vXhwYlgEeQAs 主要是把单细胞测序出来的基因表达量的拼接起来构建成的序列&#xff0c;这里不是用的基因的ATCG&#xff0c;是直接用的基因名称 训练数据&#xff1a;scGPT全人模型是在3…

第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

文章目录 1.Reblanceing数据重分布的概念2.验证Reblanceing触发的过程3.Reblanceing细节4.临时关闭Reblanceing机制 1.Reblanceing数据重分布的概念 当集群中OSD进行扩缩容操作后&#xff0c;会触发一个Reblanceing数据重分布的机制&#xff0c;简单的理解就是将扩缩容前后OSD…

【Hello算法】 > 第 1 关 > 初识 算法 与 复杂度分析

初识 算法 与 复杂度分析 What are algorithms and data structures ?-什么是算法与数据结构&#xff1f;How to conduct complexity analysis ?-如何进行复杂性分析&#xff1f;时间复杂度空间复杂度 小结Tips&#xff1a; ————————————————————————…

Day101:漏洞发现-漏扫项目篇NucleiYakitGobyAfrogXrayAwvs联动中转被动

目录 特征类-三方Poc调用&模版Poc调用 案例1&#xff1a;单点对某特征点进行安全评估 Goby-综合类 Nuclei-较综合类 Afrog-特征类 Yakit-可特征可综合 案例2&#xff1a;新型对某特征点进行安全评估 综合类-主动漏扫&中转联动&被动联动 案例1&#xff1a;…

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…

03-进程-网络命令-软件安装-SSH免密登录

软件安装-网络命令-SSH免密登录 一 软件安装 1 在线安装 命令&#xff1a; yum 作用&#xff1a;yum会从指定的服务器自动下载rpm包并且进行安装&#xff0c;优点是可以自动处理依赖关系&#xff0c;并且一次安装所有的软件包。 配置yum的镜像源 yum源有个统一的下载服务…

剖析 SPI 在 Spring 中的应用

一、概述 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是Java内置的一种服务提供发现机制&#xff0c;可以用来提高框架的扩展性&#xff0c;主要用于框架的开发中&#xff0c;比如Dubbo&#xff0c;不同框架中实现略有差异&#xff0c;但核心机制相同…

精确号码比例放通算法的设计与实现

精确号码比例放通算法的设计与实现 引言背景问题定义算法设计1. 数据结构2. 算法流程3. 伪代码4. C语言实现 结论参考文献 引言 随着通信技术的飞速发展&#xff0c;呼叫中心和电信运营商面临着日益增长的呼叫管理需求。在某些情况下&#xff0c;为了确保服务质量或者遵守特定…

方案分享 | 嵌入式指纹方案

随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…

[dvwa] sql injection

sql injection 0x01 low sql语句没有过滤 经典注入&#xff0c;通过逻辑or为真相当于select * from users where true&#xff0c;99换成1也成 用union select 对齐列数&#xff0c;查看数据库信息 1’ union select 1,2# order by探测对齐列数更方便 1’ or 11 order b…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的…

Spring AI 应用 - 智能记者

参考实现&#xff1a; https://github.com/mshumer/ai-journalist 上面是通过 Claude 配合 SERP 搜索 API&#xff0c;使用 Python 语言实现的&#xff0c;本文通过 GitHub Copilot 辅助改为了基于 Spring AI 的 Java 版本&#xff0c;本文使用的 OpenAI。 AIJournalist 实现…

Tomcat源码解析——源码环境搭建

一、源码下载 在进行源码阅读前&#xff0c;先下载源码包&#xff0c;这样便于做笔记和debug。 我所用的版本是Tomcat7.0.68&#xff0c; Tomcat7.0.68下载地址&#xff1a;Index of /dist/tomcat/tomcat-7/v7.0.68/src 所有Tomcat的源码包下载地址&#xff1a;Index of /dist/…

第6章:6.4.2 案例二:爬取成语网站数据 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例用到的网址为&#xff1a;成语大全列表成语大全列表https…

NSA发布《在数据支柱中推进零信任成熟度》报告

4月9日&#xff0c;美国国家安全局&#xff08;NSA&#xff09;发布了题为《在数据支柱中推进零信任成熟度》的报告&#xff0c;旨在于数据安全层面提供指导&#xff0c;以增强数据整体安全性并保护静态和传输中的数据。(如下图&#xff09; 一、主要内容 报告中的建议侧重于将…

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…