【蓝桥杯嵌入式】12届程序题刷题记录及反思

一、题目解析

  • 按键短按
  • LCD显示两个界面
  • LED指示灯
  • PWM脉冲输出

二、led控制

控制两个led灯,两种状态

//led
void led_set(uint8_t led_dis)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,led_dis << 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_proc(void)
{if((pwm_change_flag == 1)&&(IDLE_num >0)){led_set(0x03);}else if((pwm_change_flag == 1)&&(IDLE_num == 0)){led_set(0x02);}else if((pwm_change_flag != 1)&&(IDLE_num > 0)){led_set(0x01);}else{led_set(0x00);}
}

三、LCD显示

void display_init(void)
{LCD_Init();LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);
}
void display_menu(void)
{char text[25];if(menu == Data_menu){sprintf(text,"       Data                ");LCD_DisplayStringLine(Line1,(u8*)text);sprintf(text,"   CNBR:%d                ",CNBR_num);LCD_DisplayStringLine(Line3,(u8*)text);sprintf(text,"   VNBR:%d                ",VNBR_num);LCD_DisplayStringLine(Line5,(u8*)text);IDLE_num = Car_stall - CNBR_num - VNBR_num;sprintf(text,"   IDLE:%d                ",IDLE_num);LCD_DisplayStringLine(Line7,(u8*)text); }else {sprintf(text,"       Para                ");LCD_DisplayStringLine(Line1,(u8*)text);sprintf(text,"   CNBR:%.2f                ",CNBR_fee);LCD_DisplayStringLine(Line3,(u8*)text);sprintf(text,"   VNBR:%.2f                ",VNBR_fee);LCD_DisplayStringLine(Line5,(u8*)text);LCD_ClearLine(Line7); }
}

四、串口

这个题目的最头痛的就是串口了,在此写下我的思路

struct cars{char  type[5];       //车辆类型char   num[5];       //车辆编号uint8_t  year;       //进入年uint8_t month;       //进入月uint8_t  date;       //进入日uint8_t  hour;       //进入时uint8_t   min;       //进入分uint8_t   sec;       //进入秒uint8_t state;       //0为IDLE,1为有车位
};

定义一个结构体数组,存放每个车位的信息

#define IN  0
#define OUT 1

宏定义两个变量   车辆进入和出去

if((receive_data[4]==':')&&(receive_data[9]==':'))

判断字符接收格式  如果上面条件不满足就输出error

sscanf(time_tem,"%2c%2c%2c%2c%2c%2c",year,month,date,hour,min,sec);

字符分割函数 sscanf       存放在Stdio.h头文件中

                        car[car_stall_num].year   =   (year[0]-'0')*10+(year[1]-'0');car[car_stall_num].month  =   (month[0]-'0')*10+(month[1]-'0'); car[car_stall_num].date   =   (date[0]-'0')*10+(date[1]-'0'); car[car_stall_num].hour   =   (hour[0]-'0')*10+(hour[1]-'0'); car[car_stall_num].min    =   (min[0]-'0')*10+(min[1]-'0'); car[car_stall_num].sec    =   (sec[0]-'0')*10+(sec[1]-'0');

将字符型转换为整型

dir

车的出入变量设置

            for(uint8_t i=0;i<8;i++){if(strcmp(id_tem,car[i].num)==0){//出车库dir = OUT;printf("出车库\n");//      car_stall_num = i;//计算时间break;}if(car[i].state == 0){car_stall_num = i;break;}}

存放位置选择

                        CNBR_num --;              //对应车辆类型+1car[car_stall_num].state = 0;       //车位无车,退出停车场sscanf(time_tem,"%2c%2c%2c%2c%2c%2c",year,month,date,hour,min,sec);strcpy(car[car_stall_num].type,"");strcpy(car[car_stall_num].num,"");uint8_t year_temp   =   (year[0]-'0')*10+(year[1]-'0');uint8_t month_temp  =   (month[0]-'0')*10+(month[1]-'0'); uint8_t date_temp   =   (date[0]-'0')*10+(date[1]-'0'); uint8_t hour_temp   =   (hour[0]-'0')*10+(hour[1]-'0'); uint8_t min_temp    =   (min[0]-'0')*10+(min[1]-'0'); uint8_t sec_temp    =   (sec[0]-'0')*10+(sec[1]-'0'); printf("日期信息%2d-%2d-%2d-%2d-%2d-%2d\n",car[car_stall_num].year,car[car_stall_num].month,car[car_stall_num].date    \,car[car_stall_num].hour,car[car_stall_num].min,car[car_stall_num].sec);printf("车辆类型和编号 %s,%s\n",car[car_stall_num].type,car[car_stall_num].num);

车出去

字符串比较

strcmp("VNBR",type_tem)==0

字符串复制

strcpy(car[car_stall_num].type,"VNBR");

串口重定向

int fputc(int ch, FILE *f) 
{HAL_UART_Transmit(&huart1,(unsigned char*)&ch,1,50);return ch;
}
车费计算还没有写喔

五、PWM

//pwm
void pwm_on(void)
{__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,100-1);
}
void pwm_off(void)
{__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,0);
}

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

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

