突击蓝桥杯嵌入式(十二)——第十二届省赛第一场真题 停车场

一、题干


二、题目解析

所需:
PA7 PWM LED(锁存器) 串口9600 LCD 按键4个,整体难在逻辑,我们先配置好硬件,进入工程

PA7要求:2KHZ,初始化占空比0 串口一,打开接收中断

首先我们大概想一下轮廓,首先一辆车进来,我们第一要判断他这个车在不在我们的停车场里,然后如果在的话,就给他结账,如果不在的话,我们需要判断现在停车场里是否有车位,如果有,则保存其信息,如果没有,则不管。

先把八股文写一下:

按键:

uint8_t Key_Scan()
{static uint8_t value;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET)    value = 1;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == GPIO_PIN_RESET)  value = 2;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2) == GPIO_PIN_RESET)  value = 3;else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)  value = 4;else     value = 0;return value;
}void Key_Proc()
{if(uwTick - uwTick_Key_Speed < 100) return;else     uwTick_Key_Speed = uwTick;key_value = Key_Scan();key_up = -key_value&(key_value ^ key_old);key_down = key_value&(key_value ^ key_old);key_old = key_value;switch(key_down){case 1:LCD_flag^=1;break;case 2:if(LCD_flag == 1){CNBR_Price += 0.5;VNBR_Price += 0.5;}break;case 3:if(LCD_flag == 1){CNBR_Price -= 0.5;VNBR_Price -= 0.5;if(VNBR_Price < 0){VNBR_Price = 0;}if(CNBR_Price < 0){CNBR_Price = 0;}}break;case 4:control_flag ^= 1;break;}

LCD

void LCD_DISPLAY_Data()
{sprintf((char *)str,"       Data       ");LCD_DisplayStringLine(Line1,str);sprintf((char *)str,"   CNBR:       ");LCD_DisplayStringLine(Line3,str);sprintf((char *)str,"   VNBR:       ");LCD_DisplayStringLine(Line5,str);sprintf((char *)str,"   IDLE:       ");LCD_DisplayStringLine(Line7,str);
}void LCD_DISPLAY_Para()
{sprintf((char *)str,"       Para       ");LCD_DisplayStringLine(Line1,str);sprintf((char *)str,"   CNBR:%.2f       ",CNBR_Price);LCD_DisplayStringLine(Line3,str);sprintf((char *)str,"   VNBR:%.2f       ",VNBR_Price);LCD_DisplayStringLine(Line5,str);sprintf((char *)str,"                ");LCD_DisplayStringLine(Line7,str);
}void LCD_Proc()
{if(uwTick - uwTick_LCD_Speed < 100) return;else     uwTick_LCD_Speed = uwTick;if(LCD_flag == 0)  LCD_DISPLAY_Data();else     LCD_DISPLAY_Para();if( control_flag == 0) TIM3->CCR2 = 0;else                                     TIM3->CCR2 = 100;if(process_flag == 1)    data_process(car_data[22]);else return;
}

LED

void LED_Disp(uint8_t ucled)
{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(GPIOC,ucled<<8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}void LED_Proc()
{int sum = 0;if(uwTick - uwTick_LED_Speed < 100)    return;else     uwTick_LED_Speed = uwTick;for(int i = 0;i<8;i++){sum += car_postion.idle[i]; }if(sum !=8) LED_Disp(0x01);else             LED_Disp(0x00);sprintf((char *)str,"   NUMBER:%d       ",sum);LCD_DisplayStringLine(Line6,str);
}

串口

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{sprintf((char *)tx_buff,"uart");HAL_UART_Transmit(&huart1,tx_buff,100,0XFF);
//  sscanf((char *)rx_buff,"%4s:%4s",type,id);
//  sprintf((char *)tx_buff,"ID: %4s",id);
//  HAL_UART_Transmit(&huart1,tx_buff,100,0XFF);for(i = 0;i<22;i++){  car_data[i] = rx_buff[i];}process_flag = 1;HAL_UART_Receive_IT(&huart1,rx_buff,22);
}

逻辑部分,先检查ID,在判断,是否有车位

uint8_t check_car_id()
{for( i = 0;i<8;i++){if((car_postion.car_id[4*i+0] == id[0])&&(car_postion.car_id[4*i+1] == id[1])&&(car_postion.car_id[4*i+2] == id[2])&&(car_postion.car_id[4*i+3] == id[3])){sprintf((char *)tx_buff,"i = %d",i);HAL_UART_Transmit(&huart1,tx_buff,100,0XFF);return i;}}return 30;
}

数据处理

void data_process(uint8_t data)
{uint8_t check = check_car_id();if(check !=30){sscanf((char *)data,"%4s:%4s:%2d%2d%2d%2d%2d",&car_postion.type[4*check],&car_postion.car_id[4*check],&car_postion.Start_Year[check],&car_postion.Start_Month[check],&car_postion.Start_Min[check],&car_postion.Start_Hour[check]);put_price();for(i = 0;i<4;i++){car_postion.car_id[4*check+i] = 28;car_postion.type[4*check+i] = 28;}car_postion.idle[check] = 0;
//          sprintf((char *)tx_buff,"haaa");
//          HAL_UART_Transmit(&huart1,tx_buff,100,0XFF);}else                               //reach the park{for(i = 0;i<8;i++){sum += car_postion.idle[i]; }if(sum !=8){//              sprintf((char *)tx_buff,"idle = %d",car_postion.idle[0]);
//              HAL_UART_Transmit(&huart1,tx_buff,100,0XFF);for(i= 0;i<8;i++){if(car_postion.idle[i] == 0){car_postion.idle[i] = 1;sprintf((char *)str,"  bomm  ");LCD_DisplayStringLine(Line9,str);
//                      sscanf((char *)data,"%4s:%4s",&car_postion.type[4*i],&car_postion.car_id[4*i]);for(j = 0;j<4;j++){car_postion.car_id[4*i+j] = rx_buff[5+j];}
//                      sscanf((char *)rx_buff,"%4s:%4s",&car_postion.type[4*i],&car_postion.car_id[4*i]);sprintf((char *)str,"      %4s  ",&car_postion.car_id[4*i]);LCD_DisplayStringLine(Line8,str);LED_Disp(0x55);break;}}}}process_flag = 0;
}

put_price俺就不写了,具体就是清算费用,然后把对应的idle置0,明天就是国赛了,俺感觉RTC、长短按、局部高亮、EEPROM存取多字节数据,这几个会考,今天看看客观题,睡个好觉,明天希望大家都拿国一。

突击蓝桥杯嵌入式(十二)——第十二届省赛第一场真题 停车场相关推荐

  1. 突击蓝桥杯嵌入式(七)——第十三届省赛第一场真题

    突击蓝桥杯嵌入式(七)--第十三届省赛第一场真题 一.题目概览 二.思路梳理 我们直接在LCD例程的基础上,改需增加的外设如下: LED灯(配置锁存器PD2),串口(波特率9600,带中断),按键4个 ...

  2. 第十一届蓝桥杯大赛软件类省赛第一场真题-Java语言B组

    目录 1.解密 2.纪念日 3.合并检测 4.分配口罩 5.斐波那契数列最大公约数 6.分类计数 7.八次求和 8.字符串编号 9.BST 插入节点问题 10.网络分析 1.解密 (由 30 个大小写 ...

  3. 突击蓝桥杯嵌入式(六)——第十届省赛真题

    突击蓝桥杯嵌入式(六)--第十届省赛真题 一.题干 二.题目分析 考点1.ADC(没啥好说的) 占用引脚PB15(R37) 考点2:按键4个(PB0,PB1,PB2,PA0) 考点3:LCD,高亮 考 ...

  4. 突击蓝桥杯嵌入式(一)——内容概览

    突击蓝桥杯嵌入式(一)--内容概览 ​ 蓝桥杯嵌入式省赛的时间为4月9日,离写这篇文章时只剩下20天左右的时间,期间我们需要掌握基本的外设使用.并且做一下近几年真题,还需要复习一下客观题,争取拿到大概 ...

  5. 突击蓝桥杯嵌入式(四)——滴答定时器、按键的三行代码消抖、LCD与ADC

    突击蓝桥杯嵌入式(四)--滴答定时器.按键的三行代码消抖.LCD与ADC 1.滴答定时器定时运行 我们利用滴答定时器,让LED每隔1s闪烁一次 //首先我们定义一个变量 __IO uint32_t u ...

  6. 第六届蓝桥杯大赛个人赛决赛(软件类) C++A组真题题解

    文章目录 题目链接 A组真题 题目结构 第一题 方格填数 第二题 四阶幻方 第三题 显示二叉树 第四题 穿越雷区 第五题 切开字符串 第六题 铺瓷砖(待补) 题目链接 A组真题 题目结构 题目 类型 ...

  7. 蓝桥杯嵌入式第十二届省赛第一场

    题目 题目和程序:阿里云盘链接 题目分析 1.LCD显示驱动 移植官方提供的LCD程序 2.PA7脉冲输出 只需要改变脉冲高电平时间即可. 3.uart 中断接受字符串,IDLE中断来判断字符串接受完 ...

  8. 2021年4月 第十二届蓝桥杯软件类省赛C++B组第一场 真题题解

    文章目录 题目结构 填空题 第一题 空间 第二题 卡片 第三题 直线 第四题 货物摆放 第五题 路径 程序题 第六题 时间显示 第七题 砝码称重 第八题 杨辉三角形 第九题 双向排序 第十题 括号序列 ...

  9. 【408篇】C语言笔记-第十二章(单链表的删除考研真题实战)

    文章目录 第一节:单链表删除操作 第二节:考研真题 1. 解题设计 2. 代码实现 3. 时间复杂度分析 第一节:单链表删除操作 删除操作流程图: 通过流程图,我们写出代码: #include < ...

最新文章

  1. Linux下批量重命名文件名为数字索引编号(0~N.xxx)的方法
  2. ubuntu 16.04 分辨率只有800×600问题解决
  3. GitHub 上值得关注的 iOS 开源项目
  4. 光子浏览器_烟台招聘信息烟台光子信息科技有限公司招聘(五险一金,餐补)...
  5. Laravel中的env函数获取不到确定存在的配置
  6. 我们为什么这样选择损失函数
  7. 技术圈几个牛逼的公号推荐给大家
  8. eclipse设置Tomcat超级详细
  9. win7中竟然没有telnet.exe??
  10. 酒店管理系统-概要设计说明书
  11. 基于springBoot的社区信息管理系统
  12. 《Java从入门到放弃》JavaSE入门篇:异常
  13. 鲁棒局部均值分解 (RLMD)附Matlab代码
  14. matlab生成高速轨道不平顺谱,国内外高速铁路轨道不平顺谱对比与思考.pdf
  15. Brpc 服务端收包源码分析(一)
  16. 《 笨方法学 Python 》_ 目录
  17. 【perl】正则匹配中的括号套括号的套娃抓取规则
  18. halcon 图像差分_Halcon学习(10)边缘检测(一)
  19. plc字符串怎么计算字节数_plc位、字节、字、双字的关系
  20. 全国计算机技术与软件专业技术资格(水平)考试 网络工程师,网络工程师2013至2018年试题分析与解答(全国计算机技术与软件专业技术资格(水平)考试指定用书)...

热门文章

  1. Word控件Spire.Doc 【页眉页脚】教程(4): 从C#中的word文档中删除标题
  2. 嵌入式linux ecm,安勤推出最新高性价比3.5吋嵌入式单板计算机- ECM-BYT2及嵌入式模块计算机- ESM-BYT2-嵌入式系统-与非网...
  3. 只用300小时,17岁高中生解开困扰数学家27年难题,因张益唐「入坑」数论
  4. CSS 绘制世界杯足球场
  5. 什么是PV、UV、PR
  6. 多线程断点续传后台下载
  7. C++中双冒号的作用
  8. SLAN: Similarity-aware aggregation network for embeddingout-of-knowledge-graph entities
  9. php随机名言,为wordpress创建随机调用名言名句的小插件
  10. Web前端开发(三)--css优先级进阶,文本属性,元素类型转换,display,overflow,浮动,定位