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

蓝桥杯第十二届省赛真题

一、所遇问题

(1) 

        这个程序的应用是在LCD上面,打印字符出来。这个问题的出现是因为头文件没有包含#include"stdio.h"包含之后就不会报错了

(2)

        记住要把所有的浮点数后面都要加上f才不会有警告 ,或者写成double也不会出现警告

 (3)

        too few arguments in function call LCD_Clear();这句话的意思就是在LCD_Clear()这个函数里面缺少参数,所以要写成LCD_Clear(Black);才不会报错

二、底层配置

(1)LED底层配置

        在CubeMx里面除了要配置SYS、RCC 、时钟树 24 80 之外,还要配置一下LED的GPIO口:PC8~PC15,还有要记住开一下PD2,然后就可以创建文件了

        根据原理图来看,只有把PC8~PC15都拉高,这样上电之后的LED才是灭掉的

        这个图就是解释了左移八位的原理,以及6 5 转化为二进制的简要方法,这个图应用于LED的Keil底层函数里面

led.c
#include "led.h"

void LED_Disp(uchar dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
led.h
#ifndef __LED_H
#define __LED_H

#include "main.h"

void LED_Disp(uchar dsLED);

#endif
main.c

        首先就是头文件要包含“led.h”,然后要初始化LED:LED_Disp(0x00);最后要在while循环里面写一个 LED测试的代码

LED_Disp(0x00);
LED_Disp(0x01);
HAL_Delay(500);
LED_Disp(0x00);
HAL_Delay(500);

(2)LCD底层配置

CubeMx

        在CubeMx里面什么都不需要配置,只需要配置一个RCC、SYS以及时钟树的24 80 然后生成文件就可以了

Keil

        在生成的文件里面建一个BSP包,并且在BSP包里面放进LCD的驱动文件:lcd.c  lcd.h 要在keil里面添加好这两个文件

main.c

        首先要添加一下头文件 #include "lcd.h",注意使用到sprintf的时候要写“stdio.h”这个头文件,不然会有警告

        然后我们要在int main ()函数里面,根据题目要求,我们要写一下LCD的初始化、LCD的文本颜色设置和背景颜色设置

LCD_Init();
LCD_Clear(Black);
LCD_SetTextColor(Black);
LCD_SetBackColor(White);

        然后我们要写一下LCD显示封装函数,在int main ()函数外面        首先最上面一行是固定显示的,所以直接可以用LCD_DisplayStringLine(Line2,(uint8_t *)"       Data       ");使用这个函数前面一定要加上(uint8_t *)虽然不知道为什么,但是如果不加的话就会有警告。

        LCD_DisplayStringLine()这个函数里面有两个参数,一个就是显示的行数,一个就是(uint8_t*)加上要显示的内容。如果要显示的是一个“hello” ,就直接(uint8_t*)加上一个"hello",如果要显示的是一个可以实时变换的变量,那么可以(uint8_t *)加上text这个字符串变量。综上也就是(uint8_t*)加上你要显示的东西

LCD_DisplayStringLine(Line2,(uint8_t *)"       Data         ");

        如果想要将某变量的值实时显示在LCD屏幕上,就要通过spritf函数将变量赋值到一个字符串数组中,再通过LCD_DisplayStingLine函数显示该字符串数组

char text[30];
uint i=2;
sprintf(text,"   CNBR:%d           ",i);
LCD_DisplayStringLine(Line3,(uint8_t*)text);

        在一个函数中如果需要多个sprintf来显示字符串,那么也只需要一个char text[30];来封装想要表达的字符串,下面的LCD_DisplayStringLine也只需要选定行数然后显示text

        如果需要显示变量的话,那么就在sprintf后面写上这个变量,同时在前面用%d或者%f等来表达这个变量,具体的%d%f的使用方法看后面解释

int     a=2,b=4,c=2;
double  A=3.50,B=2.00;

void disp_proc(void)
{
	char text[30];
	
    if(view==0)
	{
		LCD_DisplayStringLine(Line2,(uint8_t*)"       Data         ");
		
		sprintf(text,"   CNBR:%d          ",a);
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		
		sprintf(text,"   VNBR:%d          ",b);
		LCD_DisplayStringLine(Line6,(uint8_t*)text);
		
		sprintf(text,"   IDLE:%d          ",c);
		LCD_DisplayStringLine(Line8,(uint8_t*)text);
		
	}
	
	if(view==1)
	{
		LCD_DisplayStringLine(Line2,(uint8_t*)"       Para         ");
		
		sprintf(text,"   CNBR:%.2f        ",A);
		LCD_DisplayStringLine(Line4,(uint8_t *)text);
		
		sprintf(text,"   VNBR:%.2f        ",B);
		LCD_DisplayStringLine(Line6,(uint8_t *)text);
	}
}

(3) Key底层配置

        

        


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

相关文章:

  • 反向代理模块。。
  • python -m pip和pip的主要区别
  • 【MySQL — 数据库增删改查操作】深入解析MySQL的 Retrieve 检索操作
  • Apache Flink 概述学习笔记
  • 函数与方法
  • SET alter system reload
  • MongoDB中单对象大小超16M的存储方案
  • HTML从入门到精通:链接与图像标签全解析
  • qs.stringify(data)和JSON.stringify(data)的区别
  • 【Matlab高端绘图SCI绘图模板】第05期 绘制高阶折线图
  • DeepSeek-R1-Distill-Qwen-1.5B:最佳小型LLM?
  • Linux高级--3.3.2 自定义协议设计--ProtoBuf
  • lightgbm做分类
  • 算法新手指南:快速掌握Hello-Algo随时随地提升编程能力
  • 题小年 — 五言绝句一首,Hip-Hop一首
  • 996引擎 - NPC-添加NPC引擎自带形象
  • 前端【10】jQuery DOM 操作
  • 【R语言】流程控制
  • ppp综合实验
  • Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`
  • Avalonia UI MVVM DataTemplate里绑定Command
  • FLUTTER 开发资料集(持续更新)
  • 解决日志中 `NOT NULL constraint failed` 异常的完整指南
  • 【机器学习】 自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 大数据Hadoop入门1
  • 如何在IDEA社区版Service面板中管理springboot项目