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

news2025/2/24 12:38:23

一、题目解析

  • 按键短按
  • 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 --;              //对应车辆类型+1
                        car[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.coloradmin.cn/o/1576204.html

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

相关文章

Java常用API_正则表达式_分组——捕获分组与非捕获分组介绍与练习

在正则表达式中&#xff0c;从左到右第一个左括号确定为第一组&#xff0c;继续往右看再有左括号它表示的组数就加一。我们可以在正则表达式中使用 \\组数 的方法表示第几组&#xff0c;如\\1表示第一组的内容。 1.捕获分组 捕获分组就是把这一组的数据捕获出来&#xff0c;后…

何为网络协议?一图知晓网络过程。

网络协议就是计算机之间沟通的语言 为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c; 就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c; 要么大家都说中文&#xff0c;要么大家都说英语&#xff0c;这才能有效地沟通。 网络协…

git bash上传文件至github仓库

Linux运维工具-ywtool 目录 一.访问github二.新建仓库1.点击自己头像2.选择"your repositories"3.点击"New"4.创建新仓库 三.通过git bash软件上传文件1.提示2.打开git bash软件3.切换到本地仓库目录4.配置github的用户名和邮箱信息5.生成SSH Key6.github添…

【使用flex两端对齐加margin-right】

解决办法众多&#xff1a;https://cloud.tencent.com/developer/article/1516801 <div class"job_tabs_content"><div class"job_tab_item"></div><div class"job_tab_item"></div><div class"job_tab_i…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list&#xff0c;文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码&#xff0c;链表是由一块一块不连续的空间组成的&#xff0c;所以这里写了三个模板&#xff0c;一个是节点&#xff0c;一…

Linux IO的奥秘:深入探索数据流动的魔法

Linux I/O&#xff08;输入/输出&#xff09;系统是其核心功能之一&#xff0c;负责处理数据在系统内部及与外界之间的流动。为了优化这一流程&#xff0c;Linux进行了一系列努力和抽象化&#xff0c;以提高效率、灵活性和易用性。&#x1f680; 1. 统一的设备模型 Linux将所…

SpringCloud Alibaba Sentinel 实现熔断功能

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十六篇&#xff0c;即使用 Sentinel 实现熔断功能。 二、 Ribbon 系列 首先我们新建两个服务的提供者…

2024单品正价起号,直播素材投流选品,【选品课】+【投流课】+【素材课】+【卡首屏】

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89064168 更多资源下载&#xff1a;关注我。 课程内容: 01 01 1.如何养账号过风控,mp4 01 1.如何搭建一条计划(1)..mp4 02 1.如何搭建一条计划(2)..mp4 02 02 2.单品起号方案如何选择,mp4 03 2.-比…

Linux -- 字符设备驱动--LED的驱动开发(初级框架)

驱动框架一阶段 我们怎样去点亮一个 LED 呢&#xff1f;分为三步&#xff1a; 看原理图确定引脚&#xff0c;确定引脚输出什么电平才能点亮/熄灭 LED 看主芯片手册&#xff0c;确定寄存器操作方法&#xff1a;哪些寄存器&#xff1f;哪些位&#xff1f;地址是&#xff1f; 编…

每天五分钟掌握深度学习框架pytorch:本专栏说明

专栏大纲 专栏计划更新章节在100章左右&#xff0c;之后还会不断更新&#xff0c;都会配备代码实现。以下是专栏大纲 部分代码实现 代码获取 为了方便用户浏览代码&#xff0c;本专栏将代码同步更新到github中&#xff0c;所有用户可以读完专栏内容和代码解析之后&#xff0c…

go语言实现无头单向链表

什么是无头单向链表 无头单向链表是一种线性数据结构&#xff0c;它的每个元素都是一个节点&#xff0c;每个节点都有一个指向下一个节点的指针。"无头"意味着这个链表没有一个特殊的头节点&#xff0c;链表的第一个节点就是链表的头。 优点&#xff1a; 动态大小&…

三种算法实例(二分查找算法、插入排序算法、贪心算法)

当我们听到“算法”这个词时&#xff0c;很自然地会想到数学。然而实际上&#xff0c;许多算法并不涉及复杂数学&#xff0c;而是更多地依赖基本逻辑&#xff0c;这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前&#xff0c;有一个有趣的事实值得分享&#xff1a;你…

X64 基础(1)

X64 汇编 生成依赖项->生成自定义 勾选汇编选项 新建ASM文件 .codeaddl proc add rcx,rdx mov rax,rcx retaddl endpend项目类型选择汇编 在头文件中导出 EXTERN_C ULONG64 addl(ULONG64 x, ULONG64 y);然后就可以正常调用了&#xff0c;不能直接内联 X64内存 X64跟…

简析数据安全保护策略中的十个核心要素

数据显示&#xff0c;全球企业组织每年在数据安全防护上投入的资金已经超过千亿美元&#xff0c;但数据安全威胁态势依然严峻&#xff0c;其原因在于企业将更多资源投入到数据安全能力建设时&#xff0c;却忽视了这些工作本身的科学性与合理性。因此&#xff0c;企业在实施数据…

编程杂谈-代码review

目录 1. 关于智商 2. 关于能力 3. 关于changelist 3.1 关于CL内容编写 3.2 关于CL的大小 3.3 处理审稿人的意见 4. 关于代码审查 一个人的编程能力怎么去衡量&#xff1f;特别是在面试中&#xff0c;怎么避免“高分低能儿”、“专业做题家”、“面试造火箭”&#xff0c…

世界客观事物间的关系与面向对象编程中的类关系(day22)

世界客观事物间的关系 1.继承关系 继承是从原有类派生出新的类&#xff0c;原有类称为父类或者基类&#xff0c;派生出新的类称为子类或者派生类。 2.实现关系 接口制定了对象共同遵守的行为规范。一个类可以实现多个接口。 interface IA&#xff1b;interface IB&#xff1b;…

Sundar Pichai 谈巨型公司创新挑战及他今年感到兴奋的事物

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

[数据结构]不带头单向非循环链表

我们有学过&#xff0c;顺序表如何制作&#xff0c;还有一个与其非常相似的结构就是链表的制作&#xff0c;不过链表在数据中的存储不像顺序表一样是按照内存的顺序进行存储的&#xff0c;其在内存中是一块一块的进行存储,具体如何我们可以看看下面这张图 此链表有一个头指针p…

设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 策略模式与模板方法模式对比解析 文章目录 &#x1f31f;引言&#x1f31f;Part 1:…

css伪类:last-child或:first-child不生效

目录 一、问题 二、原因及解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.想使用伪类:last-child给 for循环出来的最后一个元素单独添加样式。但是发现无论怎么写都没有添加上去。 2.真是奇怪呀&#xff0c;明明写的没有问题呀&a…