当前位置: 首页 > article >正文

蓝桥杯第13届真题2

由硬件框图可以知道我们要配置LED 和按键

一.LED

先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题

二.按键

按键配置,由原理图按键所对引脚要GPIO_Input

生成代码,在文件夹中添加code文件夹,code中添加fun.c、fun.h、headfile.h文件,去资源包中把lcd.c、lcd.h、fonts.h添加到code中,然后去写按键控制灯亮灭的程序,看是否有问题

按键控制led没有问题后写lcd显示代码,显示没问题后,解决lcd与led引脚冲突问题,方法在我的其他文章中CSDN

  HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_RESET ); //为解决引脚冲突初始化lcd时    LCD_Init ();                                                                                                  要将锁存器锁存器来;
  LCD_Clear (Black);
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);

三.LCD显示函数

void lcd_show(void)
{
    sprintf(text,"      hello world");
    LCD_DisplayStringLine (Line0 ,(uint8_t *)text);
}

四.界面显示

购买界面

按照要求把其显示的东西先显示出来

价格界面

界面转换

写好三个界面的显示函数后需要写一个界面转换的函数,按要求B1按键负责界面转换,用一个标志位来解决界面转换。

五.按键功能实现

B2按键

B1按键的功能我们在界面转换哪里已经完成,现在完成B2按键

在C语言中,1.0f表示一个单精度浮点数(float类型)的字面值。

具体来说:‌ ‌1.0f的含义‌

1.0f中的f后缀明确表示这是一个单精度浮点数(float类型)。如果不加f,默认情况下1.0会被视为双精度浮点数(double类型)。
‌与1.0的区别‌

1.0是双精度浮点数(double类型),占用64位内存,精度更高。
1.0f是单精度浮点数(float类型),占用32位内存,精度较低,但计算速度可能更快。

库存界面

B3按键

B4按键

六.EEPROM存储功能(不熟)

去资源包中把IIC_hal.c与.h添加到code文件中,添加头文件,main中初始化

写好之后测试一下是否正确

七.串口输出接收功能(不熟)

需要把PA9设置为TX   PA10为RX,开启中断后生成代码

添加头文件,在usart.h中找到

输出

HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout),串口发送函数

定义一个数组存放要发送的数据char send[20];

接收

细节不会请看CSDN

 在头文件中找到串口接收回调函数HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)写接收函数;

在函数中先if判断串口,定义的uint8_t rec_data;在headfile.h中加一个外部声明extern,便于数据跨文件使用

找到串口接收函数HAL_UART_Receive_IT();

第一个参数为串口句柄

第二个参数为接收的数据

第三个参数接收数据的字节数

写好的接收函数要在main中声明,相当于使能,代码执行到此时发生串口中断,把数据存到rec-data中然后跳到串口中断函数中

在函数中将刚才储存的数据发送出去后又接收新的数据,这也就是为什么接收函数中发送数据的代码要在接收代码上面

八.灯

题目要求灯的亮灭有时间要求,这就需要去配置一个0.1s的定时器,定时器记得使能中断后生成代码

九.PWM输出功能(不熟)

输出PWM

PA1配置为PWM输出,计算f'为2000hz,不需要开启中断

生成代码,开启PWM,设置占空比

输入捕获

还需要一个引脚来捕获频率,这个题目没有要求。但是我们需要用来查看自己的PWM和占空比是否正确,输入捕获是需要用中断的

生成代码,开启

找到回调函数写输入捕获函数

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);

占空比计算的时候,如果输出用%d,CCR/ARR是的小数的,这个输出是会出错的,CCR*100再除


http://www.kler.cn/a/592156.html

相关文章:

  • C++项目:高并发内存池_上
  • 【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)
  • pytorch 笔记:张量索引的维度扩展规则
  • python二级每日十题
  • JS逆向_腾讯点选_VMP补环境
  • (五)Reactor核心-前置知识4
  • (六)Reactive-Stream 响应式流
  • 霍尔传感器与电流互感器的区别
  • 男女搭配(数学思维)
  • 如何实现一个bind函数?
  • electron桌面应用多种快速创建方法
  • PyTorch入门指南:环境配置与张量初探
  • 3.19学习总结 题+java面向对象
  • 程序化广告行业(28/89):基于用户旅程的广告策略解析
  • 第三:go 操作mysql
  • 前端iView面试题及参考答案
  • PMP项目管理—相关方管理篇—补充内容
  • 【系统架构设计师】操作系统 - 特殊操作系统 ③ ( 微内核操作系统 | 单体内核 操作系统 | 内核态 | 用户态 | 单体内核 与 微内核 对比 )
  • k8s学习记录(三):Pod基础-Node选择
  • python系列之元组(Tuple)