相关文章

高度不同的流体瀑布css实现方法

商城商品列表 实现瀑布流展示&#xff0c;通过flex或grid实现会导致每行中的列高度一致&#xff0c;无法达到错落有致的感觉&#xff1b; 为此需要用到&#xff1a; CSS columns 属性 columns 属性是一个简写属性&#xff0c;用于设置列宽和列数。 CSS 语法 columns: column-wi…

一些增强生产力的 AI 工具

engshell 支持自然语言交互的 shell engshell 是一个适用于任何操作系统的英语 shell&#xff0c;由 LLM 提供自然语言交互支持 Paints Chainer 漫画线稿上色 AI Paints Chainer 是一款用于为漫画上色的工具&#xff0c;只需上传一张黑白线稿&#xff0c;点击按钮&#xff0…

JQuery(二)---【使用JQuery对HTML、CSS进行操作】

零.前言 JQuery(一)---【JQuery简介、安装、初步使用、各种事件】-CSDN博客 一.使用JQuery对HTML操作 1.1获取元素内容、属性 使用JQ可以操作元素的“内容” text()&#xff1a;设置或返回元素的文本内容html()&#xff1a;设置或返回元素的内容(包括HTML标记)val()&#…

Leetcode 102. 二叉树的层序遍历

注意的点&#xff1a; 1、队列注意用popleft 2、注意用len(queue)控制层数 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right righ…

Redis 的主从复制、哨兵和cluster集群

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

vscode-插件开发-hello world-创建初始模板

目录 前言1.环境配置全局安装 yo, generator-code 2. 新建一个插件项目模板问题1: F5 按键无法启动launch.json调试(解决)问题1 描述:问题1: 找错误问题1: 可行的解决方案 3. 开发插件(添加自定义功能) 参考vscode官方示例&#xff1a;如何创建你的第一个插件开发项目模板的步骤…

Leetcode刷题-哈希表详细总结(Java)

哈希表 当我们想使⽤哈希法来解决问题的时候&#xff0c;我们⼀般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map&#xff08;映射&#xff09; 当我们遇到了要快速判断⼀个元素是否出现集合⾥的时候&#xff0c;就要考虑哈希法。如果在做⾯试题⽬的时候…

SpringCloud学习(11)-SpringCloudAlibaba-Nacos数据模型

一、Nacos数据模型 1.1、数据模型 对于Nacos配置管理&#xff0c;通过Namespace、Group、Date ID能够定位到一个配置集。Nacos数据模型如下所示&#xff1a; 1.2、命名空间(Namespace) 可用于进行不同环境的配置隔离。例如&#xff1a; 1)、可以隔离开发环境——测试环境和…

【Linux】进程学习① (进程的PCB(task_struct)进程的标识符详解进程的创建fork函数)

目录 ​编辑 1.进程的概念 1.1进程的描述与组织&#xff1a;进程的PCB 进程&#xff1a;进程是 内核pcb对象可执行程序/内核数据结构可执行程序进程 1.3 task_struct 2.PCB内部属性 3 查看进程 4.获取进程标识符&#xff1a;getpid函数&#xff08;4-6主要围绕进程的标识符展开…

全系统各类型工程水土保持方案编制

孙老师&#xff08;高级工程师&#xff09;&#xff1a;长期承担重点水土保持方案编写方面工作&#xff0c;开设多场线下、线上培训会议&#xff0c;拥有丰富的工程和教学经验&#xff0c;为众多单位培养了近千名水土保持骨干人员&#xff0c;建有多个技术交流群&#xff0c;长…

HCIP-Datacom(H12-821)题库补充(4月7日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 在PIM-DM中&#xff0c;路由器会为被裁剪的下游接口启动一个剪枝定时器&#xff0c;定时器超时后接口就会恢复转发。默认情况下该定时器是多少秒&#xff1f; A&#x…

帧动画实践

帧动画 基本介绍动画帧率&#xff08;FPS&#xff09;帧动画开发帧动画的实现方案gif图实现动画css实现动画js实现逐帧动画&#xff08;1&#xff09;raf介绍&#xff08;2&#xff09;为什么建议raf&#xff08;定时器和Raf区别&#xff09;? 实现帧动画常用的解决方案 demo实…