蓝桥杯 stm32 LCD显示及 数据格式化

news2024/12/23 11:19:17

文章代码使用 HAL 库。

文章目录

  • 前言
  • 一、LCD 原理图:
  • 二、LCD 基本函数:
      • 1.LCD 清屏函数:LCD_Clear ( u16 Color );
      • 2. 显示一行字符串:LCD_DisplayStringLine(u8 Line, u8 *ptr);
      • 3.设置字符背景色:LCD_SetBackColor(vu16 Color);
      • 4.设置字体颜色:LCD_SetTextColor(vu16 Color);
  • 三,sprintf 函数:
  • 四,处理LCD数据显示问题:(格式化输出)
      • " %5d " , " % -5d " , " % 05d " , " % 5.3f "
      • " %x " , " %o "
      • 显示 百分号:
  • 总结
          • 下一节讲解 EEPROM。

前言


一、LCD 原理图:

比赛提供了 HAL_LCD 的例程,相关的 IO 已经帮我们初始化完成,所以我们不需要再去配置引脚。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
蓝桥杯比赛板子的 LCD 屏幕 的分辨率是 320 * 240

比赛 默认 在 LCD 上显示一个字符大小是固定的,是16 * 24 的点阵

一行最多显示 20 个字符,可以显示 10 行。也就是说一个字符 x 方向占据 16 (320 / 20 = 16), y 方向占据 24 。(240 / 10 = 24)


二、LCD 基本函数:

1.LCD 清屏函数:LCD_Clear ( u16 Color );

LCD_Clear 准确的来说是 清屏 + 填充颜色。
可以将 LCD 屏幕 清屏,并显示不同的颜色(根据 参数 Color )。

下面是 Color 的颜色定义。

/* LCD color */
#define White          0xFFFF
#define Black          0x0000
#define Grey           0xF7DE
#define Blue           0x001F
#define Blue2          0x051F
#define Red            0xF800
#define Magenta        0xF81F
#define Green          0x07E0
#define Cyan           0x7FFF
#define Yellow         0xFFE0

例如: 将屏幕清屏并填充为绿色:

LCD_Clear(Green);  //填充为绿色

在这里插入图片描述

2. 显示一行字符串:LCD_DisplayStringLine(u8 Line, u8 *ptr);

LCD_DisplayStringLine 用于在 某一行显示字符串

Line : 表示要在 哪一行 显示。
ptr :表示要显示的 字符串。

Line 的定义(一共有 10 行)

#define Line0          0
#define Line1          24
#define Line2          48
#define Line3          72
#define Line4          96
#define Line5          120
#define Line6          144
#define Line7          168
#define Line8          192
#define Line9          216

例如:在第 1 行显示 ABC ,在 2 行显示 123。
(由于我们没有设置字体背景颜色,所以显示成白色,下一步我们就显示字符背景颜色; 字体颜色 也没有设置则显示黑色,第 4 步会讲)

	LCD_DisplayStringLine(Line0, (uint8_t *)"       ABC          ");
	LCD_DisplayStringLine(Line1, (uint8_t *)"       123          ");

在这里插入图片描述

3.设置字符背景色:LCD_SetBackColor(vu16 Color);

LCD_SetBackColor 用于设置 背景颜色
此函数没有清屏功能。

例如: 将字符背景设置为黄色。

	LCD_Clear(Green);  //清除屏幕,并填充绿色
	LCD_SetBackColor(Yellow); //将字符背景设置为黄色

	 //在第一行,显示字符ABC
	LCD_DisplayStringLine(Line0, (uint8_t *)"       ABC          "); 
	//在第二行,显示字符123 
	LCD_DisplayStringLine(Line1, (uint8_t *)"       123          "); 

在这里插入图片描述

4.设置字体颜色:LCD_SetTextColor(vu16 Color);

LCD_SetTextColor 用于设置在 LCD 上显示的字体的颜色

颜色通过参数 Color 改变。(颜色定义和上面的一样)

例如;将字体颜色设置为 白 色。

	LCD_SetTextColor(White);

在这里插入图片描述

三,sprintf 函数:

头文件 : #include < stdio.h >
sprintf ( char *str, const char *format, … ) 发送格式化输出到 str 所指向的字符串

str : 这是指向一个字符数组的指针,该数组存储了 C 字符串.
format : 这是字符串

例如:(将 val 放入 buf 数组 buf )

	void fun(unsigned char val)
	{
		unsigned char buf[20];
		sprintf(buf , the value is "%d", val);
	}

四,处理LCD数据显示问题:(格式化输出)

问题:
如果在屏幕某行 先显示一串长数据,后面对 该行 重新输入一共较短的数据时,可能会造成数据的覆盖,导致长数据对短数据覆盖问题。

例如:我首先在第一行显示 2222,后面再次输入 11,则屏幕 会显示 1122。 这就是先前的长数据对端数据进行了覆盖。

	u8 display_buf[20];
	sprintf((char *)display_buf, "%d",2222);    
	LCD_DisplayStringLine(Line0, display_buf);  //第一行显示 2222
	
	sprintf((char *)display_buf, "%d",11);
	LCD_DisplayStringLine(Line0, display_buf);  //再次显示 11

