欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 蓝桥杯第13届真题2

蓝桥杯第13届真题2

2025/3/20 0:09:42 来源:https://blog.csdn.net/2202_75840803/article/details/146328023  浏览:    关键词:蓝桥杯第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再除

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词