在这里插入图片描述

解决方法

方法一:在第二次输入短数据后 输入空格

	sprintf((char *)display_buf, "%d",2222);
	LCD_DisplayStringLine(Line0, display_buf);
	
	sprintf((char *)display_buf,  "%d  ",11);  //在%d 后面加两个空格。
	LCD_DisplayStringLine(Line0, display_buf);

方法二:格式化输出。

	sprintf((char *)display_buf, "%d",2222);
	LCD_DisplayStringLine(Line0, display_buf);
	
	sprintf((char *)display_buf, "%5d",11);  // %5d 代表输出数据长度是 5 位。(不足5位补空格)
	LCD_DisplayStringLine(Line0, display_buf);

" %5d " , " % -5d " , " % 05d " , " % 5.3f "

" % 5d " : 输出 数据为 5 位, 不足补 0 .(右对齐)

" % -5d " : 输出 数据为 5 位, 不足补 0 .(左对齐)

" % 05d " : 输出 数据为 5 位, 前面补 0 .(右对齐)

" % 5.3f " : 显示小数,总长为 5 为,小数点后有 3 位。(小数点算一位)

例如:显示 1.123123,保留三位小数。

sprintf((char *)display_buf, "%5.3f",1.123123);

在这里插入图片描述

" %x " , " %o "

" %x " : 显示 16 进制。
" %o " : 显示 8 进制。

显示 百分号:

" %d %% ": 使用 2 个百分号可以显示出一个百分号。

总结

下一节讲解 EEPROM。

大家可以自己尝试一下,有不懂的可以留言讨论。

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

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

相关文章

switch自制软件开发环境搭建

参考: https://switch.homebrew.guide/ https://switchbrew.org/wiki/Main_Page https://www.bilibili.com/video/BV133411Q77X/?spm_id_from333.788&vd_sourcec5c272e9490d8bf475c8204462fc26e7 1.开发环境 开发机 -> 虚拟机 ubuntu22.04 设备 -> 破解switch 大…

Ubuntu20.04系统WineHQ7.0安装微信

提供3种Ubuntu系统安装微信的方法&#xff0c;在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信&#xff1a;ubuntu20.04安装最新版微信--可以支持微信最新版&#xff0c;但是适配的不是特别好&#xff1b;比如WeChartOCR.exe 报错。2. 原生微信安装&#xff1a;linux系统下的微信…

[电商实时数仓] 数据仓库建模过程分析

文章目录1.数据仓库概述1.1 数据仓库概念1.2 数据仓库核心架构2.数据仓库建模概述2.1 数据仓库建模的意义2.2 数据仓库建模方法论2.2.1 ER模型2.2.2 维度模型3.维度建模理论之事实表3.1 事实表概述3.2 事实表分类3.3 事务事实表4.维度建模理论之维度表5.数据仓库设计5.1 数据仓…

[前端笔记——HTML 表格] 8.HTML 表格

[前端笔记——HTML 表格] 8.HTML 表格1.HTML 表格基础1.1 什么是表格&#xff1f;1.2 创建表格&#xff1a;2.HTML 表格高级特性和无障碍2.1 使用<caption>为表格增加一个标题2.2 添加<thead>,<tfoot>和<tbody>结构2.3 嵌套表格2.4 对于视力受损的用户…

第五层:C++中的运算符重载

文章目录前情回顾运算符重载概念为什么会出现运算符重载运算符重载中函数名格式加减运算符重载作用实现左移运算符重载作用左移运算符是什么&#xff1f;实现递增递减运算符作用实现前置后置赋值运算符重载关系运算符重载作用实现函数调用运算符重载第二种重载掌握&#xff01;…

vueJs中toRaw与markRaw函数的使用比较

01toRaw()函数接收一个reactive响应式数据,将一个响应式的数据变为普通类型的数据,转化为非响应式数据,相当于还原对象,reactive相当于制作,但对于ref响应式数据不起作用将一个由reactive生成的响应式对象转为普通(原始)对象toRaw()可以返回由reactive(),readonly(),shallowRea…

Java_Git:1. Git简介

目录 1 Git历史 2 Git与Svn对比 2.1 Svn特点 2.2 Git特点 3 Git工作流程 4 Git的安装 4.1 软件下载 4.1.1 git 4.1.2 tortoisegit 4.2 软件安装 4.2.1 安装git for windows 4.2.2 安装TortoiseGit 4.2.3 安装TortoiseGit中文语言包 1 Git历史 版本控制系统目标&…

Spread 16.0.2 for Winforms Crack-2023.1.4 Version

Spread使用这些无依赖性的 WinForms 电子表格组件探索 WinForms 企业应用程序的可能性。 Spread新增&#xff1a;v15 NuGet 包现在支持 .NET 6.0、.NET Core 3.1 和 .NET 4.62 使用桌面设计器应用程序快速提供类似 Excel 的电子表格体验 使用全面的 API创建企业电子表格、网格…

【Python-Django】医疗辅助平台-创建项目-day1

前期准备请参考此文: https://codeknight.blog.csdn.net/article/details/126780724https://codeknight.blog.csdn.net/article/details/126780724下载BootStrap插件: Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HTML、CSS 和 JavaScript 框架,用于开发响应式布局、移…

字符串匹配算法详解

为保证代码严谨性&#xff0c;文中所有代码均在 leetcode 刷题网站 AC &#xff0c;大家可以放心食用。皇上生辰之际&#xff0c;举国同庆&#xff0c;袁记菜馆作为天下第一饭店&#xff0c;所以被选为这次庆典的菜品供应方&#xff0c;这次庆典对于袁记菜馆是一项前所未有的挑…

excel图表美化:用散点标记制作不一样的折线图

柱形图常常用于显示一段时间内的数据变化或显示各项之间的比较情况。但当时间序列过多时&#xff0c;我们往往考虑用折线图来反映数据的变化趋势。之所以讲这个&#xff0c;是希望大家能够把折线图和柱形图的应用区分开来&#xff0c;根据自己的需求使用不同的图表。以下是各个…

深度学习 GNN图神经网络(一)图的基本知识

一、前言 本文主要介绍图的一些基础知识&#xff0c;不会太深奥&#xff0c;够用就行。我们以民国最出名的七角恋人物关系图为例进行讲解。 二、图的概念 图&#xff08;Graph&#xff09;可以用来描述实体之间的关系。 如下图所示&#xff0c;一张图捋清民国最出名的七角恋…

DW动手学数据分析Task5:数据建模及模型评估

目录1 建模1.1 数据分析流程1.2 模型搭建准备工作1.2.1 导入库1.2.2 载入数据1.3 模型搭建1.3.1 选择模型1.3.2 切割训练集和测试集1.3.3 模型创建1.3.4 输出模型预测结果2 评估2.1 评估的准备工作2.2 模型评估2.2.1 交叉验证2.2.2 混淆矩阵2.2.3 ROC曲线1 建模 1.1 数据分析流…

Mac创建python2虚拟环境

前提&#xff1a;已经安装配置好python2.7版本&#xff0c;使用python和pip命令可以得到如下返回信息 1.安装virtualenv和virtualenvwrapper pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple sudo pip install virtualenvwrapper -i https://pypi.tuna.t…

1595_AURIX_TC275_PMU_应用提示2

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果通过标注来标注了异常字行&#xff0c;那么在算法设计的时候&#xff0c;检查到之后应该跳过这一行的数据。 可以纠正的ECC在PFlash中是可以忽略的&#xff0c;相应的信息只是可以用来…

【SpringCloud】Ribbon负载均衡的基本原理与使用

【SpringCloud】Ribbon负载均衡的基本原理与使用 一、负载均衡原理 二、源码解析 LoadBalanced IDEA源码跟踪 负载均衡源码小结 三、负载均衡策略 负载均衡策略 策略规则解析 自定义负载均衡策略 &#xff08;1&#xff09;代码方式 &#xff08;2&#xff09;配置文…

Unity的Bounds(包围盒)简记

Unity的Bounds&#xff08;包围盒&#xff09;简记一、Bounds(包围盒)概述1.什么是包围盒?2.包围盒的类型2.1 AABB包围盒(Axis-aligned bounding box)2.2 包围球(Sphere)2.3 OBB方向包围盒(Oriented bounding box)2.4 FDH固定方向凸包(Fixed directions hulls或k-DOP)2.5 包围…

云服务器部署前后端分离项目(若依)详细教程

第一次在Linux云服务器上部署前后端分离项目&#xff0c;查了很多资料和视频&#xff0c;踩了许多坑。成功实现部署若依的前后端分离项目后&#xff0c;想记录一下前后端部署的过程&#xff0c;供学习的小伙伴参考。 目录1. 环境准备2. 开放端口3. 下载前后端项目4. 前端部署5.…

Linux部署Kafka及常见问题记录

Linux部署Kafka及常见问题记录kafka 使用场景Kafka 基本概念BrokerTopic(主题)Partition(分区)ProducerConsumerConsumer Group&#xff08;消费者群组&#xff09;offset 偏移量Linux 安装&启动 kafka修改核心配置文件创建数据存放目录启动验证 kafk 是否启动成功Topic (主…

AX7A200教程(1):DDR3仿真平台搭建(一)

本章节主要调用官方的MIG控制器&#xff0c;并使用官方的MIG控制器进行仿真&#xff0c;开发环境vivado2020.1鉴于很多童鞋无法仿真自己新建的DDR工程&#xff0c;即使使用modelsim仿真也仿真失败&#xff0c;本例程着重在vivado中对自己新建的带DDR3的工程进行仿真。新建DDR3工…